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

时间:2012-07-12 09:30:29

标签: c++ override friend nested-class

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

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 ::”的相同错误)

3 个答案:

答案 0 :(得分: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";}
  }
}

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

答案 1 :(得分: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";}
    };
};

答案 2 :(得分:1)

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

class Child : Parent::Nested {
  void nestedfun() {std::cout << "two";}
}