«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать затенения переменных в методах классов C++?

Как избежать затенения переменных в методах классов C++?

Опубликовано 22 декабря 2024 г.
Просматривать:564

How to Avoid Shadowing Variables in C   Class Methods?

Затенение переменных в C

При определении переменных внутри классов C позволяет использовать переменные с одинаковыми именами в разных областях видимости. Это явление, известное как «затенение переменных», может привести к путанице и неожиданному поведению.

В данном определении класса:

class Measure {
int N;
double measure_set[];
char nomefile[];
double T;
};

переменная-член T будет затенена переменной T, объявленной в методе get:

void Measure::get() {
int M=0;
int nmax=50;

// ...

cout > T;
cout 

В результате любые изменения, внесенные в T внутри метода get, фактически повлияют на затененную переменную Measure_set[0]. Чтобы устранить эту проблему, рассмотрите возможность использования разных имен переменных или префиксов членов классов, чтобы избежать конфликтов имен:

Различные имена переменных:

class Measure {
int N;
double measure_set[];
char nomefile[];
double temperature; // Rename variable
};

void Measure::get() {
// ...

cout > temperature;
cout 

Префиксы членов класса:

class Measure {
int m_N;
double m_measureSet[];
std::string m_nomefile;
double m_T;
};

void Measure::get() {
// ...

cout > m_T;
cout 

Префикс переменных-членов с именем класса или конкретным идентификатором позволяет избежать конфликтов имен и гарантировать, что затененные переменные не мешают членам класса.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3