MST

星途 面试题库

面试题:C++ 中友元函数与成员函数在访问权限上的差异

请阐述 C++ 中友元函数和成员函数在访问类的成员(包括私有成员和保护成员)时的访问权限差异,并通过代码示例进行说明。
22.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 访问权限差异
    • 成员函数:成员函数可以直接访问类的私有成员和保护成员。因为成员函数是类的一部分,它对类内部的成员有天然的访问权限。
    • 友元函数:友元函数不是类的成员函数,但通过在类中声明为友元,它可以访问该类的私有成员和保护成员。友元函数打破了类的封装性,给予了外部函数特殊的访问权限。
  2. 代码示例
#include <iostream>

class MyClass {
private:
    int privateData;
protected:
    int protectedData;
public:
    MyClass(int priv, int prot) : privateData(priv), protectedData(prot) {}
    // 成员函数
    void memberFunction() {
        std::cout << "Member function accessing private data: " << privateData << std::endl;
        std::cout << "Member function accessing protected data: " << protectedData << std::endl;
    }
    // 友元函数声明
    friend void friendFunction(MyClass obj);
};

// 友元函数定义
void friendFunction(MyClass obj) {
    std::cout << "Friend function accessing private data: " << obj.privateData << std::endl;
    std::cout << "Friend function accessing protected data: " << obj.protectedData << std::endl;
}

int main() {
    MyClass obj(10, 20);
    obj.memberFunction();
    friendFunction(obj);
    return 0;
}

在上述代码中,memberFunction 作为类的成员函数,可以直接访问 privateDataprotectedDatafriendFunction 虽然不是类的成员函数,但由于被声明为友元,也能访问 privateDataprotectedData