Я написал следующий код:
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; }
};
Спасибо, Диего Севилья, я сделал то, что вы сказали, и это сработало.Еще один вопрос, я должен написать функцию: Number & add (Number & x, Number & y). Единственный способ реализовать это - сделать dynamic_cast для x и y для всех возможностей (приведение x и y к int, и еслигенерируется исключение, затем выполняется приведение x к удвоению и y к удвоению и т. д.), или есть более простой способ?