Есть ли разница между общедоступным вложенным классом и обычным классом? - PullRequest
2 голосов
/ 25 сентября 2010

Допустим, у меня есть:

class A {

public:
    class B {

    };

};

Есть ли разница между этим общедоступным вложенным классом и обычным классом B, который определен в его собственном файле cpp, за исключением того факта, что A :: B должен использоваться в первом параметре?

Ответы [ 2 ]

9 голосов
/ 25 сентября 2010

По сути, нет никакой разницы, за исключением того, что A::B является членом A, и поэтому имеет все права доступа к закрытым членам A, которые имел бы любой другой участник.

0 голосов
/ 25 сентября 2010

Нет никакой разницы, кроме правил определения области действия "B". Клиенты, которые используют «B», должны квалифицировать свою область с «A ::». Вложение «B» иногда может быть проблематичным, если вы хотите перенаправить ссылку на него, поскольку компиляторы C ++ обычно не позволяют вам перенаправлять ссылку на класс внутри класса (хотя это позволяет вам перенаправлять ссылку на класс в пространстве имен).

...