例如:
class Base {
virtual void my_function() = 0;
};
class Derived : Base {
void my_function() override;
};
Run Code Online (Sandbox Code Playgroud)
从我读到的,override关键字用于确保我们在我们覆盖的函数中具有正确的签名,并且它似乎是它的唯一用途.
但是,在纯虚函数的情况下,如果我们在Derived类(或Base类中使用不正确的签名,取决于如何看待事物)中使用不正确的签名,编译器将抛出错误.那么,在声明override结束时添加是否有任何意义Derived::my_function()?
我有三个类:B,D和G. D是一个B,G是一个D.这两个B和D是抽象的. B来自第三方.
B有一个非纯的虚方法G需要实现(成为a D).将虚拟函数重新定义/覆盖为纯虚拟,我可以并且是一种好习惯吗?
例:
class B // from a third party
{
public:
virtual void foo();
};
class D : public B
{
public:
void foo() override = 0; // allowed by gcc 4.8.2
virtual void bar() = 0;
};
class G : public D
{
public:
// forgot to reimplement foo
void bar() …Run Code Online (Sandbox Code Playgroud) 所以,我有这个多态层次结构:
ClassA
Is not abstract, no pure virtual functions, but a few virtual functions
ClassB:public ClassA
Defines an extended interface for a certain type of subclass;
is abstract with pure virtual functions
ClassC:public ClassB
Usable class, no more subclassing
Run Code Online (Sandbox Code Playgroud)
事情是这样的,我会的对象ClassA,并ClassC抛出一起放入容器中,通过迭代。为了执行这个迭代,一个非纯虚函数存在于中,ClassA但它是空的,只有{}; 也就是说,它是空的,只有在迭代遇到 a 时才可用,ClassC在这种情况下它被调用,否则它什么都不做。我不能让它是纯的,否则我不能拥有ClassA.
但是为了确保ClassC确实实现了该功能,迫使该类的用户这样做,我在ClassB.
这是可以接受的吗?如果我采用非纯虚函数,使其成为纯函数,然后再次将其变为非纯函数,则什么都不会“破坏” ClassC?