友元函数对类的继承性有什么影响?
短信预约 -IT技能 免费直播动态提醒
友元函数的继承性当子类继承具有友元函数的类时:子类无法继承友元函数。父类的友元函数可以访问子类的私有成员。子类的友元函数无法访问父类的私有成员。
友元函数对类的继承性影响
前言
友元函数是一种特殊的 C++ 函数,它可以在类的作用域之外访问该类的私有成员。当涉及到类的继承时,理解友元函数的行为至关重要。
友元函数与继承
当一个子类继承一个有友元函数的类时,以下规则适用:
- 子类无法继承友元函数:友元函数是与特定类相关联的。子类无法继承父类的友元函数。
- 父类的友元函数可以访问子类的私有成员:如果父类和子类相互了解(即,父类是子类的基类或子类是父类的派生类),则父类的友元函数可以访问子类的私有成员。
- 子类的友元函数无法访问父类的私有成员:相反,子类的友元函数无法访问父类的私有成员,即使父类和子类相互了解。
实战案例
考虑以下示例代码:
#include <iostream>
class Base {
friend void print(Base& b); // 父类友元函数
private:
int x;
};
class Derived : public Base {
friend void <a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/16380.html" target="_blank">access</a>(Derived& d); // 子类友元函数
private:
int y;
};
void print(Base& b) { std::cout << b.x << std::endl; } // 父类友元函数访问私有成员 x
void access(Derived& d) { std::cout << d.x << " " << d.y << std::endl; } // 子类友元函数访问私有成员 x 和 y
int main() {
Base b;
b.x = 10;
print(b); // 输出:10
Derived d;
d.x = 20;
d.y = 30;
access(d); // 输出:20 30
print(d); // 输出:20
}
在这个示例中:
- 父类
Base
有一个友元函数print()
,它可以访问x
私有成员。 - 子类
Derived
有一个友元函数access()
,它可以访问父类私有成员x
。 - 子类
Derived
的对象d
可以被父类Base
友元函数print()
访问,但是无法访问父类的私有成员x
。
以上就是友元函数对类的继承性有什么影响?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341