例如,如果我有一个包含private
数据成员的类,我是否说这些数据成员在类外无法访问,或者在该类的objects
之外无法访问?< / p>
感谢。
答案 0 :(得分:3)
从技术上讲,以上都不是。您说,“只有拥有此类私有权限的实体才能访问这些变量。”
这包括该类型的对象,该类型的成员函数,该类型的朋友,该类朋友的成员函数......
实际上,从技术上讲,对象无法访问任何内容,因为它们没有行为。
答案 1 :(得分:2)
private
表示类的成员函数(以及任何嵌套类型)可以在给定类的任何实例的情况下访问这些数据成员。
答案 2 :(得分:1)
如果它是私人的,那么(强调补充):
其名称只能由成员使用 和它的班级朋友 宣布。
- Stroustup的“The C ++ Programming Language”,以及标准草案之一。
在C ++中,数据本身总是可以被其他机制访问。目标是阻止意外访问,即使恶意访问仍然可行。
答案 3 :(得分:0)
在类的代码(包括派生类)之外无法访问它们;除了声明为friend
的实体。由于类的代码(类成员函数)绑定到类(而不是单个对象),因此可以在类级别评估可访问性。
class Foo
{
private:
int secret;
Foo * other;
public:
explicit Foo(Foo* other_) : other(other_), secret(42) {}
Foo() : other(0), secret(0) {}
int Peek(void) { return secret; }
int neighborPeek(void)
{
if (other)
return other->secret; // this is OK, we're still inside the class
else
return -1;
}
int main()
{
Foo aFoo, bFoo(&aFoo);
std::cout << bFoo.neighborPeek(); // will dump aFoo's secret.
return 0;
}