MST

星途 面试题库

面试题:C++中私有成员访问安全性的常规应用

在C++中,已知类A有私有成员变量privateVar,现有类B为A的友元类。请编写代码实现类B对A的privateVar的访问,并阐述这种友元机制在安全性方面的特点与潜在风险。
12.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

代码实现

#include <iostream>

class A {
private:
    int privateVar;
public:
    A(int value) : privateVar(value) {}
    // 声明B为友元类
    friend class B;
};

class B {
public:
    void accessPrivateVar(A& a) {
        std::cout << "Accessed privateVar in A: " << a.privateVar << std::endl;
    }
};

安全性特点与潜在风险

  • 安全性特点
    • 提供灵活访问:友元机制允许特定的类(友元类)访问另一个类的私有成员,在某些需要紧密协作的类之间,这种机制提供了一种灵活的访问方式,使得相关类之间可以高效交互而无需通过公开接口进行复杂的操作。
    • 局部破坏封装:它只是对封装性的局部破坏,只有明确声明为友元的类才能访问私有成员,相比于将所有成员都设为公有,在一定程度上仍保留了类的封装性。
  • 潜在风险
    • 破坏封装性:从严格意义上讲,友元机制破坏了类的封装性原则,使得私有成员不再是完全私有的,可能导致对类内部状态的非预期访问和修改,降低了代码的可维护性和可理解性。
    • 增加耦合度:友元关系增加了类之间的耦合度,一个类的实现细节暴露给了友元类,这意味着当类的私有成员发生变化时,不仅自身的代码需要修改,其友元类的代码也可能需要调整,从而增加了维护成本。