C++类成员变量与函数局部变量同名时,如何访问类成员变量?
解决类成员变量与局部变量同名时的赋值问题
嗨,这个场景我可太熟悉了!当成员函数里的局部变量和类的成员变量同名时,局部变量会**遮蔽(shadowing)**成员变量——这时候你直接写a,编译器会优先认局部的那个。要给类里的成员变量a赋值,有两种靠谱的方法:
1. 使用this指针(最常用,针对非静态成员变量)
在非静态成员函数中,this是一个指向当前对象的隐式指针,通过this->a就能明确指定你要操作的是类的成员变量,而非局部变量。举个代码例子:
class MyClass { private: int a; // 类的成员变量 public: void b() { int a = 10; // 同名局部变量 this->a = 20; // 这里给类的成员变量a赋值 // 此时局部变量a的值是10,成员变量a的值是20 } };
2. 使用类名+作用域解析符::(针对静态成员变量)
如果你的成员变量a是静态类型的,还可以通过类名加::来直接访问(静态成员属于类本身,而非某个对象):
class MyClass { private: static int a; // 静态成员变量 public: void b() { int a = 10; // 同名局部变量 MyClass::a = 20; // 给静态成员变量a赋值 } }; // 注意:静态成员变量必须在类外部初始化 int MyClass::a = 0;
回到你的问题,既然你说的是普通的int成员变量,那直接用this->a就搞定啦,清晰又不容易出错~
内容的提问来源于stack exchange,提问作者Muthu
相关产品推荐
相关产品推荐

