运算符重载为什么总是说参数太多?

来源:百度知道 编辑:UC知道 时间:2024/06/02 14:09:35
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(double r,double i){real=r;imag=i;}
Complex(){real=0;imag=0;}
Complex operator +(int a,Complex &c);//这里说参数太多
void display();
private:
double real;
double imag;
};
Complex Complex::operator(int a,Complex &c)
{
Complex z;
z.real=a+c.real;
z.imag=c.imag;
return z;
}
void Complex::display()
{
cout<<real<<"+"<<imag<<"i"<<endl;
}
int main()
{
Complex c1(1.1,2),c2(2.2,3),c3;
c3=5+c1;
c3.display();
return 0;
}

因为在一般情况下,运算的左元就是你定义的类中的对象
如果你的重载函数在类内部定义,他就会默认这点,因为加法就有两个运算数啊,所以你传递的参数应该只有一个
如果楼主愿意传递两个函数
可以把重载函数定义为友函数
就可以用在外面
就可以传递两个参数了
3q

+号只能有一个参数,被加数。
运算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。重载的运算符是函数调用的语法修饰:
class Fred
{
public:
// ...
};

#if 0
// 没有算符重载:
Fred add(Fred, Fred);
Fred mul(Fred, Fred);

Fred f(Fred a, Fred b, Fred c)
{
return add(add(mul(a,b), mul(b,c)), mul(c,a)); // 哈哈,多可笑...
}
#else
// 有算符重载:
Fred operator+ (Fred, Fred);
Fred operator* (Fred, Fred);

Fred f(Fred a, Fred b, Fred c)
{
return a*b + b*c + c*a;
}
#endif

+号只能有一个参数 被加数