Maison > développement back-end > C++ > le corps du texte

## Pourquoi ma valeur de température est-elle stockée dans le tableau au lieu de la variable prévue dans ma classe C ?

Barbara Streisand
Libérer: 2024-10-25 00:27:30
original
945 Les gens l'ont consulté

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

Ombrage des variables en C

En programmation orientée objet, l'observation se produit lorsqu'une variable définie dans une classe porte le même nom qu'une variable dans un périmètre extérieur. Cela peut conduire à un comportement inattendu, car la variable interne a priorité sur la variable externe.

Problème : observation dans une classe

Considérez la définition de classe suivante :

<code class="cpp">class Measure {
    int N;
    double measure_set[];
    char nomefile[];
    double T;

    public:
    void get( );
    void printall( );
    double mean( );
    double thermal_comp( );
};</code>
Copier après la connexion

La méthode get de cette classe est destinée à lire les valeurs d'un fichier et à les enregistrer dans le tableau Measure_set, ainsi qu'à lire une valeur de température et à la stocker dans la variable T.

Cependant , lorsque vous implémentez la méthode get comme suit :

<code class="cpp">void Measure::get() {
    cout << "Insert filename:" << endl;
    cin >> nomefile;
    cout << endl;
    cout << nomefile << endl;
    cout << endl;

    int M = 0;
    int nmax = 50;

    ifstream f;
    f.open(nomefile);
    while (M < nmax) {
        f >> measure_set[M];
        if (f.eof()) break;
        M++;
    }
    f.close();
    N = M + 1;

    cout << "Insert temperature:" << endl;
    cin >> T;
    cout << endl;
}</code>
Copier après la connexion

Vous avez remarqué que la valeur de température (T) est stockée dans le premier élément du tableau Measure_set (measure_set[0]) au lieu du T prévu variable.

Solution

Cela se produit car C permet aux variables portant le même nom d'être déclarées dans des portées différentes. Dans ce cas, la variable T déclarée dans la méthode get masque la variable membre de la classe T.

Pour éviter l'observation, vous pouvez soit utiliser des noms différents pour les variables, soit utiliser l'opérateur de résolution de portée (::) pour explicitement faire référence à la variable membre de la classe.

L'utilisation d'un nom différent pour la variable de température dans la méthode get ressemblerait à ceci :

<code class="cpp">void Measure::get() {
    cout << "Insert filename:" << endl;
    cin >> nomefile;
    cout << endl;
    cout << nomefile << endl;
    cout << endl;

    int M = 0;
    int nmax = 50;

    ifstream f;
    f.open(nomefile);
    while (M < nmax) {
        f >> measure_set[M];
        if (f.eof()) break;
        M++;
    }
    f.close();
    N = M + 1;

    cout << "Insert temperature:" << endl;
    double temperature;  // Use a different name for the temperature variable
    cin >> temperature;
    T = temperature;
    cout << endl;
}</code>
Copier après la connexion

Utiliser l'opérateur de résolution de portée pour faire explicitement référence à la classe la variable membre ressemblerait à ceci :

<code class="cpp">void Measure::get() {
    cout << "Insert filename:" << endl;
    cin >> nomefile;
    cout << endl;
    cout << nomefile << endl;
    cout << endl;

    int M = 0;
    int nmax = 50;

    ifstream f;
    f.open(nomefile);
    while (M < nmax) {
        f >> measure_set[M];
        if (f.eof()) break;
        M++;
    }
    f.close();
    N = M + 1;

    cout << "Insert temperature:" << endl;
    cin >> this->T;  // Use the scope resolution operator to refer to the class member variable
    cout << endl;
}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!