MST

星途 面试题库

面试题:C++ 类访问控制与友元函数及友元类的交互

定义一个C++类A,其中有private成员变量m_data。编写一个友元函数friendFunc和一个友元类FriendClass,使得friendFunc能够访问A的m_data,FriendClass的成员函数也能访问A的m_data。并解释友元机制在访问控制中的作用和潜在风险。
19.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class A {
private:
    int m_data;

    // 声明友元函数
    friend void friendFunc(A& a);

    // 声明友元类
    friend class FriendClass;

public:
    A(int data) : m_data(data) {}
};

// 友元函数定义
void friendFunc(A& a) {
    std::cout << "Friend function accessing m_data: " << a.m_data << std::endl;
}

class FriendClass {
public:
    void accessData(A& a) {
        std::cout << "Friend class member function accessing m_data: " << a.m_data << std::endl;
    }
};

友元机制在访问控制中的作用

  1. 突破封装限制:友元机制允许非类成员函数(友元函数)或其他类(友元类)访问该类的私有和保护成员,打破了类的封装性,在特定场景下方便了数据访问和操作。
  2. 提高代码效率:例如在一些需要频繁访问类私有成员的函数中,将其设为友元函数可以避免通过类的公有接口来间接访问,从而提高效率。

潜在风险

  1. 破坏封装性:破坏了类的封装特性,使得类的内部实现细节对外部可见,降低了类的独立性和可维护性。如果类的内部结构改变,可能影响到所有依赖友元机制的代码。
  2. 降低安全性:由于友元可以直接访问类的私有成员,一旦友元函数或友元类的代码出现错误,可能导致对类数据的非法访问或修改,增加了程序出错的风险。