gpt4 book ai didi

c++ - 抽象类类型...不允许,纯虚函数不重写

转载 作者:行者123 更新时间:2023-11-28 00:11:14 26 4
gpt4 key购买 nike

我想用几个类编写小程序。

头等舱号码:

class Number
{
public:
virtual int compare(Number& a) = 0;
virtual string toString() = 0;
virtual void fillRandom() = 0;
};

继承自Number的二类Rational

class Rational:Number
{
public:
int l;
int m;
Rational(int a, int b)
{
this->l = a;
this->m = b;
}
int compare(Rational a){} // here is the problem
string toString(){}
void fillRandom(){}
};

我明白为什么我有这个错误,我有一个纯虚方法 int compare(Number& a) ,因此在所有子类中我必须有相同的方法。

但是,如果我将 compare 参数更改为 Number,如果不在 compare 中的某处将 Number 转换为 Rational,它将无法工作。

有没有什么办法不用转换呢?或者最好的方法是什么?

最佳答案

首先,你需要有一些内容,才能进行比较。这是什么?

a) Rational 只能与其他Rational 进行比较吗?或

b) 不知何故 Value(Rational()) vs Value(OtherNumber())?在哪里

class OtherNumber : public Number
{
// Some code here
}

如果是,那么您需要考虑为什么将 compare() 放入父类(super class)中。

如果是 b,那么你需要抽象另一个函数,比如说

virtual long Value() const = 0;

并更改 compare() 使其适用于 Value():

virtual int compare(const Number& a)
{
// something about Value() and a.Value();
}

顺便说一句,通常比较函数是一个 const 函数。即:

virtual int compare ( const Number& a ) const;

此外,请记住使用public 扩展Number,即

class Rational : public Number

否则你将失去多态行为。

关于c++ - 抽象类类型...不允许,纯虚函数不重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com