You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ getter/setter跨类访问返回值不符合预期问题求解

问题成因

你遇到的问题核心是两个完全独立的Employee类实例的私有成员互不关联:

  • main函数中定义的Employee myObj是main作用域下的局部对象,你给它设置salary为50000的操作仅对该对象生效。
  • boss类的tes()方法内部又重新定义了一个新的局部Employee myObj对象,这个新对象从未调用过setSalary初始化salary属性,C++中未初始化的栈区int类型变量会读取内存中的随机垃圾值,也就是你看到的32649这类无意义数字。你后续给这个局部对象设置60000的操作,也仅作用于该局部对象,和main中的对象没有任何关联。
修复方案

如果要让boss类访问到main中创建的Employee对象的薪资,优先选择「传引用」的修改方案,符合员工薪资是单个对象属性的业务逻辑:

  1. 修改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";
  }
};
  1. 调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:57:04