getter setter c++ 不符合预期

getter setter c++ not as expected

我想问一下 getters/setters。除了 'main',我还有 2 classes。从另一个 class.

访问变量时出现错误

这是我的代码

#include <iostream>
using namespace std;

class Employee {
  private:
    // Private attribute
    int salary;

  public:
    // Setter
    void setSalary(int s) {
      salary = s;
    }
    // Getter
    int getSalary() {
      return salary;
    }
};

class boss {
  public: 
  void tes() {
    Employee myObj;
    cout << "(2) boss ask salary:  " << myObj.getSalary() << "?\n";

    myObj.setSalary(60000);
    cout << "(3) boss said new salary:  " << myObj.getSalary() << "\n";
  }
};

int main() {
  Employee myObj;
  myObj.setSalary(50000);
  cout << "(1) main said salary: " << myObj.getSalary() << "\n";

  boss bs;
  bs.tes();

  return 0;
} 

并输出:

(1) main said salary: 50000
(2) boss ask salary:  32649?
(3) boss said new salary:  60000

为什么第2行的结果不符合预期?应该是50000。如何编写代码使其正确? 谢谢。

在 main 函数中,您有一个 Employee 实例,您将薪水设置为 50000。 在 boss.tes() 函数中,你有一个不同的 Employee 实例,它在 salary member 中没有任何值,这就是你在打印 'boss ask salary' 时得到“垃圾”值的原因。

我不知道你代码中的逻辑应该是什么,但如果你希望它是相同的薪水,你需要更改 tes() 方法来接收 Employee& 和那么它将对你有用。

#include <iostream>
using namespace std;

class Employee {
  private:
    // Private attribute
    int salary;

  public:
    // Setter
    void setSalary(int s) {
      salary = s;
    }
    // Getter
    int getSalary() {
      return salary;
    }
};

class boss {
  public: 
  void tes(Employee& employee) {
    cout << "(2) boss ask salary:  " << employee.getSalary() << "?\n";

    employee.setSalary(60000);
    cout << "(3) boss said new salary:  " << employee.getSalary() << "\n";
  }
};

int main() {
  Employee myObj;
  myObj.setSalary(50000);
  cout << "(1) main said salary: " << myObj.getSalary() << "\n";

  boss bs;
  bs.tes(myObj);

  return 0;
}

函数本身就是一个世界。这意味着如果您调用一个函数,它将只有您在内部声明的变量和您传递的变量。要在其他对象的方法中使用您在 main 中声明的对象,您必须在调用中传递它。

你的主要是:

int main() {
  Employee myObj;
  myObj.setSalary(50000);
  cout << "(1) main said salary: " << myObj.getSalary() << "\n";

  boss bs;
  bs.tes(myObj);

  return 0;
} 

你的老板 class 会是:

class boss {
  public: 
  void tes(Employee myObj) {
    cout << "(2) boss ask salary:  " << myObj.getSalary() << "?\n";

    myObj.setSalary(60000);
    cout << "(3) boss said new salary:  " << myObj.getSalary() << "\n";
  }
};

请记住,如果您不传递对象的地址(就像我所做的那样),您在函数内部对其所做的更改将在函数结束时不复存在