相关疑难解决方法(0)

在覆盖纯虚函数时使用`override`有什么意义吗?

例如:

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()

c++ overriding pure-virtual c++11

45
推荐指数
3
解决办法
6278
查看次数

我可以使用纯虚拟功能覆盖虚拟功能吗?

我有三个类:B,DG. D是一个B,G是一个D.这两个BD是抽象的. 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)

c++ virtual pure-virtual language-lawyer c++11

25
推荐指数
1
解决办法
1543
查看次数

在子类中将非纯虚函数转换为纯虚函数

所以,我有这个多态层次结构:

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

c++ polymorphism virtual

6
推荐指数
1
解决办法
901
查看次数