C++ getter/setter跨类访问返回值不符合预期问题求解
问题成因
你遇到的问题核心是两个完全独立的Employee类实例的私有成员互不关联:
- main函数中定义的
Employee myObj是main作用域下的局部对象,你给它设置salary为50000的操作仅对该对象生效。 - boss类的
tes()方法内部又重新定义了一个新的局部Employee myObj对象,这个新对象从未调用过setSalary初始化salary属性,C++中未初始化的栈区int类型变量会读取内存中的随机垃圾值,也就是你看到的32649这类无意义数字。你后续给这个局部对象设置60000的操作,也仅作用于该局部对象,和main中的对象没有任何关联。
修复方案
如果要让boss类访问到main中创建的Employee对象的薪资,优先选择「传引用」的修改方案,符合员工薪资是单个对象属性的业务逻辑:
- 修改boss类的tes方法,增加Employee引用参数
class boss { public: // 传入Employee对象的引用,直接操作原对象避免拷贝 void tes(Employee& emp) { cout << "(2) boss ask salary: " << emp.getSalary() << "?\n"; emp.setSalary(60000); cout << "(3) boss said new salary: " << emp.getSalary() << "\n"; } };
- 调整main中tes方法的调用逻辑,传入已经初始化的Employee对象
int main() { Employee myObj; myObj.setSalary(50000); cout << "(1) main said salary: " << myObj.getSalary() << "\n"; boss bs; bs.tes(myObj); // 把main中创建的对象传入tes方法 // 此时再次打印会得到修改后的60000,因为引用传递直接修改了原对象 cout << "(4) main check new salary: " << myObj.getSalary() << "\n"; return 0; }
修改后运行输出将符合预期:
(1) main said salary: 50000 (2) boss ask salary: 50000? (3) boss said new salary: 60000 (4) main check new salary: 60000
内容的提问来源于stack exchange,提问作者Eddys
相关产品推荐
相关产品推荐

