C++ c+中重写和虚拟的组合+;11
我想使用C++11C++ c+中重写和虚拟的组合+;11,c++,c++11,C++,C++11,我想使用C++11重写说明符,并注意到它可以与虚拟一起使用。这有区别吗?考虑下面的类: class Base { virtual void fct() = 0; }; class Derived1 : public Base { void fct() override {} }; class Derived2 : public Base { virtual void fct() override {} }; Derived1和Derived2之间是否存在技术差异?覆
重写
说明符,并注意到它可以与虚拟
一起使用。这有区别吗?考虑下面的类:
class Base
{
virtual void fct() = 0;
};
class Derived1 : public Base
{
void fct() override {}
};
class Derived2 : public Base
{
virtual void fct() override {}
};
Derived1
和Derived2
之间是否存在技术差异?覆盖始终与虚拟
一起使用。它用于强制您的虚拟函数重写基类中的虚拟函数
旧的规则意味着,如果它确实重写基类中的虚函数,它将自动变为虚函数,因此您可以跳过在代码中写入virtual
。但“概念上”虚拟的
已经存在了
所以,写
virtual
根本没有区别。由于您编写了override
,该函数必须重写基类函数(并且扩展后,它必须是虚拟的),否则您的代码将无法编译。同样,在Derived2
中的virtual
没有任何效果,因为base
已经使该函数virtual
。没有任何区别。使用override
可以强制编译器检查函数是否保持虚值和重写良好。