是否可以显式使用祖先的虚拟类方法作为派生方法?
Can you explicitly use an ancestor's virtual class method as a derived method?
是否可以在覆盖远祖的虚拟函数后显式使用该函数?类似以下内容?
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
的方法指针放在表中,就好像它从未被重写一样。
我不想这样做:
class C: public B {
virtual void task() {
A::task();
}
};
如果要在类A
中使用方法实现,可以像A::task()
一样简单地调用它。
这是一个非虚拟的电话。
关于
"c++使用虚拟表指向类方法
…不,事实并非如此,尽管这是常见的实现方式。
关于
"我不想这样做:
class C: public B { virtual void task() { A::task(); } }
…如果您希望C
类中的task
充当A::task
实现,那么就是这样做的。
你说:
我不想这样做:
class C: public B { virtual void task() { A::task(); } };
考虑到目前的标准状态,我认为这是最好的解决方案。
相关文章:
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- 不实现父类的虚拟方法有什么风险
- 基类中的虚拟方法和子类中的非 Virtula 方法.仍然如何调用子类方法,即使它是非虚拟的
- 我将如何通过抽象类传递虚拟方法,但可以选择不重写
- 为什么从 DLL 调用类方法需要虚拟说明符?
- 在不实例化的情况下调用不同派生类的虚拟方法
- 派生类中虚拟方法的默认实现
- 如何使继承相同基类的类的虚拟方法弄清楚如何处理它们的参数?
- 从基类C++调用虚拟方法
- 使用模板生成纯虚拟基类方法
- 在单个指针数组中调用不同派生类的虚拟方法
- 类具有虚拟方法,但具有非虚拟析构函数C++
- 如何使用static_assert检查派生类是否覆盖非虚拟基类方法
- 限制指针类型的模板参数和重写模板化基类的虚拟方法
- 专业类的虚拟方法
- C++11:使用中央命令映射器调用虚拟基类方法
- 虚拟继承:当只有一个基类具有"虚拟"关键字时,为什么它有效?有没有更好的方法?
- 使用虚拟重写基类方法不起作用
- 使用模板调用正确的派生类方法而不使用虚拟?
- 调用actor中其他类的虚拟方法