C ++ - личные данные членов - PullRequest
0 голосов
/ 31 января 2011

Если у меня есть класс с private членами данных, например, могу ли я сказать, что эти члены данных недоступны вне класса или они не доступны за пределами objects этого класса?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 31 января 2011

Технически говоря, ничего из вышеперечисленного.Вы говорите: «Только сущности, которые имеют частный доступ к этому классу, могут получить доступ к этим переменным».

Это включает объекты этого типа , функции-члены этого типа, друзья этоготип , функции-члены друзей этого типа ...

На самом деле, технически говоря, объекты не способны получить доступ к чему-либо, поскольку они не имеют поведения.

2 голосов
/ 31 января 2011

private означает, что функции-члены класса (и любые вложенные типы) могут обращаться к этим элементам данных, учитывая любой экземпляр класса.

1 голос
/ 01 февраля 2011

Если это личное, то (выделение добавлено):

его имя могут использоваться только членами и друзьями класса, в котором оно объявлено.

- Stroustup "Язык программирования C ++" и один из проектов стандартов.

В C ++ к самим данным всегда можно получить доступ с помощью других механизмов.Цель состоит в том, чтобы воспрепятствовать случайному доступу, даже если злонамеренный доступ все еще возможен.

0 голосов
/ 01 февраля 2011

Они недоступны вне кода класса (включая производные классы);за исключением лиц, объявленных 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;
}
...