"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ## ¿Por qué se almacena mi valor de temperatura en la matriz en lugar de la variable prevista en mi clase C ++?

## ¿Por qué se almacena mi valor de temperatura en la matriz en lugar de la variable prevista en mi clase C ++?

Publicado el 2025-03-22
Navegar:228

## Why is my temperature value being stored in the array instead of the intended variable in my C   class?

sombreado variables en c

en la programación orientada a objetos, la sombra ocurre cuando una variable definida dentro de una clase tiene el mismo nombre como variable en un ámbito externo. Esto puede conducir a un comportamiento inesperado, ya que la variable interna tiene prioridad sobre la variable externa.

SOMPRESO: SOMBRAR EN UNA CLASE

Considere la siguiente definición de clase:

class Measure {
    int N;
    double measure_set[];
    char nomefile[];
    double T;

    public:
    void get( );
    void printall( );
    double mean( );
    double thermal_comp( );
};
El método GET en esta clase está destinado a leer los valores de un archivo y guardarlos en la matriz de medidas_set, y leer un valor de temperatura y almacenarlo en la variable t.

sin embargo, cuando implementa el método GET de la siguiente manera:

void mide :: get () { cout > nomefile; cout > mide_set [m]; if (f.Eof ()) ruptura; M; } F.Close (); N = m 1; cout > t; cout void Measure::get() { cout > nomefile; cout > measure_set[M]; if (f.eof()) break; M ; } f.close(); N = M 1; cout > T; cout

solución

Esto ocurre porque c permite variables con el mismo nombre a ser diferentes en los diferentes escoces. En este caso, la variable t declarada en el método get sombreado la variable de miembro de la clase t. para evitar la sombra, puede usar diferentes nombres para las variables o usar el operador de resolución de alcance (: :) para consultar explícitamente la variable de miembro de clase. esto:

void mide :: get () { cout > nomefile; cout > mide_set [m]; if (f.Eof ()) ruptura; M; } F.Close (); N = m 1; cout > temperatura; T = temperatura; cout usando el operador de resolución de ámbitos para referirse explícitamente a la variable de miembro de la clase se vería así:

 void mide :: get () {
    cout > nomefile;
    cout > mide_set [m];
        if (f.Eof ()) ruptura;
        M;
    }
    F.Close ();
    N = m 1;

    cout > this-> t;  // Use el operador de resolución de alcance para referirse a la variable de miembro de la clase
    cout 
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3