什么运算符重载函数属于友元函数
时间: 2024-04-24 10:27:39 浏览: 22
回答: 运算符重载函数中,可以选择将双目运算符重载为友元函数。这是因为双目运算符重载为友元函数可以更方便地使用,而且如果运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,那么运算符重载必须使用友元函数。对于单目运算符,一般建议选择成员函数。而对于运算符“=、()、[]、->”等,只能作为成员函数。对于其他运算符,可以选择将其重载为友元函数。[2]
相关问题
c++运算符重载成员函数和友元函数引用
C++运算符重载可以通过成员函数和友元函数两种方式实现。其中,成员函数重载运算符是将运算符重载为类的成员函数,而友元函数重载运算符是将运算符重载为非类的成员函数。
成员函数重载运算符的语法格式如下:
```cpp
返回类型 operator 运算符(参数列表) {
// 函数体
}
```
例如,将运算符“+”重载为my_string类的成员函数:
```cpp
class my_string {
public:
my_string operator+(const my_string& str) {
my_string result;
// 实现字符串拼接
return result;
}
};
```
而友元函数重载运算符的语法格式如下:
```cpp
friend 返回类型 operator 运算符(参数列表);```
例如,将运算符“+”重载为非my_string类的友元函数:
```cpp
class my_string {
public:
friend my_string operator+(const my_string& str1, const my_string& str2) {
my_string result;
// 实现字符串拼接
return result;
}
};
```
需要注意的是,成员函数重载运算符只能重载部分运算符,例如“+”、“-”、“*”、“/”等,而不能重载赋值运算符“=”和下标运算符“[]”;而友元函数重载运算符可以重载所有运算符。
运算符重载为友元函数
友元运算符重载函数是指将运算符重载函数定义为某个类的友元函数。友元函数是在类外部定义的,但可以访问类的私有成员。运算符重载函数有两种形式:全局的友元函数和类的成员函数。一般来说,双目运算符重载为类的友元函数,而单目运算符重载为类的成员函数。需要注意的是,赋值复合运算符(如=、+=等)必须重载为类的成员函数。另外,友元运算符重载函数不需要在定义时加上类名前缀。如果友元运算符重载函数重载的是双目运算符,则参数表中有两个操作数;如果重载的是单目运算符,则参数表中只有一个操作数。