C++的朋友,覆盖嵌套类的功能

use*_*399 3 c++ overriding friend nested-class

我想从朋友(+子)类覆盖嵌套类中的虚函数.这怎么可能?这是我尝试过的:

class Parent {
  friend class Child;
  class Nested {
    public: virtual void nestedfunc() {std::cout << "one";}
  }
};
class Child : Parent {
  void Child::Nested::nestedfun() {std::cout << "two";}
}
Run Code Online (Sandbox Code Playgroud)

但我得到:

error: cannot define member function 'Parent::Nested::nestedfunc' within 'Child'
Run Code Online (Sandbox Code Playgroud)

(没有"Child ::"的相同错误)

Luc*_*ore 9

作为覆盖,你需要扩展类然后覆盖它:

class Parent {
  friend class Child;
  class Nested {
    public: virtual void nestedfunc() {std::cout << "one";}
  }
};
class Child : Parent {
  class ChildNested : Parent::Nested
  {
    public: virtual void nestedfunc() {std::cout << "two";}
  }
}
Run Code Online (Sandbox Code Playgroud)

内部类并不那么特殊,它们不会破坏继承规则或提供任何特殊的魔法,可以让你覆盖一个方法,但不能从声明它的类派生.