是否可以在已被覆盖的情况下明确使用远程祖先的虚拟功能?类似于以下内容?
class A {
virtual void task();
};
class B: public A {
virtual void task() override;
};
class C: public B {
virtual void task() = A::task; /* C++ doesn't like this */
};
我真的不想重新实施已经实施过的东西。它似乎在技术上是可行的,因为c++使用虚拟表来指向类方法,因此在幕后它应该能够将A
的方法指针放在表中就好像它从未被覆盖过一样。
我 NOT 想要这样做:
class C: public B {
virtual void task() {
A::task();
}
};
答案 0 :(得分:4)
如果要在课程A
中使用方法实现,您只需将其称为A::task()
。
这是非虚拟电话。
关于
“ c ++使用虚拟表指向类方法
......不,那不是这样,尽管这是常见的实施方式。
关于
“我不想要这样做:
class C: public B { virtual void task() { A::task(); } }
...如果您希望课程task
中的C
充当A::task
实施方式,那么就是这样做的。
答案 1 :(得分:3)
你说:
我 NOT 想要这样做:
class C: public B { virtual void task() { A::task(); } };
我认为鉴于目前的标准状态,这是最好的解决方案。