抽象类重载算术运算符 当我放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); }
我在这里做的是一个名为Number的抽象基类和一个名为MyInt的派生类,我需要重载操作符+,-为了使用抽象类重载算术运算符 当我放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仍将是一个抽象
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);
}