interview
cpp-basics
C++中友元类和友元函数有什么作用?

C++基础面试题, C++ 中友元类和友元函数有什么作用?

C++基础面试题, C++ 中友元类和友元函数有什么作用?

QA

Step 1

Q:: C++ 中友元类和友元函数有什么作用?

A:: 友元类和友元函数允许某个类访问另一个类的私有成员和保护成员。友元函数是一种特殊的函数,它不是类的成员,但可以访问类的私有和保护成员。友元类则是指某个类的所有成员函数都是另一个类的友元函数。使用友元的主要目的是为了实现某些操作时可以直接访问类的内部数据,而不必通过公共的接口函数。

Step 2

Q:: C++ 友元函数的声明和定义如何实现?

A:: 友元函数通过在类内部使用关键字 friend 来声明。它可以是全局函数,也可以是类的成员函数。定义时无需在函数名前加 friend 关键字,直接在类外定义即可。例如:

 
class A {
friend void show(A& a);
private:
 int data;
};
void show(A& a) {
 std::cout << a.data;
}
 

Step 3

Q:: 在 C++ 中,为什么需要使用友元类?

A:: 友元类允许一个类的所有成员函数直接访问另一个类的私有或保护成员。这在两个类之间高度耦合的情况下非常有用。例如,当两个类密切合作时,使用友元类可以减少接口的冗余和复杂性。

用途

面试这个内容的原因在于考察候选人对 C`++` 封装性及访问控制机制的理解。友元函数和友元类涉及到如何在保持封装性的同时实现类之间的高效合作。在实际生产环境中,当两个或多个类需要紧密合作,且彼此需要访问对方的私有成员时,可能会用到友元函数或友元类。这通常出现在需要优化性能或者减少类接口冗余的场景中。\n

相关问题

🦆
C++ 中的访问控制修饰符有哪些?

C++ 中有三种访问控制修饰符:public``, protected``,privatepublic 表示成员对所有用户可见,protected 表示成员对类的派生类和本类可见,private 表示成员仅对本类可见。

🦆
C++ 中什么是封装?

封装是面向对象编程中的一项基本原则,指的是将数据和操作数据的方法捆绑在一起,并限制外部对类中某些成员的访问。通过封装,类的内部实现细节对外界隐藏,外部只能通过公共接口与类进行交互。

🦆
如何避免友元函数或类的滥用?

友元函数或类的滥用可能会破坏类的封装性。因此,友元应当只在必要时使用,且应仔细设计类之间的关系,尽量减少需要访问私有成员的情况。通常,通过公共接口或设计模式(如访问者模式)可以避免友元的过度使用。

🦆
C++ 中的继承与友元类如何共存?

在 C++ 中,继承与友元类可以共存。一个类可以有派生类,同时也可以有友元类。友元类中的函数可以访问基类的私有和保护成员,而派生类则只能访问基类的保护和公共成员。这在设计复杂的类关系时需要仔细考虑,以保持类的清晰性和封装性。