Внутренний класс и доступ к внешним членам - PullRequest
2 голосов
/ 21 мая 2010

У меня есть вопрос с таким же названием здесь , но теперь, как я покажу в приведенном ниже коде, похоже, что он ведет себя противоположно тому, как я объяснил в моем первом вопросе с таким же названием. ОК, код:

class LINT_rep
{
private:
    char* my_data_; //stores separately every single digit from a number
public:
    class Iterator:public iterator<bidirectional_operator_tag,char>
        {
private: 
char* myData_
public:
        Iterator(const LINT_rep&);
    };
};

#include "StdAfx.h"
#include "LINT_rep.h"


LINT_rep::Iterator::Iterator(const LINT_rep& owner):myData_(nullptr)
{
    myData_ = owner.my_data_; /*
        HERE I'M ACCESSING my_data WHICH IS PRIVATE AND THIS   
        CODE COMPILES ON VS2010 ULTIMATE BUT IT SHOULDN'T  
        BECAUSE my_data IS PRIVATE AND OTHER CLASS SHOULDN'T  
        HAVE ACCESS TO IT'S PRIVATE MEMB. AS EXPLAINED TO ME IN  
        QUESTION TO WHICH I;VE PROVIDED LINK. */
}

Вопрос в коде. Спасибо.

Ответы [ 2 ]

5 голосов
/ 21 мая 2010

Права доступа для вложенных классов к членам включающих классов изменяются в будущем стандарте C ++ 0x. В текущем стандарте 11.8 говорит:

Члены вложенного класса не имеют специального доступа к членам включающего класса

В черновике для C ++ 0x это меняется на

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

Некоторые компиляторы принимают новые правила доступа; из вашего вопроса, я полагаю, VS2010 делает, и я знаю из опыта, что GCC сделал в течение некоторого времени.

1 голос
/ 21 мая 2010

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

11,8 Вложенные классы [class.access.nest]
1- Вложенный класс является членом и, следовательно, имеет те же права доступа, что и любой другой член. Члены включающего класса не имеют специального доступа к членам вложенного класса; должны соблюдаться обычные правила доступа (пункт 11).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...