3

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

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

但我得到:

error: cannot define member function 'Parent::Nested::nestedfunc' within 'Child'

(没有“Child::”的同样错误)

4

3 回答 3

10

随着覆盖的进行,您需要扩展类,然后覆盖它:

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";}
  }
}

内部类并没有那么特别,它们不会破坏继承规则或提供任何特殊的魔法来让您覆盖一个方法但不从声明它的类派生。

于 2012-07-12T09:33:53.037 回答
2

基本上你需要在 Child 中派生另一个类,如下所示,并在那里实现你的虚函数。

class Parent 
{
  friend class Child;
  class Nested {
    public: virtual void nestedfunc() {std::cout << "one";}
  };
};

class Child : Parent 
{

    //derive a new class in the child to override the virtual function.
    class ChildNested : public Parent::Nested
    {
       void nestedfun() {std::cout << "two";}
    };
};
于 2012-07-12T09:34:55.423 回答
1

您可以在派生类中覆盖基类的虚函数。内部类是一个单独的类。您需要创建一个从内部类派生的类。像这样的东西:

class Child : Parent::Nested {
  void nestedfun() {std::cout << "two";}
}
于 2012-07-12T09:33:36.910 回答