您的位置:首页 > 编程语言 > C语言/C++

C++的class的operator定义为friend function讨论

2011-05-27 17:44 288 查看
C++的class的operator定义为friend function讨论

对于class中将operator函数定义为friend主要有以下考虑:

1.friend function是对外公开的,而class method是属于对象的,有些情况调用不方便

2.对某些需要两个参数的operator function,定义friend比较方便,如下例中operator <<

3.所有class method必须有匹配的左值类型进行调用而friend则无需这样,只要能隐式转化成当前类型就可以调用该函数,因此如下例构造函数没有定义为explicit的,可以进行隐式转化,就可以在不同类型间运算。

下面的例子可以很好的说明定义为friend function的好处.
#include <iostream.h>
class point
{
int x;
int y;
public:
point(int vx=0){x=vx;y=0;}
point(int vx,int vy):x(vx),y(vy){}
friend point operator +(point p1,point p2);
friend ostream & operator <<(ostream &output,point &p1);
};

point operator +(point p1,point p2)
{
point p;
p.x=p1.x+p2.x;
p.y=p1.y+p2.y;
return p;
}

ostream & operator <<(ostream &output,point &p1)
{
output<<p1.x<<'+'<<p1.y<<'i'<<endl;
return output;
}

int main()
{
point p1(1,2),p2(5,6);
point p3,p4;
p3=p1+p2;
p4=1+p2;//如果定义为class method,编译将出错!类提供了相应的构造函数,且非explicit
cout<<p1<<p2;
cout<<p3<<p4;
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐