C++类的友元函数详解

一、什么是友元函数?

在C++中,类的友元函数是被类声明为“朋友”的函数。友元函数可以直接访问类的私有成员和保护成员,而无需通过公有成员函数进行访问。

友元函数可以是:

  • 普通的非成员函数。
  • 另一个类的成员函数。
  • 全局函数。

通过使用友元函数,我们能够方便地解决某些类之间的耦合问题,使代码更简洁高效。

二、友元函数的定义与声明

友元函数需要在类的内部使用关键字 friend 进行声明,具体格式如下:

class 类名 {
    friend 返回类型 函数名(参数列表); // 声明友元函数
    // 其他类成员
};

注意:

  1. 友元函数的声明位于类中,但它并不是类的成员函数。
  2. 在实现友元函数时,不需要使用作用域操作符 ::

三、友元函数的使用场景

以下是一些常见的使用场景:

  1. 访问类的私有成员和保护成员: 当需要外部函数直接操作类的私有数据时,可以使用友元函数。
  2. 重载运算符:+== 等需要访问类的内部数据时,通常通过友元函数实现。
  3. 类之间的紧密合作: 通过友元函数实现不同类之间的直接数据共享。

四、示例代码

示例 1:普通函数作为友元

#include 
using namespace std;

// 类的定义
class Box {
private:
    double width; // 私有成员
public:
    Box(double w) : width(w) {} // 构造函数
    // 声明友元函数
    friend void printWidth(const Box &b);
};

// 友元函数定义
void printWidth(const Box &b) {
    // 直接访问类的私有成员
    cout << "Box width: " << b.width << endl;
}

int main() {
    Box b1(10.5);
    printWidth(b1); // 调用友元函数
    return 0;
}

运行结果:

Box width: 10.5

示例 2:类的成员函数作为友元

#include 
using namespace std;

class B; // 提前声明

// 类A的定义
class A {
private:
    int value;
public:
    A(int v) : value(v) {} // 构造函数
    friend void show(const A &a, const B &b); // 声明友元
};

// 类B的定义
class B {
private:
    int value;
public:
    B(int v) : value(v) {} // 构造函数
    friend void show(const A &a, const B &b); // 声明友元
};

// 友元函数的定义
void show(const A &a, const B &b) {
    cout << "Class A value: " << a.value << endl;
    cout << "Class B value: " << b.value << endl;
}

int main() {
    A a(100);
    B b(200);
    show(a, b); // 调用友元函数
    return 0;
}

运行结果:

Class A value: 100
Class B value: 200

 

你可能感兴趣的:(c++,开发语言)