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 ?
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!