说一说友元函数与成员函数的区别
时间: 2024-05-21 10:16:50 浏览: 23
友函数和成员函数都是可以访问类的私有成员的函数,但它们之间有一些区别:
1. 友元函数不是类的成员函数,它可以定义在类的外部。而成员函数是类的成员,必须在类中定义。
2. 友元函数可以访问多个类的私有成员,而成员函数只能访问本类的私有成员。
3. 友元函数不能直接访问类的this指针,而成员函数可以通过this指针访问类的成员。
4. 友元函数和成员函数的调用方式不同,调用友元函数时不需要通过对象来调用,而成员函数必须通过对象来调用。
总的来说,友元函数主要用于访问多个类的私有成员,而成员函数主要用于访问本类的私有成员。
相关问题
友元函数,运算符重载 成员函数
友元函数是在类的外部定义的函数,但是可以访问类的私有成员和保护成员。通过将函数声明为友元函数,可以使其具有访问类的私有成员和保护成员的权限。
运算符重载是指通过重新定义已有的运算符,使其能够用于自定义的数据类型。运算符重载可以通过成员函数或者友元函数来实现。
成员函数的运算符重载是指将运算符重载函数定义为类的成员函数。在成员函数中,左操作数是调用该函数的对象,右操作数是传递给函数的参数。
下面是一个示例,演示了友元函数和成员函数的运算符重载:
```cpp
#include <iostream>
using namespace std;
class Complex {
private:
double real;
double imag;
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
// 友元函数的运算符重载
friend Complex operator+(const Complex& c1, const Complex& c2);
// 成员函数的运算符重载
Complex operator-(const Complex& c) {
return Complex(real - c.real, imag - c.imag);
}
void display() {
cout << real << " + " << imag << "i" << endl;
}
};
// 友元函数的运算符重载
Complex operator+(const Complex& c1, const Complex& c2) {
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
int main() {
Complex c1(1.0, 2.0);
Complex c2(3.0, 4.0);
Complex c3 = c1 + c2; // 使用友元函数的运算符重载
Complex c4 = c1 - c2; // 使用成员函数的运算符重载
c3.display();
c4.display();
return 0;
}
```
成员函数,全局函数和友元函数的区别
成员函数是属于类的函数,只能被该类的对象调用,可以访问该类中的所有成员变量和成员函数,但无法访问该类的私有静态成员变量和私有静态成员函数。
全局函数是在类外定义的函数,可以被任何函数或对象调用,但无法访问该类的私有成员变量和私有成员函数,需要通过该类的公有接口进行访问。
友元函数是在类中声明的非成员函数,可以访问该类的私有成员变量和私有成员函数,但不属于该类的成员函数,需要在类外定义。友元函数可以是全局函数,也可以是另一个类的成员函数。
总的来说,成员函数是类的一部分,全局函数和友元函数是独立于类的函数,但是友元函数可以访问类的私有成员,因此可以用于提高程序的灵活性和安全性。