面试题答案
一键面试- 友元函数
friend_func
能否访问类B的私有成员及原因:- 友元函数
friend_func
不能直接访问类B的私有成员。 - 原因是友元关系不能被继承。当在类A中定义
friend_func
为友元函数时,friend_func
只获得了访问类A私有成员的权限,并没有自动获得访问类A派生类(如类B)私有成员的权限。
- 友元函数
- 让友元函数能够访问类B私有成员的修改方法:
在类B中重新声明
friend_func
为类B的友元函数,示例代码如下:
class A {
friend void friend_func(A& a);
private:
int a_private;
};
class B : public A {
friend void friend_func(B& b);
private:
int b_private;
};
void friend_func(A& a) {
// 这里可以访问A的私有成员a_private
}
void friend_func(B& b) {
// 这里可以访问B的私有成员b_private
// 也可以访问从A继承过来的私有成员(通过一些方式,如借助基类接口等,这里暂不展开复杂情况)
}
这样,通过在类B中再次声明friend_func
为友元函数,friend_func
就获得了访问类B私有成员的权限。