为何C++类set方法中加int声明population后输出始终为0?
问题分析:C++类成员变量赋值异常原因
先看你写的代码:
#include <iostream> #include <string> using namespace std; class ran{ private: int population; public: void set(int x){ int population = x; } int get(){ return population; } }; int main() { ran linux; linux.set(50900); cout << linux.get(); return 0; }
核心原因:局部变量遮蔽了类成员变量
当你在set方法里写int population = x;时,你是在方法内部创建了一个新的局部变量,这个变量和类的私有成员population重名,但完全是两个独立的变量。你给这个局部变量赋值后,它会在方法执行结束后销毁,根本没修改过类的成员变量。
而类的私有成员population因为没有被显式初始化,属于未初始化的局部对象成员(main里的linux是局部对象),其值是未定义的,你看到输出0是编译器的默认初始化行为(不同环境可能输出其他随机值)。
当你去掉int关键字后,population = x;就会直接操作类的成员变量,把传入的x赋值给它,这时get方法就能返回正确的50900了。
内容的提问来源于stack exchange,提问作者Chandan Gowda
相关产品推荐
相关产品推荐

