Конфиденциальность переменных-членов в методах других переменных-членов - PullRequest
0 голосов
/ 17 августа 2010

Имеют ли методы переменной-члена доступ к другим закрытым переменным-членам в том же классе? Я имею в виду переменную-член функтора.

Может ли указатель на закрытую переменную-член быть разыменован и назначен вне класса? Как насчет метода другой переменной-члена?

Может быть, что-то вроде

class A
{
 someClass a,b;

 A(){a(&b);}
}

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Каждый раз, когда вы вызываете метод переменной-члена, если только его тип не является определяемым классом, у вас не будет доступа к закрытым переменным-членам.

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

ПОСЛЕ ВОПРОСА ИЗМЕНЕНО:
В вашем примере вы вызываете метод (через переменную-член "a"), предоставляя указательк закрытой переменной-члену "b".Вы обращаетесь к этим двум закрытым переменным-членам в A, что совершенно правильно для C ++.

1 голос
/ 17 августа 2010

По крайней мере, если я правильно понимаю ваш вопрос, ответ - нет. Например, такой код:

class outer { 
    class inner { 
        int x;
    };

    void use_x() { inner::x = 0; }
};

... не скомпилируется. Тот факт, что inner вложено в outer, не дает функциям-членам outer любой специальный доступ к закрытым частям inner.

Edit: post-edit, я вообще не вижу ничего необычного - A() (очевидно) является членом class A, который также включает в себя приватных членов a и b. Определение private состоит в том, что он доступен (т. Е. Имя видно) для кодирования внутри класса, но не для кодирования вне класса. Поскольку A() находится внутри класса, ему видны и a, и b.

...