ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:19.03KB ,
资源ID:3229460      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3229460.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(从生活角度学习C++.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

从生活角度学习C++.docx

1、从生活角度学习C+通过共同讨论解决遇到的知识性问题,及时的把考试与提高班学习无缝连接,把知识与生活相联系,这样既丰富了生活、又培养了乐趣,更有助于理解,提高学习效率。 第一:指针、引用;例如有十个房间,房间的门牌号可以说就是指针,编号在变,指针在变。指针可以为空,指针是个变量,系统为其分配了内存空间,即计算机中指向一块内存,内容为所指的内存的地址(编号)引用是每个房间的物品,引用不能为空。引用是C+中的概念,我们刚开始学习很容易把引用和指针混淆一起。例题:n是m的一个引用(reference),m是被引用物(referent)。intm;int&n=m;n相当于m的别名(绰号),对n的任何操作

2、就是对m的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。 指针与引用的主要区别:指针能够毫无约束地操作内存中的任何东西,尽管指针功能强 大,但是非常危险。就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而 不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。 第二:继承、多肽、派生在日常生活当中常见,父亲继承爷爷的相貌、

3、血型等,儿子继承父亲的相貌、血型,这种关系很容易的让我们理解基类(父类),父亲为从爷爷那派生而来即派生类(子类),同样儿子也是父亲的派生类(子类)。 继承:作为儿子的角度来看我们是从父亲那继承的,从长辈角度晚辈是派生的 多继承:可以理解为一个研究员既有研究生的特征,又具有教师的特征,描述事物具有的多种特征。 多肽:就是同一事物在不同条件下的不同表现形式:生活中水在常温下是液体,在100摄氏度以上就是气体,在0摄氏度以下就是固体。 二义性问题: 爷爷有连个儿子:父亲和叔叔,爷爷有门电焊技术,传授给了父亲和叔叔,当儿子想学习时,既想从父亲那学习又想从叔叔那学习,这样就可能出现重复,即程序中 出现二

4、义性问题,由于多继承中派生出拥有多个基类,如果多个基类中拥有同名的成员,那么,派生类在继承各个基类的成员之后,当调用该派生类成员时,由于该 成员标示符不唯一,出现二义性。 第三:类模板:问题域中的事物存在一定的相似性,与之对应,设计的类和类的成员也将表现出相似性,通过抽象将这些相似的类和函数的共性提取出来,用一种统一的方式来描述,形成类模板, 生活中:城市里来来往往的公交车,这个公交车站牌(等车的地方)对于所有可以停车到这的公交车来说这就是公交车的一个类模板,来了公交车就可以停靠的 第四:虚基类:当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或

5、多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类虚基类,在说明其作用前先看一段代码classApublic:int iValue;classB:publicApublic:void bPrintf()coutThisisclassBendl;classC:publicApublic:void cPrintf()coutThisisclassCendl;classD:publicB,publicCpublic:void dPrintf()coutThisisclassDendl;Void main()D d;coutd.iValueendl;/错误,不明确的访问coutd

6、.A:iValueendl;/正确coutd.B:iValueendl;/正确coutd.C:iValueendl;/正确从代码中可以看出类BC都继承了类A的iValue成员, 因此类BC都有一个成员变量iValue,而类D又继承了BC,这样类D就有一个重名的成员iValue(一个是从类B中继承过来的,一个是从类C中继承 过来的).在主函数中调用d.iValue因为类D有一个重名的成员iValue编译器不知道调用从谁继承过来的iValue所以就产生的二义性的问题. 正确的做法应该是加上作用域限定符d.B:iValue表示调用从B类继承过来的iValue。不过类D的实例中就有多个iValue的实

7、例,就会占用 内存空间。所以C+中就引用了虚基类的概念,来解决这个问题。classApublic:int iValue;classB:virtual public Apublic:void bPrintf()coutThisisclassBendl;classC:virtual public Apublic:void cPrintf()coutThisisclassCendl;classD:publicB,publicCpublic:voiddPrintf()coutThisisclassDendl;voidmain()D d;coutd.iValueendl;/正确在继承的类的前面加上vir

8、tual关键字表示被继承的类 是一个虚基类,它的被继承成员在派生类中只保留一个实例。例如iValue这个成员,从类D这个角度上来看,它是从类B与类C继承过来的,而类BC又是从 类A继承过来的,但它们只保留一个副本。因此在主函数中调用d.iValue时就不会产生错误。 虚函数还是先看代码classApublic:void funPrint()coutfun Print of class Aendl;classB:publicApublic:voidfunPrint()coutfun Print of class BfunPrint();p=&b;p-funPrint();大家以为这段代码的输出结

9、果是什么?有的人可能会马上回答funPrintofclassA与funPrintofclassB因为第一次输出是引用类A的实例啊,第二次输出是引用类B的实例啊。那么我告诉你这样想就错啦,答案是funPrintofclassA与funPrintofclassA至于为什么输出这样的结果不在本文讨论的范围之内;你就记住,不管引用的实例是哪个类的当你调用的时候系统会调用左值那个对象所属类的方法。比如说上面的代码类A B都有一个funPrint函数,因为p是一个A类的指针,所以不管你将p指针指向类A或是类B,最终调用的函数都是类A的funPrint函数。这就是静态联篇,编译器在编译的时候就已经确定好了。

10、可是如果我想实现跟据实例的不同来动态决定调用哪个函数呢?这就须要用到虚函数(也就是动态联篇)classApublic:virtual void funPrint()coutfun Print of class Aendl;classB:public Apublic:virtual void funPrint()coutfun Print of class BfunPrint();p=&b;p-funPrint();在基类的成员函数前加virtual关键字表示这个函数是 一个虚函数,所谓虚函数就是在编译的时候不确定要调用哪个函数,而是动态决定将要调用哪个函数,要实现虚函数必须派生类的函数名与基类

11、相同,参数名参数类 型等也要与基类相同。但派生类中的virtual关键字可以省略,也表示这是一个虚函数。下面来解决一下代码,声明一个基类的指针(必须是基类,反之则不 行)p,把p指向类A的实例a,调用funPrint函数,这时系统会判断p所指向的实例的类型,如果是A类的实例就调用A类的funPrint函数,如 果是B类的实例就调用B类的funPrint函数。纯虚函数它只是声明一个函数但不实现它,让派生类去实现它,其实这也很好理解。Class Vehiclepublic:virtual void PrintTyre()=0;/纯虚函数是这样定义的;class Camion:public Vehi

12、clepublic:virtual void PrintTyre()coutCamion tyre fourendl;Class Bike:public Vehiclepublic:virtual void PrintTyre()coutBike tyre twoendl;voidmain()Camion c;Bike b;b.PrintTyre();c.PrintTyre();如上代码,定义了一个交通工具类(Vehicle),类中有一函数可打印出交通工具的轮胎个数,但交通工具很多轮胎个数自然也就不确定,所以就把它定义为纯虚函数,也就是光定义函数名不去实现它,类Camion继承了Vehicle

13、并实现了里面的代码,打印出有4个轮胎。Bike类也是一样。有一点须要注意一下,纯虚函数不能实化化,但可以声明指针。总结虚基类1,一个类可以在一个类族中既被用作虚基类,也被用作非虚基类。2,在派生类的对象中,同名的虚基类只产生一个虚基类子对象,而某个非虚基类产生各自的子对象。3,虚基类子对象是由最派生类的构造函数通过调用虚基类的构造函数进行初始化的。4,最派生类是指在继承结构中建立对象时所指定的类。5,派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的调用;如果未列出,则表示使用该虚基类的缺省构造函数。6,从虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中都要列出对虚基类构造

14、函数的调用。但只有用于建立对象的最派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。7,在一个成员初始化列表中同时出现对虚基类和非虚基类构造函数的调用时,虚基类的构造函数先于非虚基类的构造函数执行。虚函数1,虚函数是非静态的、非内联的成员函数,而不能是友元函数,但虚函数可以在另一个类中被声明为友元函数。2,虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的时候声明。3,一个虚函数无论被公有继承多少次,它仍然保持其虚函数的特性。4,若类中一个成员函数被说明为虚函数,则该成员函数在派生类中可能有不同的实现。当使用该成员函数操作指针或引用所标识的对象时,对该成员函数调用可采用动态联编。5,定义了虚函数后,程序中声明的指向基类的指针就可以指向其派生类。在执行过程中,该函数可以不断改变它所指向的对象,调用不同版本的成员函数,而且这些动作都是在运行时动态实现的。虚函数充分体现了面向对象程序

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1