我写了下面的代码:
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/