当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第6章 MFC基础知识 > 6-2 C++的基本知识 > 6-2-7 友元函数
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
我们开始介绍友元函数
类的主要特点是数据隐藏
也就是类的protected跟private成员
它们不能够被从所在的class以外的部分引用
私有部分在该类的作用域之外是不可见的
但有时候可能需要在类的外部访问类的私有部分
为此
C++允许类外部的函数或者(类)具有该类的私有部分的特权
它通过关键字friend把其他类或者非成员函数
声明为一个类的“友元”
在类的内部
友元被作为该类的成员看待
并且对对象公用部分的访问没有任何限制
大家看这个例子
我们仍然定义了一个CRectangle这个类
然后增加了一个函数friend
叫CRectangle duplicate
然后在这里面参数里面是一个类的名字
那我们看一下在这里面我们定义的这个set_values函数
set_values函数是公共类型的函数
把a赋给width
把b赋给height
我们再看一下这个duplicate函数
它里面的参数是CRectangle类的对象
所以在这里面函数参数的类型
是一个CRectangle类的
在这里面定义了CRectangle的对象rectres
rectres它引用了宽度和高度
这宽度和高度是什么值
是CRectangle定义的对象的宽度和高度的2倍
然后返回的是一个对象的值
实际上返回的就是对象的宽度和高度
大家看main函数
main函数定义了rect和rect的b
这两个对象
第一个对象rect的话呢我们调用了set_values这个函数2和3两个整型参数
那么2和3就给了int a跟int b
int a跟int b将a=2的值赋给了width
将b=3的值赋给了height
那也就是这个地方
它的私有的成员分别赋给了2和3的值
那2和3的值赋完之后
我们调用了duplicate这个函数
duplicate这函数把rect作为参数
把rect这个参数赋给了它
而rect实际上它是CRectangle对象的
rect里面通过设置的值2和3
这个时候它的值等于2
它的值等于3
分别乘以2
那这样的话rectres的宽度和高度就是变成了2*2 3*2
就是4和6
打印出这个面积的值是宽度和高度它的相乘
这时候相乘已经不是2和3的相乘
而是4和6的相乘
所以它的结果应该是24
这个函数就是一个友元函数
在这个友元函数里面友元是被作为类的成员来看待
而且对对象公用部分的访问没有任何限制
C++我们刚才说了
允许类外部的函数或者(类)具有该类的私有部分的特权
那这里面我们调用了这个duplicate这函数
在duplicate这函数里面
定义了rectres这个对象
里面调用了也是width跟height
这个函数是在这里面作为一个友元函数来调用的
所以它能够调用这两个参数
-讨论实录
--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
-第三次作业及答题链接