我想从朋友(+ 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 ::”的相同错误)
答案 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";}
}