C ++ - 私有数据成员

时间:2011-01-31 20:51:05

标签: c++ class object private

例如,如果我有一个包含private数据成员的类,我是否说这些数据成员在类外无法访问,或者在该类的objects之外无法访问?< / p>

感谢。

4 个答案:

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