微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我对抽象类有疑问。 我已经声明了两个类 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 放在声明之后。这样,如果被覆盖的方法的签名不正确,编译器将不会让您编译代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。