C++ 11中引入了override和final说明符,下面的程序使用这些说明符如下:
#include<iostream>
template<typename T>
void display(const T& val) { std::cout<<val<<"\n"; }
class Shape {
public:
virtual ~Shape()= default;
virtual void Draw() { display("Shape::Draw()");}
virtual void DisplayName() { display("Shape");}
};
class Circle : public Shape {
public:
virtual ~Circle() = default;
virtual void Draw() override final { display("Circle::Draw()");}
virtual void DisplayName() override { display("Cicle");}
};
int main()
{
}
在上面的示例程序中,
Circle::Draw()
被定义为override final
说明符。这将成功编译,但是,如果将相同的方法定义为final override
,则会抛出编译时间错误。是否想了解同一类方法的重写和最终说明符的用例?什么时候应该在程序中使用它?
最佳答案
我认为这是一个编译器错误。至少在www.ideone com上,代码已成功编译。
符合C++标准(10.3虚拟功能)
[ Example:
struct B {
virtual void f() const final;
};
struct D : B {
void f() const; // error: D::f attempts to override final B::f
};
—end example ]
一个类可能不是其自身的派生类。因此,您显示的代码将被编译。
也
[ Example:
struct B {
virtual void f(int);
};
struct D : B {
virtual void f(long) override; // error: wrong signature overriding B::f
virtual void f(int) override; // OK
};
—end example ]
在示例函数中,Circle类的Draw被virt-specidier覆盖标记,并且实际上覆盖了基类的函数。
关于c++ - 可以在C++中使用 “override & final”说明符声明类的相同成员函数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26543711/