我想要做的就是超载运营商增加了一个常量的多项式。这是类定义。
class polynomial
{
public:
polynomial();// default constructor
polynomial(double*,int);// parameterized constructor
polynomial(polynomial*);// copy constructor
~polynomial();//destructor
polynomial* const operator+(polynomial*);
polynomial* const operator+(double);
friend polynomial* const operator+(double,polynomial);
polynomial* operator-(polynomial*);
polynomial* operator-(const double);
polynomial* operator*(polynomial*);
polynomial* polynomial::operator*(const double);
friend ostream& operator<<(ostream&,polynomial*);
friend double evaluate(polynomial*,double);
friend double* extract(polynomial*);
polynomial* operator =(polynomial*);
int degree;
private:
double* polyNum;
};
因为我们无法进入内建类的定义来添加我们希望作为成员函数的运算符。我们别无选择,只有非会员功能。但是,当我试图这样做,它有一个错误,“..‘运营商+’必须有一流的类型的至少一个正式的参数。”来了
friend polynomial* const operator+(double,polynomial*);
然而,当我试图通过一个对象而不是它的指针,另一个问题是,当它从其他函数返回时,它会自动调用析构函数,并擦除对象内指针所指向的所有数据。
polynomial* const operator+(double constant,polynomial p)
{
-> return p+constant;
}
- p {度= 3 polyNum = 0x00de8188 {1.0000000000000000}}多项式
polynomial* const operator+(double constant,polynomial p)
{
return p+constant;
->
}
- p {度= 3 polyNum = {0x00de8188 + -2.6569842580370804e 303}}多项式
请仔细阅读和理解这个问题,它的答案:[操作符重载(http://stackoverflow.com/ questions/4421706/operator-overload) –
首先,你的第二个参数应该有引用类型,而不是指针类型。其次,你的操作符应该返回一个临时对象'polynomial',而不是指针。但是,再读一遍罗布连接的答案。 – AnT