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";
}
};
请记住,如果您不传递对象的地址(就像我所做的那样),您在函数内部对其所做的更改将在函数结束时不复存在
我想问一下 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";
}
};
请记住,如果您不传递对象的地址(就像我所做的那样),您在函数内部对其所做的更改将在函数结束时不复存在