类的问题被认为像抽象类,但去掉了虚拟纯方法



我对抽象类有问题。我已经声明了两个类Valeur(抽象类(和Boolleen

Valeur.hh

#pragma once
#include <memory>
namespace common {
class Valeur {
public:
virtual bool operator==(Valeur const& v) const =0;
};
class Boolleen : public Valeur {
private:
bool _b;
public:
Boolleen (bool b);
bool operator==(Valeur const& v);
};
}

Valeur.cpp

#include "valeur.h"
using namespace common;
Boolleen::Boolleen(bool b): Valeur(), _b(b) {}
bool Boolleen::operator==(Valeur const& v) {
return true;
}

main.cpp

#include "valeur.h"
int main()
{
common::Boolleen b(true); // DOESN'T WORK ???
return 0;
}

当我试图实例化Boolleen类时,编译器告诉它是一个抽象类,但我没有在Boolleen中声明纯虚拟方法我希望能够毫无顾虑地构建Boolleen对象

您没有实现Boolleen::operator==(const Valeur &v) const,因此它是一个抽象类,因为一个方法仍然是纯虚拟的(Valeur中的相等运算符(。密切关注签名:(

为了避免将来出现这样的错误,无论何时您打算覆盖虚拟方法,都要在声明之后放置override。这样,如果重写方法的签名不正确,编译器将不允许您编译代码。

最新更新