友元运算符重载函数和成员运算符重载函数有什么不同?
(1) 对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中含有两个参数;对单目运算符而言,成员运算符重载函数参数表中没有参数,而友元运算符重载函数参数表中含有一个参数。
(2) 双目运算符一般可以被重载为友元运算符重载函数或成员运算符重载函数,但有一些情况,必须使用友元运算符重载函数,例如一个常数与一个对象相加。有的运算符(如 ”等)只能使用成员运算符重载函数。
习惯调用形式
友元运算符重载函数调用形式
成员运算符重载函数调用形式
a+b
operator+ (a,b)
a. operator+ (b)
-a
operator-(a)
a. operator-()
a ++
operator+ +(a,0)
a. operator+ +(0)
(4)c ++的大部分运算符既可说明为成员运算符函数,又可说明为友元运算符函数。
究竟选择哪一种运算符函数好一些,没有定论,这主要取决于实际情况和程序员的习惯。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
(1) 对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中含有两个参数;对单目运算符而言,成员运算符重载函数参数表中没有参数,而友元运算符重载函数参数表中含有一个参数。
(2) 双目运算符一般可以被重载为友元运算符重载函数或成员运算符重载函数,但有一些情况,必须使用友元运算符重载函数,例如一个常数与一个对象相加。有的运算符(如 ”等)只能使用成员运算符重载函数。
习惯调用形式
友元运算符重载函数调用形式
成员运算符重载函数调用形式
a+b
operator+ (a,b)
a. operator+ (b)
-a
operator-(a)
a. operator-()
a ++
operator+ +(a,0)
a. operator+ +(0)
(4)c ++的大部分运算符既可说明为成员运算符函数,又可说明为友元运算符函数。
究竟选择哪一种运算符函数好一些,没有定论,这主要取决于实际情况和程序员的习惯。