【发布时间】:2015-10-08 13:57:46
【问题描述】:
我想写几个类的小程序。
一等号:
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,它将无法工作。
有没有什么方法可以在不强制转换的情况下做到这一点?或者最好的方法是什么?
【问题讨论】:
-
你需要多态性吗?
-
是的,这就是我需要的
-
你也不能通过强制转换来做到这一点,因为
Number参数不必是Rational。 -
请注意,您使用的是私有继承,您可能需要
class Rational : public Number。 -
@AleksanderMonk - 好的,
dynamic_cast可以完成这项工作,但会将编译时错误转换为运行时错误。不是我想要的。 :-)
标签: c++