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

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

【问题讨论】:

  • 你应该试试!提出概念证明似乎并不难......

标签: c++ class nested protected


【解决方案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() 的返回值的情况。
猜你喜欢
  • 2010-12-05
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2011-04-09
相关资源
最近更新 更多