当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第6章 MFC基础知识 > 6-2 C++的基本知识 > 6-2-8 友元类
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
我们介绍一个新的类叫友元类
就像我们可以定义一个friend函数
我们也可以定义一个class是另一个的class的friend
以便允许第二个class访问第一个class的protected和private成员
大家看这个例子
在这里定义了一个class的CSquare
CSquare的定义原型在这
又定义了一个CRectangle
这个跟前面的定义非常类似
在public里面定义了一个friend class CRectangle
在这里面声明了CRectangle是CSquare的friend
友元类
因此CRectangle可以访问CSquare的protected和private成员
更具体地说
也就是可以访问CSquare里面,对这个代码来说
能访问CSquare里面private的side这个参数
而这个参数实际是定义了矩形的边长
convert定义了一个CSquare的对象a
那么在这里面convert参数
就是a里面
就有a.side可以赋给宽度
也可以赋给高度
因为这是正方形的
所以这里面矩形里面定义了宽度和高度
但是在CSquare里面它只定义了一个side
那side可以定义给宽度和高度
因为CRectangle是一个friend的
所以它可以访问CSquare里面的数据
也就是说CSquare里面的数据可以对它进行赋值
那这个main函数就是很简单了
那我们一起来分析一下这个代码
大家先看main
这里定义了一个CSquare的对象sqr
然后定义了一个CRectangle的对象rect
那sqr是CSquare的
那CSquare里面我们运行了set_side(4)
那么这个4传给了这个int a
a就给了这个side
这个side就是4
那实际上就是这个等于4了
4完了CRectangle convert sqr
CRectangle是CSquare的友元类
所以CRectangle可以访问CSquare的protected跟private成员
也就是说对这个例子来说
CRectangle可以访问side
那这样呢
既然是把sqr传过去了
sqr里面刚才做的事情就是side等于4
传给了这个a
那a.side就等于4
那a.side这个4
那么4就赋给了width和height
CRectangle就可以访问side
而side值的话呢通过这个convert函数
赋给了width和height
就赋给了它
那这时候呢width和height都等于4
运行area函数
它的返回值是height跟width值的乘积
那就是4*4
所以这个return的结果应该是16
-讨论实录
--0-0
-6-1 MFC概述
-6-2 C++的基本知识
--6-2-1 类
--6-2-2 对象
--6-2-6 重载
--6-2-9 指针
-6-3 MFC类的组织结构及主要的类的简介
--6-3-2 根类
-6-4 MFC中全局函数和全局变量
-7-1 概述
--7-1-1
--7-1-2
-7-2 按钮控件及其应用
--128B12447816EEF99C33DC5901307461
-7-3 按钮控件及其应用
--7-3
-7-4 静态控件
--7-4
-7-5 列表框控件
--7-5-1
--7-5-2
-7-6 编辑框控件
--7-6
-7-7 组合框控件
--7-7
-7-8 对话框通用控件
--7-8-1
--7-8-2
-讲义源代码
--html
-8-1&2 资源的应用以及菜单资源的使用
--8-1-1
--8-1-2
-8-3 快捷菜单的创建及其应用
--8-3
-8-4 加速键资源的创建及其使用
--8-4
-8-5 工具条资源的创建及其使用
--8-5
-8-6 字符串资源的使用
--8-6
-8-7 位图资源的创建及其使用
--8-7
-课堂示例源代码
--html
-第一次作业内容及要求
--html
--第一次作业及答题链接--作业
-9-1 概述
--9-1
-9-2 Doc/View框架的主要成员
--Video
-9-3 文档操作中的一些重要概念
--Video
-9-4 SDI编程实例
--Video
-9-5 MDI编程实例
--9-5-1
--9-5-2
-课堂示例源代码
--html
-第二次作业内容及要求
--html
--第二次作业及答题链接--作业
-10-1 利用音频函数实现多媒体程序设计
--10-1-1
--10-1-2
--10-1-3
--10-1-4
-10-2 利用Windows Media Player控件实现多媒体程序设计
--10-2
-课堂示例源代码
--html
-例11-1
--例1
-例11-2
--例11-2
-例11-3
--例11-3
-例11-4
--例11-4
-11-1 ODBC介绍与引用
--11-1
-课堂示例源代码
--html
-第三次作业及答题链接