类被认为是抽象类但没有虚拟纯方法的问题

问题描述

我对抽象类有疑问。 我已经声明了两个类 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;
}

ma​​in.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 放在声明之后。这样,如果被覆盖的方法的签名不正确,编译器将不会让您编译代码。