Maison >développement back-end >C++ >## Pourquoi ma valeur de température est-elle stockée dans le tableau au lieu de la variable prévue dans ma classe C ?

## 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
Barbara Streisandoriginal
2024-10-25 00:27:301141parcourir

## 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>

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 > nomefile;
    cout > measure_set[M];
        if (f.eof()) break;
        M++;
    }
    f.close();
    N = M + 1;

    cout > T;
    cout <p>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.</p>
<p><strong>Solution</strong></p>
<p>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.</p>
<p>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.</p>
<p>L'utilisation d'un nom différent pour la variable de température dans la méthode get ressemblerait à ceci :</p>
<pre class="brush:php;toolbar:false"><code class="cpp">void Measure::get() {
    cout > nomefile;
    cout > measure_set[M];
        if (f.eof()) break;
        M++;
    }
    f.close();
    N = M + 1;

    cout > temperature;
    T = temperature;
    cout <p>Utiliser l'opérateur de résolution de portée pour faire explicitement référence à la classe la variable membre ressemblerait à ceci :</p>
<pre class="brush:php;toolbar:false"><code class="cpp">void Measure::get() {
    cout > nomefile;
    cout > measure_set[M];
        if (f.eof()) break;
        M++;
    }
    f.close();
    N = M + 1;

    cout > this->T;  // Use the scope resolution operator to refer to the class member variable
    cout </code>

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!

Déclaration:
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