【发布时间】:2020-12-23 03:14:04
【问题描述】:
我对抽象类有疑问。 我已经声明了两个类 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 对象
【问题讨论】:
-
virtual bool operator==(Valeur const& v) const =0;末尾有一个const。这使得它与bool operator==(Valeur const& v);的功能不同,const的功能不同 -
虚拟
operator==是一个糟糕的设计。在此示例中,您将把Boollean与任何从 Valeur 派生的对象进行比较,并忽略基础之外的所有内容。或者,您在编程时需要知道派生类的完整列表Boollean。
标签: c++ constructor abstract-class pure-virtual