C++友元介绍

C++友元介绍

C++中的友元(friend)是一种特殊的关系,它允许一个类或者函数访问另一个类的私有成员。友元机制可以在一定程度上突破C++中的封装性,但是它也可能导致代码的可维护性和可扩展性变差,需要谨慎使用。

在C++中,可以通过在类的定义中使用friend关键字来声明一个友元。例如:

1
2
3
4
5
6
7
class A {
private:
int x;
public:
friend void foo(A& a); // 声明函数foo为类A的友元
};


在这个例子中,我们在类A的定义中声明了一个函数foo为类A的友元。这意味着函数foo可以访问类A的私有成员,包括变量x。注意,这里需要将参数a声明为引用类型,否则函数foo只能访问到一个副本,无法修改类A的成员变量。

除了函数之外,类也可以成为另一个类的友元。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class B {
private:
int y;
public:
friend class A; // 声明类A为类B的友元
};

class A {
private:
int x;
public:
void foo(B& b) {
b.y = 42; // 可以访问类B的私有成员y
}
};


在这个例子中,我们在类B的定义中声明了类A为其友元。这意味着类A可以访问类B的私有成员变量y,例如在foo函数中就可以修改变量y的值。

需要注意的是,友元机制打破了C++中的封装性,因此在使用友元时需要特别小心。友元的使用应该尽可能少,只在必要的情况下使用,以确保代码的可维护性和可扩展性。在一些特定的情况下,友元可能是有用的,例如:

  1. 在两个或多个类之间需要共享数据或者共同完成某个任务时,可以使用友元。

  2. 在一些高性能的代码中,如果需要频繁访问某个类的私有成员,可以考虑使用友元,避免频繁的函数调用和参数传递。

  3. 在某些特殊的情况下,需要在类的外部访问类的私有成员,但是不能通过类的公有成员函数实现时,可以使用友元。

总的来说,友元是C++中的一种特殊机制,允许在一定程度上突破封装性,但是使用时需要谨慎,以避免对代码的可维护性和可扩展性造成负面影响。


C++友元介绍
https://qiangsun89.github.io/2023/04/19/友元介绍/
作者
Qiang Sun
发布于
2023年4月19日
许可协议