visual被继承类C++重写的纯虚拟函数
visual Pure virtual function overridden by inherited class C++
纯虚拟函数(即末端为=0的函数)是否可以被具有常量纯虚拟函数的继承类覆盖,并且仍然被调用?
#include <stdio.h>
struct cBaseClass {
virtual void VirtualFunction () = 0;
};
struct cInheritedClass : cBaseClass {
virtual void VirtualFunction () const {
printf ("I'm a constant virtual function that"
" overrided a pure virtual function!n");
}
}
};
int main() {
cBaseClass *Foo = new cInheritedClass;
Foo->VirtualFunction ();
}
最后一行应该导致调用cInheritedClass::VirtualFunction,而不是cBaseClass::VirtualFunction。我希望常量函数只是一个编译器指令,以确保类中没有任何内容被写入,并且不会影响继承。我在一些冲突例程的级别类中使用了这一点,在这些例程中,最好指定函数是否可以在每个Object/class的基础上修改类。
const
和volatile
限定符确实是函数签名的一部分,因此const
函数不会覆盖非const
函数。我的编译器拒绝您的代码,原因如下:
error: cannot allocate an object of abstract type ‘cInheritedClass’
note: because the following virtual functions are pure within ‘cInheritedClass’:
note: virtual void cBaseClass::VirtualFunction()
在C++11或更高版本中,您可以声明该函数应该是覆盖:
void VirtualFunction () const override // "virtual" is optional when overriding
即使不尝试实例化类,也可以获得更好的诊断:
error: ‘virtual void cInheritedClass::VirtualFunction() const’ marked override, but does not override
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数