抽象类重载算术运算符 当我放2个参数时,它会引发下一个错误“数字*MyTime:”运算符+(数字*,数字*)必须取零或一个参数号*运算符+(数字*n,数字*m),对不起,对于丑陋的代码,我是新的C++,我将查看关于DyrimySkyCasic的信息。谢谢你的回复 #include <cstdlib> #include <iostream> #include <string> #include <sstream> using namespace std; class Number { public: virtual Number* operator+(Number* n) = 0; virtual string toString() = 0; friend ostream& operator<<(ostream& os, Number* n){ return os << n->toString(); } }; class MyInt: public Number{ public: int value; MyInt(int e){ value = e; } virtual ~MyInt(){} int getNum(){ return value;} Number* operator+(Number* n){ MyInt* a = (MyInt*) n; return new MyInt(value + a->value); } string toString(){ ostringstream oss; oss << value; return oss.str(); } }; int main(int argc, char** argv) { Number* n = new MyInt(5); Number* m = new MyInt(3); cout << "N: " << n << endl; cout << "M: " << m << endl; cout << n + m << endl; return 0; } // define operator+ as a free function Number* operator+(Number* lhs, Number* rhs) { return lhs->operator+(rhs); }

抽象类重载算术运算符 当我放2个参数时,它会引发下一个错误“数字*MyTime:”运算符+(数字*,数字*)必须取零或一个参数号*运算符+(数字*n,数字*m),对不起,对于丑陋的代码,我是新的C++,我将查看关于DyrimySkyCasic的信息。谢谢你的回复 #include <cstdlib> #include <iostream> #include <string> #include <sstream> using namespace std; class Number { public: virtual Number* operator+(Number* n) = 0; virtual string toString() = 0; friend ostream& operator<<(ostream& os, Number* n){ return os << n->toString(); } }; class MyInt: public Number{ public: int value; MyInt(int e){ value = e; } virtual ~MyInt(){} int getNum(){ return value;} Number* operator+(Number* n){ MyInt* a = (MyInt*) n; return new MyInt(value + a->value); } string toString(){ ostringstream oss; oss << value; return oss.str(); } }; int main(int argc, char** argv) { Number* n = new MyInt(5); Number* m = new MyInt(3); cout << "N: " << n << endl; cout << "M: " << m << endl; cout << n + m << endl; return 0; } // define operator+ as a free function Number* operator+(Number* lhs, Number* rhs) { return lhs->operator+(rhs); },c++,pointers,abstract-class,pure-virtual,C++,Pointers,Abstract Class,Pure Virtual,我在这里做的是一个名为Number的抽象基类和一个名为MyInt的派生类,我需要重载操作符+,-为了使用MyInt数字,MyDouble数字进行操作。。。等 在阅读了许多文章之后,我陷入了这个错误错误:从'Number*'和'Number*'类型到二进制'operator+'类型的无效操作数可能你做得非常错误。错误的直接来源是您的n和m都是指针,而成员操作符+希望在其上调用对象 理论上,您可以执行双重分派(否则语法会很难看): 然而,虽然将为lhs调用plus,但实际上将调用rhs仍将是一个抽象

我在这里做的是一个名为Number的抽象基类和一个名为MyInt的派生类,我需要重载操作符+,-为了使用
MyInt
数字,
MyDouble
数字进行操作。。。等


在阅读了许多文章之后,我陷入了这个错误
错误:从'Number*'和'Number*'类型到二进制'operator+'类型的无效操作数可能你做得非常错误。错误的直接来源是您的
n
m
都是指针,而成员
操作符+
希望在其上调用对象

理论上,您可以执行双重分派(否则语法会很难看):


然而,虽然将为
lhs
调用plus,但实际上将调用
rhs
仍将是一个抽象类型。除非你为它做
dynamic\u cast
,否则你将无法弄清楚它是什么——这太难看了。一般来说,你的例子并不是动态多态性的好例子。< /P>当我放2个参数时,它会引发下一个错误“数字*MyTime:”运算符+(数字*,数字*)必须取零或一个参数号*运算符+(数字*n,数字*m),对不起,对于丑陋的代码,我是新的C++,我将查看关于DyrimySkyCasic的信息。谢谢你的回复
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

class Number {
public:
    virtual Number* operator+(Number* n) = 0;
    virtual string toString() = 0;
    friend ostream& operator<<(ostream& os, Number* n){ 
        return os << n->toString();
    }
};

class MyInt: public Number{
public:
    int value;
    MyInt(int e){
        value = e;
    }
    virtual ~MyInt(){}
    int getNum(){ return value;}

    Number* operator+(Number* n){
        MyInt* a = (MyInt*) n;        
        return new MyInt(value + a->value);
    }

    string toString(){
        ostringstream oss;
        oss << value;
        return oss.str();
    }
 };

int main(int argc, char** argv) {
    Number* n = new MyInt(5);
    Number* m = new MyInt(3);

    cout << "N: " << n << endl;
    cout << "M: " << m << endl;


    cout << n + m << endl;

    return 0;
}
// define operator+ as a free function
Number* operator+(Number* lhs, Number* rhs) {
    return lhs->operator+(rhs);
}