【发布时间】:2019-07-23 10:33:25
【问题描述】:
自从我上一个 c++ 项目以来已经很久了,现在我遇到了一个非常简单的问题。我创建了两个对象,并且只想修改其中一个。现在我不明白为什么另一个对象也被修改了......
主类:
#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;
}
测试对象类:
#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?
【问题讨论】:
-
什么是
testobject.h? -
因为
int i是在全局范围内而不是在类范围内,如果i是TestObject的成员,那么这2 个TestObject对象将有自己的成员 -
i是全局对象吗? -
i不是任何对象的成员。它是全球性的。你的问题是建立在谎言之上的。 -
因为
int i;是一个全局变量。成为会员class TestObject {public: int getI() const { return i_}; void setI(const int i) { i_ = i;} private: int i_;};
标签: c++ class variables scope datamember