MST

星途 面试题库

面试题:C++ 中类友元函数访问权限的基本理解

请解释在 C++ 中,类的友元函数如何获得对该类私有成员的访问权限?并举例说明友元函数声明和定义的位置以及调用方式。
22.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 友元函数获得对类私有成员访问权限的原理
    • 在C++中,类通过将其他函数或类声明为友元,给予它们访问该类私有和保护成员的特权。这打破了类的封装性原则,是一种特殊的信任关系。友元函数不是类的成员函数,但类将其视为自己的一部分,允许它访问私有和保护成员。
  2. 友元函数声明和定义的位置
    • 声明位置:友元函数的声明通常放在类定义内部,可以在类的任何访问修饰符(public、private、protected)下声明,位置不影响其访问权限。例如:
class MyClass {
private:
    int privateData;
public:
    // 友元函数声明
    friend void friendFunction(MyClass& obj);
    MyClass(int data) : privateData(data) {}
};
  • 定义位置:友元函数的定义可以在类外的任何位置,它不属于类的成员,所以定义时不需要使用类名::作用域解析运算符。例如:
// 友元函数定义
void friendFunction(MyClass& obj) {
    std::cout << "Accessing private data: " << obj.privateData << std::endl;
}
  1. 调用方式
    • 友元函数的调用和普通函数调用方式相同,因为它不是类的成员函数。例如:
int main() {
    MyClass myObj(42);
    friendFunction(myObj);
    return 0;
}

在上述示例中,friendFunctionMyClass的友元函数,它可以访问MyClass的私有成员privateData。在main函数中,创建了MyClass的对象myObj,然后直接调用friendFunction并传入myObj,从而访问到myObj的私有数据。