关于c++中的友元函数和虚拟继承的一些总结 .doc

关于c++中的友元函数和虚拟继承的一些总结 .doc

ID:18502284

大小:46.00 KB

页数:5页

时间:2018-09-18

关于c++中的友元函数和虚拟继承的一些总结 .doc_第1页
关于c++中的友元函数和虚拟继承的一些总结 .doc_第2页
关于c++中的友元函数和虚拟继承的一些总结 .doc_第3页
关于c++中的友元函数和虚拟继承的一些总结 .doc_第4页
关于c++中的友元函数和虚拟继承的一些总结 .doc_第5页
资源描述:

《关于c++中的友元函数和虚拟继承的一些总结 .doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。1.2使用友元函数的优缺点1.2.1优点:能够提高效率,表达简单、清晰。1.2.2缺点:友元函数破环了封装机制,

2、尽量不使用成员函数,除非不得已的情况下才使用友元函数。2.友元函数的使用2.1友元函数的参数:因为友元函数没有this指针,则参数要有三种情况:2.1.1 要访问非static成员时,需要对象做参数;2.1.2 要访问static成员或全局变量时,则不需要对象做参数;2.1.3如果做参数的对象是全局对象,则不需要对象做参数;2.2友元函数的位置因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。2.3友元函数的调用可以直接调用友元函数,不需要通过对象或指针2.4友元函数的分类:根据这个函数的来源不同,可以分为三种方法:2.4.

3、1普通函数友元函数2.4.1.1 目的:使普通函数能够访问类的友元2.4.1.2 语法:http://jipin.qqq90.com声明:friend+普通函数声明实现位置:可以在类外或类中实现代码:与普通函数相同调用:类似普通函数,直接调用2.4.1.3代码:classINTEGER {  friendvoidPrint(constINTEGER&obj);//声明友元函数 };voidPrint(constINTEGER&obj){   //函数体}voidmain(){  INTEGERobj;  Print(obj);//直接调用}2.4.2

4、类Y的所有成员函数都为类X友元函数—友元类2.4.2.1目的:使用单个声明使Y类的所有函数成为类X的友元,它提供一种类之间合作的一种方式,http://feiche.qqq23.com使类Y的对象可以具有类X和类Y的功能。2.4.2.2语法:声明位置:公有私有均可,常写为私有(把类看成一个变量)声明:friend+类名(不是对象哦)2.4.2.3代码:classgirl;classboy{public:  voiddisp(girl&);};voidboy::disp(girl&x)//函数disp()为类boy的成员函数,也是类girl的友元函数{

5、  cout<<"girl'snameis:"<

6、.3.2语法:声明位置:声明在公有中(本身为函数)声明:friend+成员函数的声明调用:先定义Y的对象y---使用y调用自己的成员函数---自己的成员函数中使用了友元机制2.4.3.3代码:实现代码和2.4.2.3中的实现及其相似只是设置友元的时候变为friendvoidboy::disp(girl&);自己解决喽…… 小结:其实一些操作符的重载实现也是要在类外实现的,那么通常这样的话,声明为类的友元是必须滴。 4.友元函数和类的成员函数的区别4.1成员函数有this指针,而友元函数没有this指针。4.2友元函数是不能被继承的,就像父亲的朋友未必

7、是儿子的朋友。1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:classAclassB1:publicvirtualA;classB2:publicvirtualA;classD:publicB1,publicB2;虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用

8、,而一旦离开了多重继承,虚拟继承就完全失去了存在的必要因为这样只会降低效率和占用更多的空间。 2.引入虚继承

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。