问题描述
我对抽象类有疑问。 我已经声明了两个类 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::operator==(const Valeur &v) const
,因此它是一个抽象类,因为一个方法仍然是纯虚拟的(来自 Valeur 的相等运算符)。密切注意签名:)
为了避免将来出现此类错误,无论何时您打算覆盖虚拟方法,请将 override
放在声明之后。这样,如果被覆盖的方法的签名不正确,编译器将不会让您编译代码。