залежие переменные в C
В программировании объектно-ориентированного, затенение происходит, когда переменная, определенная в классе, имеет одинаковое имя, что и переменное во внешнем объеме. Это может привести к неожиданному поведению, поскольку внутренняя переменная имеет приоритет над внешней переменной.
задача: Задержка в классе
рассмотрим определение следующего класса:
class Measure {
int N;
double measure_set[];
char nomefile[];
double T;
public:
void get( );
void printall( );
double mean( );
double thermal_comp( );
};
Метод GET в этом классе предназначен для чтения значений из файла и сохранения их в массиве MARE_SET, и для чтения значения температуры и сохранить его в переменной T.
, однако, когда вы реализуете метод GET следующим образом:
void Measure::get() {
cout > nomefile;
cout > measure_set[M];
if (f.eof()) break;
M ;
}
f.close();
N = M 1;
cout > T;
cout вы заметили, что значение температуры (t) хранится в первом элементе массива marue_set (mearge_set [0]) вместо предполагаемой T -переменной.
Solution
это происходит потому, что C допускает переменные с тем же наименованием, чтобы объявить в различных. В этом случае переменная t, объявленная в тени метода получения, переменная класса члена t.
, чтобы избежать затенения, вы можете либо использовать разные имена для переменных, либо использовать оператор разрешения области (: :) Чтобы явно ссылаться на переменную члена класса. this:
void мера :: get () {
cout > nomefile;
cout > secret_set [m];
if (f.eof ()) разрыв;
М;
}
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 > temperature;
T = temperature;
cout
void recement :: get () {
cout > nomefile;
cout > secret_set [m];
if (f.eof ()) разрыв;
М;
}
f.close ();
N = m 1;
cout > this-> t; // Использование оператора разрешения сферы для обозначения переменной члена класса
cout ]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3