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

时间:2011-06-07 11:47:02

标签: 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; }
};

感谢迭戈塞维利亚,我做了你所说的并且有效。 还有一个问题,我应该写这个函数: 号码和放大器;添加(数字& x,数字& y) 实现它的唯一方法是为所有可能性执行x和y的dynamic_cast(将x和y转换为int,如果抛出异常,则将x转换为double,将y转换为double,依此类推),或者是否存在一个更简单的方法?

2 个答案:

答案 0 :(得分:11)

此时,编译器不知道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

答案 1 :(得分:1)

您尚未定义DoubleClass,因此除了获取对象的地址并将其传递之外,您无法对引用执行任何操作。