Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中重写和虚拟的组合+;11_C++_C++11 - Fatal编程技术网

C++ c+中重写和虚拟的组合+;11

C++ 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之间是否存在技术差异?覆

我想使用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
之间是否存在技术差异?

覆盖始终与
虚拟
一起使用。它用于强制您的虚拟函数重写基类中的虚拟函数

旧的规则意味着,如果它确实重写基类中的虚函数,它将自动变为虚函数,因此您可以跳过在代码中写入
virtual
。但“概念上”虚拟的
已经存在了


所以,写
virtual
根本没有区别。由于您编写了
override
,该函数必须重写基类函数(并且扩展后,它必须是虚拟的),否则您的代码将无法编译。

同样,在
Derived2
中的
virtual
没有任何效果,因为
base
已经使该函数
virtual
。没有任何区别。使用
override
可以强制编译器检查函数是否保持虚值和重写良好。