重载为成员函数和友元函数的区别
时间: 2023-08-30 21:06:09 浏览: 105
重载为成员函数和友元函数的主要区别在于访问权限和参数传递方式。
成员函数重载是在类的内部定义的函数,可以访问类的私有成员,但只能通过类的对象或指针来调用,不能直接调用。参数传递方式是隐式传递this指针。
友元函数重载是在类外定义的函数,可以访问类的私有成员,但不能直接访问,需要通过类的对象或指针来访问。参数传递方式是显式传递对象或指针。
因此,成员函数重载更加方便和简洁,而友元函数重载更加灵活和可扩展。但在访问私有成员方面,二者没有区别。
相关问题
(1)掌握函数重载技术 (2)运算符重载技术(成员函数和友元函数) 分别采用成员函数和友元函数重载实现复数的加法运算。
好的,我明白了您的问题。复数加法运算可以通过函数重载和运算符重载来实现。我将分别介绍成员函数重载和友元函数重载的方法。
1. 成员函数重载复数加法运算
成员函数重载复数加法运算,需要在复数类中定义一个成员函数,以实现复数对象与另一个复数对象相加的运算。具体步骤如下:
(1)在复数类中定义一个成员函数,函数名为“operator+”,并且函数参数为一个复数对象(例如:Complex)。
(2)在“operator+”函数中,计算两个复数对象的实部与虚部的和,得到一个新的复数对象。
(3)将新的复数对象作为返回值返回。
下面是一个简单的代码示例:
```cpp
class Complex {
public:
Complex operator+(const Complex& c) {
Complex res(real + c.real, imag + c.imag);
return res;
}
private:
double real, imag;
};
```
2. 友元函数重载复数加法运算
友元函数重载复数加法运算,需要在复数类外定义一个友元函数,以实现复数对象与另一个复数对象相加的运算。具体步骤如下:
(1)在复数类中声明友元函数“operator+”。
(2)在复数类外定义友元函数“operator+”,并且函数参数为两个复数对象(例如:Complex)。
(3)在“operator+”函数中,计算两个复数对象的实部与虚部的和,得到一个新的复数对象。
(4)将新的复数对象作为返回值返回。
下面是一个简单的代码示例:
```cpp
class Complex {
public:
friend Complex operator+(const Complex& c1, const Complex& c2) {
Complex res(c1.real + c2.real, c1.imag + c2.imag);
return res;
}
private:
double real, imag;
};
```
以上就是成员函数和友元函数分别重载复数加法运算的方法。希望能对您有所帮助!
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;
}
};
```
需要注意的是,成员函数重载运算符只能重载部分运算符,例如“+”、“-”、“*”、“/”等,而不能重载赋值运算符“=”和下标运算符“[]”;而友元函数重载运算符可以重载所有运算符。
阅读全文