你能在C++中保护嵌套类吗?

Can you have protected nested classes in C++?

提问人:Chad 提问时间:11/21/2008 最后编辑:Don KirkbyChad 更新时间:11/23/2008 访问量:2267

问:

我有一个类,只有某个类层次结构中的类才真正需要它。我想知道是否可以将类嵌套在最高类的受保护部分中,并让所有其他类自动继承它?

C++ 嵌套 保护

评论

0赞 jpoh 11/21/2008
你应该试试看!提出概念证明似乎并不难......

答:

8赞 Tyler McHenry 11/21/2008 #1

“继承”这个词用错了,因为它在C++中有一个非常具体的定义,你不是这个意思,但是是的,你可以这样做。这是合法的:

 class A {
   protected:
   class Nested { };
 };

 class B : public A {
   private:
   Nested n;
 };

不在 A 中的代码或派生自 A 的代码无法访问或实例化 A::Nested。

评论

0赞 Kieveli 11/21/2008
嗯,如果类 B 为 Nested n 提供访问器方法会发生什么?可能是编译错误?
0赞 MSalters 11/21/2008
其实不然。当声明 B 的方法时,名称查找也会发生在类 B 的作用域中。在 B 范围内,A::Nested 是可访问的。因此,A::Nested&B::Get_n()是可以的。
1赞 Tyler McHenry 11/21/2008
嗯,你是对的。A::Nested 是可访问的,因为 B 可以从公共函数返回 A::Nested。B 它仍然不可实例化,所以有趣的是,这导致了不允许调用者存储 B::Get_n() 的返回值的情况。