面试题答案
一键面试- 访问权限差异:
- 成员函数:成员函数可以直接访问类的私有成员和保护成员。因为成员函数是类的一部分,它对类内部的成员有天然的访问权限。
- 友元函数:友元函数不是类的成员函数,但通过在类中声明为友元,它可以访问该类的私有成员和保护成员。友元函数打破了类的封装性,给予了外部函数特殊的访问权限。
- 代码示例:
#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
作为类的成员函数,可以直接访问 privateData
和 protectedData
。friendFunction
虽然不是类的成员函数,但由于被声明为友元,也能访问 privateData
和 protectedData
。