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

求助,C++中为什么有些函数只能用成员函数重载,而有些函数则只能用友元函数重载,其本质原因是什么?

2017-03-27 20:56 671 查看
操作符重载函数,仍然是一个成员函数。和普通的成员函数调用一样。我们知道,类的成员函数必须通过对象才可以调用,比如“[ ]” 运算符。 
class test{
public:
int operator[](int pos);
};
要调用 [] 运算符重载成员函数,必须有一个test的对象,否则无法调用。所以它必须是成员函数。
有一些运算符即可以友元,也可以用成员函数,比如 "+"。

class test{
public:
test& operator+(const test& o_o); //这样定义成成员函数,就有test的对象来调用。

friend test& operator+(test& , const test &); //用友元,就是操作两个test的对象。
};

有些运算符因为有特殊的要求,必须用友元。比如 string类。当你定义一个string对象时,可以用。
string str = "test";
string ok = "testtest" + str;
//这样的运算符必须是友元,因为它的第一个参数是char* 类型,相当于调用 operator (char *, string str)
string oook = str + "testset"; //这个就必须是成员函数,因为第一个str+ 表示调用str的成员函数operator+(char* )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐