"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar variáveis ​​de sombreamento em métodos de classe C++?

Como evitar variáveis ​​de sombreamento em métodos de classe C++?

Publicado em 2024-12-22
Navegar:599

How to Avoid Shadowing Variables in C   Class Methods?

Sombrando variáveis ​​em C

Ao definir variáveis ​​dentro de classes, C permite que variáveis ​​com o mesmo nome sejam usadas em escopos diferentes. Esse fenômeno, conhecido como "variáveis ​​de sombra", pode causar confusão e comportamento inesperado.

Na definição de classe fornecida:

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

a variável membro T será sombreada pela variável T declarada no método get:

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

// ...

cout > T;
cout 

Como resultado, quaisquer modificações feitas em T dentro do método get afetarão, na verdade, a variável sombreada Measure_set[0]. Para corrigir esse problema, considere usar nomes de variáveis ​​distintos ou utilizar prefixos de membros de classe para evitar colisões de nomes:

Nomes de variáveis ​​distintos:

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

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

cout > temperature;
cout 

Prefixos de membros de classe:

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

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

cout > m_T;
cout 

Ao prefixar as variáveis-membro com o nome da classe ou um identificador específico, você pode evitar colisões de nomes e garantir que as variáveis ​​sombreadas não interfiram nos membros da classe.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3