自从我上一个c ++项目以来已经很久了,现在我陷入了一个非常简单的问题。我创建了两个对象,只想修改其中一个。现在我不明白为什么另一个对象也被修改了。
MainClass:
#include "testobject.h"
#include <iostream>
int main() {
TestObject o1;
TestObject o2;
std::cout << "object1 before: " << o1.getI() << std::endl;
std::cout << "object2 before: " << o2.getI() << std::endl;
o1.setI(2);
std::cout << "object1 after: " << o1.getI() << std::endl;
std::cout << "object2 after: " << o2.getI() << std::endl;
}
TestObjectClass:
#include "testobject.h"
int i;
int TestObject::getI() {
return i;
}
void TestObject::setI(int j) {
i = j;
}
输出为:
object1 before: 0
object2 before: 0
object1 after: 2
object2 after: 2
为什么object2中的i也设置为2?
答案 0 :(得分:4)
两个对象都引用公共变量
int i;
在全局名称空间中声明。因此,一旦更改了变量,类方法
int TestObject::getI() {
return i;
}
将为两个对象返回相同的变量i值。
使变量成为类的数据成员。
例如
class TestObject
{
//...
private:
int i;
};
请注意,应使用限定符const声明成员函数getI
,因为它不会更改对象本身
class TestObject
{
public:
int getI() const {
return i;
}
//...
};