成员函数运算符重载与友元函数运算符重载参数的个数不同为什么?
以复数加法为例
1、类的成员函数运算符重载
#include <iostream>
using namespace std;
class complex{
private:
double a;//实部
double b;//虚部
public:
explicit complex(double a = 0,double b = 0):a(a),b(b){}//构造函数
complex operator +(const complex &b);//成员函数运算符重载(类内声明)
void show(){//打印
cout<<a<<" + "<<b<<"i"<<endl;
}
};
complex complex::operator +(const complex &b){//成员函数运算符重载(类外定义)
double p = this->a + b.a;
double d = this->b + b.b;
complex r(p,d);
return r;
}
int main(){
complex c1(2.2,1);
cout<<"c1:";
c1.show();
complex c2(5.8,10);
cout<<"c2:";
c2.show();
complex c3 = c1 + c2;
cout<<"c1 + c2 = ";
c3.show();
}
2、类的友元函数运算符重载
#include <iostream>
using namespace std;
class complex{
private:
double a;//实部
double b;//虚部
public:
explicit complex(double a = 0,double b = 0):a(a),b(b){}//构造函数
friend complex operator +(const complex &a, const complex &b);//友元函数运算符重载(类内声明)
void show(){//打印
cout<<a<<" + "<<b<<"i"<<endl;
}
};
complex operator +(const complex &a, const complex &b){//友元函数运算符重载
double p = a.a + b.a;
double d = a.b + b.b;
complex r(p,d);
return r;
}
int main(){
complex c1(2.2,1);
cout<<"c1:";
c1.show();
complex c2(5.8,10);
cout<<"c2:";
c2.show();
complex c3 = c1 + c2;
cout<<"c1 + c2 = ";
c3.show();
}
成员函数运算符重载与友元函数运算符重载参数的个数不同为什么?
complex operator +(const complex &b);//成员函数运算符重载(类内声明)
friend complex operator +(const complex &a, const complex &b);//友元函数运算符重载(类内声明)
在成员函数中用到了this指针帮我们确定了c1,所以只需要传一个c2。
友元函数没有this,所以需要二个参数。