«закрывающие» рамки для занятий дружбой - PullRequest
3 голосов
/ 18 декабря 2009

Бьярне Страуструп пишет:

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

Разве первая часть оператора не является избыточной, потому что "не относящаяся к классу область, сразу включающая в себя класс", включает в себя "ранее объявленную в охватывающей области"? IE: какая разница в этих двух областях?

Ответы [ 3 ]

1 голос
/ 18 декабря 2009

Может быть, во второй части написано "немедленно заключить", а в первой нет? Таким образом, я понял, что если класс объявлен в области, не относящейся к классу (т. Е. В пространстве имен или глобальном), то это может быть только непосредственно включающая область (одна вверх). Если он объявлен во вложенной области видимости class (например, вложенные классы), он может быть намного выше, чем вы хотите.

Значение следующее:

class Grandpa
{
    class Mother
    {
        class Junior
        {
            friend class Grandpa;
        };

    };
};

Просто потому, что Grandpa - это несколько "классов классов" выше Junior.

1 голос
/ 18 декабря 2009

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

0 голосов
/ 18 декабря 2009

Друзья не позволяют друзьям использовать друзей.

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