C++ 继承 - 引用类型的无效初始化

标签 c++ inheritance

我写了下面的代码:

class DoubleClass;
class IntClass;

class Number {
public:
    virtual Number& addInt(IntClass& x)=0;
    virtual Number& addDouble(DoubleClass& x)=0;
    virtual Number& operator+(Number& x) = 0;
};

class IntClass : public Number {
private:
    int num;
public:
    IntClass(int num) : num(num) { }
    Number& addInt(IntClass& x) { return x; }
    **Number& addDouble(DoubleClass& x) { return x; }**
    Number& operator+(Number& x) { return x; }
};

class DoubleClass: public Number {
private:
    double num;
public:
    DoubleClass(double num) : num(num) {}
    double get_number() { return num; }
    Number& addInt(IntClass& x) {
        return x;
    }
    Number& addDouble(DoubleClass& x) { return x; }
    Number& operator+(Number& x) { return x; }
};

谢谢 Diego Sevilla,我按照您说的做了,而且成功了。 还有一个问题,我应该写这个函数: Number& add(Number& x,Number& y) 实现它的唯一方法是针对所有可能性对 x 和 y 执行 dynamic_cast(将 x 和 y 转换为 int,如果抛出异常,则将 x 转换为 double,将 y 转换为 double,等等),或者是否存在更简单的方法?

最佳答案

此时编译器不知道 DoubleClass 继承自 Number。您应该将类​​声明与方法实现分开。例如:

class IntClass : public Number {
// ...

  Number& addDouble(DoubleClass& x); // Note: no implementation
};

class DoubleClass : public Number
{
// ...
};

inline Number& IntClass::addDouble(DoubleClass& x) { return x; } // Won't fail now

关于C++ 继承 - 引用类型的无效初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264705/

相关文章:

c++ - 在 C++ 中初始化复数数组

c# - 从抽象基类返回规范表示子类是否可以接受?

c++ - 'zlib' 的 Uncompress() 返回 Z_DATA_ERROR

c++ - 右值引用未定义行为

c++ - 如何在 C++ 中自定义文本文件的编码?

c++:通过多级继承从模板子类调用基类的模板方法

c++ - 我可以部分实现接口(interface)层次结构吗?

c++ - Microsoft C++ STL for Windows CE 的差异?

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - 子类成员变量对另一个子类的可见性