C++中的多态性

use*_*413 1 c++ polymorphism

我正在尝试实现接下来的两个功能

Number& DoubleClass::operator+( Number& x);
Number& IntClass::operator+(Number& x);
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做..(他们的单向性在下面解释):

   class IntClass;
   class DoubleClass;

class Number {
        //return a Number object that's the results of x+this, when x is either
        //IntClass or DoubleClass
        virtual Number& operator+(Number& x) = 0;
};


class IntClass : public Number {
    private:
        int my_number;
        //return a Number object that's the result of x+this.
        //The actual class of the returned object depends on x.
        //If x is IntClass, then the result if IntClass.
        //If x is DoubleClass, then the results is DoubleClass.
    public:
        Number& operator+(Number& x);
};


class DoubleClass : public Number {
    private:
        double my_number;
    public:

        //return a DoubleClass object that's the result of x+this.
        //This should work if x is either IntClass or DoubleClass
        Number& operator+( Number& x);
};
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 6

你不能.

问题是operator +返回一个新对象而你无法良心地返回一个引用 - 这必然是一个悬空引用或对你必须手动释放的非托管堆内存的引用.

总之,这不能使用operator +.

  • @Ben:...无法使用该接口完成,而不会破坏使用API​​推测的C++的基本假设. (4认同)
  • @sbi:所以返回一个对象.按价值.多态性要求在某处有指针或引用,而不是返回值是指针或引用.看我的回答. (2认同)