面试题答案
一键面试- 友元函数获得对类私有成员访问权限的原理:
- 在C++中,类通过将其他函数或类声明为友元,给予它们访问该类私有和保护成员的特权。这打破了类的封装性原则,是一种特殊的信任关系。友元函数不是类的成员函数,但类将其视为自己的一部分,允许它访问私有和保护成员。
- 友元函数声明和定义的位置:
- 声明位置:友元函数的声明通常放在类定义内部,可以在类的任何访问修饰符(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;
}
- 调用方式:
- 友元函数的调用和普通函数调用方式相同,因为它不是类的成员函数。例如:
int main() {
MyClass myObj(42);
friendFunction(myObj);
return 0;
}
在上述示例中,friendFunction
是MyClass
的友元函数,它可以访问MyClass
的私有成员privateData
。在main
函数中,创建了MyClass
的对象myObj
,然后直接调用friendFunction
并传入myObj
,从而访问到myObj
的私有数据。