schattenvariablen in c
In der objektorientierten Programmierung treten Schatten auf, wenn eine in einer Klasse definierte Variable in einem Out-Scop den gleichen Namen wie eine Variable hat. Dies kann zu unerwartetem Verhalten führen, da die innere Variable Vorrang vor der äußeren Variablen hat. int n; double mess_set []; Char Nomefile []; double t; öffentlich: void get (); void printall (); double mean (); double thermal_comp (); };
Die GET -Methode in dieser Klasse soll Werte aus einer Datei lesen und im Array mess_set speichern und einen Temperaturwert lesen und in der T -Variablen speichern. cout > nomefile; cout > mess_set [m]; if (f.eof ()) brechen; M ; } f.close (); N = m 1; cout > t; cout Sie haben festgestellt, dass der Temperaturwert (t) im ersten Element des Arrays mess_set (mess_set [0]) anstelle der beabsichtigten T -Variablen gespeichert wird. In diesem Fall kann die in der Get -Methode deklarierte T -Variable die Klassenmitglied -Variable t.
Um das Schatten zu vermeiden, können Sie entweder verschiedene Namen für die Variablen verwenden oder den Scope -Auflösungsoperator verwenden (: :), um explizit auf die Klassenmitgliedsvariable zu verweisen. Messen :: get () { cout > nomefile; cout > mess_set [m]; if (f.eof ()) brechen; M ; } f.close (); N = m 1; cout > Temperatur; T = Temperatur; cout
class Measure {
int N;
double measure_set[];
char nomefile[];
double T;
public:
void get( );
void printall( );
double mean( );
double thermal_comp( );
};
void mee :: get () {) cout > nomefile; cout > mess_set [m]; if (f.eof ()) brechen; M ; } f.close (); N = m 1; cout > this-> t; // Verwenden Sie den Operator des Bereichsauflösungsbetriebs, um sich auf die Klassenmitgliedvariable zu beziehen cout
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3