c++ - 如何从多态层次结构中的基类引用调用子类的成员

标签 c++ inheritance polymorphism

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

我遇到的问题是这样的函数:

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 总是复杂的,或者这样对待它呢?感谢您的帮助。

这是我的父类(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;
}

关于c++ - 如何从多态层次结构中的基类引用调用子类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4280675/

相关文章:

C++数学函数问题(Linux下)

java - 货币币继承

c# - asp.net 扩展 IPrincipal

c# - 具有强类型返回类型的抽象方法

c++ - 尝试在 C++ 中根据用户确定的宽度打印钻石

c++ - 如何指定程序可以在 C++ 中运行的最长时间

c# - 多态性,调用正确的函数

polymorphism - 在 Rust 匹配表达式中保持 DRY

c++ - 如何将 boost::shared_ptr 引入现有(大型)C++ 代码库?

java - 如何从子类而不是父类(super class)获取数据字段?