C++友元函数示例:成员函数作为Student类友元应用
需积分: 11 135 浏览量
更新于2024-08-23
收藏 3.83MB PPT 举报
在C++编程中,一个重要的概念是友元函数,它允许一个类的成员函数直接访问另一个类的私有或保护成员,即使没有继承关系。在这个例子中,我们有两个类:`Student` 和 `Teacher`。`Teacher` 类有一个名为 `assigGrades` 的成员函数,它被声明为 `Student` 类的友元函数。
友元函数的概念在面向对象编程中扮演着关键角色,因为它打破了封装性的一般原则,使一个类的内部行为能够通过外部类的接口进行直接操作。这在某些场景下非常有用,例如当需要一个类的成员函数对另一个类的对象执行特定操作,但不需要让这两个类之间形成正式的关系(如继承)。
在给出的代码中,`void Teacher::assigGrades(Student& s)` 是一个友元函数,其参数为一个 `Student` 类的引用。这意味着 `Teacher` 类可以通过这个函数直接访问并修改 `Student` 类的实例 `s` 的 `gpa` 属性,即使 `gpa` 是 `Student` 类的一个保护成员(即 `protected`)。这样设计可以简化编程逻辑,避免了通常需要的访问控制和封装。
友元函数通常用于实现以下目的:
1. 解决特定问题:友元函数可以帮助解决特定情况下的数据共享问题,比如在多态场景下,可能需要在基类的友元函数中直接操作派生类的私有属性。
2. 提供特定功能:友元函数可以为某个类提供一种特殊权限,使得其他类能使用这些功能,而无需成为这些类的正式部分。
3. 兼容性:在旧代码库中,为了保持兼容性,可能会将一些现有的非成员函数声明为类的友元。
值得注意的是,尽管友元关系提供了便利,但也可能导致代码复杂性和潜在的安全隐患。因此,在使用友元时应谨慎考虑,确保它不会破坏封装和单一职责原则。过度使用友元可能会导致难以理解和维护的代码结构。此外,C++17版本引入了更好的语言特性,如运算符重载,可以在一定程度上替代友元函数的功能,使得代码更加模块化。
2011-07-06 上传
2011-02-16 上传
2013-05-11 上传
2010-07-23 上传
2012-12-12 上传
2010-07-20 上传
2010-07-20 上传
2011-11-20 上传
101 浏览量
花香九月
- 粉丝: 28
- 资源: 2万+
最新资源
- PIEROutil:PIERO的AR客户端库(http
- terraform-courses
- bender:JIRA微管理助手
- phywcri,c语言曲线拟合源码下载,c语言
- PersonAttributeExt:人物属性提取
- 基于JAVA图书馆座位预约管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- poordub:可怜的人的PyDub
- system-simulation:使用 networkx python 库在图上模拟医院位置
- 4411513,socket源码c语言,c语言
- 52挂Q v1.3
- app-status
- srpagotest
- kettle的web版本,自己编译的war包,直接放到tomcat下运行,然后http://localhost:8080/web
- Ksdacllp-Backend:Ksdacllp后端
- chromedriver-linux64-V124.0.6367.91 稳定版
- php-pdf-filler