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

Posted

技术标签:

【中文标题】你能在 C++ 中保护嵌套类吗?【英文标题】:Can you have protected nested classes in C++? 【发布时间】:2010-09-23 09:06:20 【问题描述】:

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

【问题讨论】:

你应该试试!提出概念证明似乎并不难...... 【参考方案1】:

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

 class A 
   protected:
   class Nested  ;
 ;

 class B : public A 
   private:
   Nested n;
 ;

并且不在 A 中的代码或从 A 派生的东西无法访问或实例化 A::Nested。

【讨论】:

Hmm 如果类 B 为嵌套 n 提供访问器方法会发生什么?可能是编译错误? 其实,没有。在声明 B 的方法时,名称查找也发生在 B 类的范围内。而在 B 范围内,A::Nested 是可访问的。因此,A::Nested& B::Get_n() 是可以的。 嗯,你说得对。 A::Nested 是可访问的,因为 B 可以从公共函数返回 A::Nested。 B 它仍然不能实例化,所以有趣的是这导致了调用者不允许存储 B::Get_n() 的返回值的情况。

以上是关于你能在 C++ 中保护嵌套类吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 我需要为嵌套类定义标题保护吗?

这个嵌套类构造函数片段可以应用于泛型类吗?

C++拾遗(十三)友元和嵌套类

Swift 嵌套类属性

你能帮我处理我的 const_iterator 内部类吗?

C++中,一个类模板的内部又嵌套了一个类模板,语法应该是怎么样的