我对抽象类有问题。我已经声明了两个类Valeur(抽象类)和Boolleen
Valeur...
#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对象
1条答案
按热度按时间yduiuuwa1#
您没有实现
Boolleen::operator==(const Valeur &v) const
,因此它是一个抽象类,因为有一个方法仍然是纯虚的(Valeur的相等运算符)。注意签名:)为了避免将来出现这样的错误,无论何时你打算重写一个虚方法,都要在声明之后加上
override
。这样,如果重写的方法具有不正确的签名,编译器将不允许您编译代码。