如何解决类被认为是抽象类但没有虚拟纯方法的问题
我对抽象类有疑问。 我已经声明了两个类 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
放在声明之后。这样,如果被覆盖的方法的签名不正确,编译器将不会让您编译代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。