修改对象还会修改同一类的所有其他对象

时间:2019-07-23 10:33:25

标签: c++ class variables scope datamember

自从我上一个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?

1 个答案:

答案 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;
    }
//...
};