在 multi-level 继承中,如果孙子 parent 已经实现了它,是否需要实现纯虚方法?
In a multi-level inheritance, does a grandchild require to implement a pure virtual method, if its parent has already implemented it?
class A {
public: virtual void start() = 0;
};
class B : public A {
public: void start();
};
class Ba : public B {
};
我们需要在 Ba
中重新定义 start()
还是 parent 的 B::start()
就足够了?
Parent的start()
就够了
你应该为 B 的重新实现使用 override 关键字:
class B : public A {
public: void start() override;
};
清楚地表明该方法是虚拟方法的实现,并且编译器将强制始终如此,即使将来 class A 发生变化也是如此。
首先你的声明:public: void start();将有问题,因为必须覆盖派生 class 中的纯虚函数,否则派生 class 也将变为抽象。
来到你的实际问题 B 的开头就足够了。
class A {
public: virtual void start() = 0;
};
class B : public A {
public: void start();
};
class Ba : public B {
};
我们需要在 Ba
中重新定义 start()
还是 parent 的 B::start()
就足够了?
Parent的start()
就够了
你应该为 B 的重新实现使用 override 关键字:
class B : public A {
public: void start() override;
};
清楚地表明该方法是虚拟方法的实现,并且编译器将强制始终如此,即使将来 class A 发生变化也是如此。
首先你的声明:public: void start();将有问题,因为必须覆盖派生 class 中的纯虚函数,否则派生 class 也将变为抽象。
来到你的实际问题 B 的开头就足够了。