我目前正在编写一个程序,该程序可以对各种类型的数字进行建模,并在Set对象中对它们进行多态管理(已编写和测试)。我的继承关系是这样的:
多数(所有虚拟函数,虚拟类)
成对继承,复杂,有理
所有子类都具有具有不同参数的大部分相同功能。

我遇到的问题是这样的功能:

Multinumber& Complex::operator=(const Multinumber &rhs)
{
   imag=rhs.imag;
   real=rhs.real;
   return *this;
}

因为我是多态处理的,所以我的返回类型和参数都必须为Multinumber类型,以便覆盖基类的参数。但是,我花了很多时间来编译它。我遇到了一系列错误:
error: 'const class Multinumber' has no member named 'imag'

没错Multinumber没有imag属性或函数。但是,如何使编译器认识到Multinumber&rhs将始终是Complex或将其视为复杂?谢谢您的帮助。

这是我的父类(super class)的样子:
class Multinumber
{
public:
virtual Multinumber& operator+(Multinumber&);
virtual Multinumber& operator=(Multinumber&);
virtual bool operator==(Multinumber&);
virtual string object2string();
virtual Multinumber& makeobject(double, double)=0;
};

最佳答案

我认为你必须投。试试这个:

Multinumber& Complex::operator=(const Multinumber &rhs){
    const Complex & _rhs = dynamic_cast<const Complex &>(rhs);
    imag=_rhs.imag;
    real=_rhs.real;
    return *this;
}

10-08 12:49