【发布时间】:2020-11-03 09:36:26
【问题描述】:
出于好奇,我决定尝试一些东西,看看它是如何工作的。我想看看一个类的一个对象是否可以访问同一类的另一个对象的私有变量。显然它可以,如果这个程序是任何指标:
#include <iostream>
using namespace std;
class Colour
{
private:
int var;
public:
void setVar(int x)
{
var = x;
}
int getVar() const
{
return var;
}
int getOtherVar(Colour col) //steals the private var of another Colour object
{
return col.var;
}
};
int main()
{
Colour green;
Colour red;
green.setVar(54);
red.setVar(32);
cout << "Green is " << green.getVar() << endl;
cout << "Red is " << red.getVar() << endl;
cout << "Green thinks Red is " << green.getOtherVar(red) << endl;
return 0;
}
我有点期待它会以某种方式失败,即类的每个唯一实例都只能访问 其自己的私有成员。我做了一些研究,发现隐私is a class-specific thing, not an instance-specific thing.
无论如何,我决定进一步试验,发现有些东西有点令人困惑。我编辑了getOtherVar() 的实现并将其变成了这样:
int getOtherVar(Colour col) const
{
col.var = 67;
return col.var;
}
我认为如果对象可以访问彼此的成员,const 关键字不应该也保护同一类的其他对象不被更改吗?它没有,我不知道为什么。
【问题讨论】:
-
@DanielLangr 你能用一个例子写一个答案吗?
标签: c++ class private information-hiding