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

Shm*_*opy 2 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; }
};
Run Code Online (Sandbox Code Playgroud)

谢谢迭戈塞维利亚,我做了你说的,它的工作.还有一个问题,我应该编写函数:Number&add(Number&x,Number&y)实现它的唯一方法是为所有可能性执行x和y的dynamic_cast(将x和y转换为int,如果抛出异常,然后将x转换为double,将y转换为double,依此类推),还是有更简单的方法?

Die*_*lla 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
Run Code Online (Sandbox Code Playgroud)

  • 在`addDouble()`实现中使用`inline`将使方法保持内联.我认为,对于体内实现,这是默认设置,但我不确定. (2认同)