C++程序设计教程12.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:20 大小:131KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++程序设计教程12.ppt

C++程序设计教程12.ppt

预览

免费试读已结束,剩余 10 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++程序设计教程(第二版)第十章内容1.继承召唤多态(InheritanceSummonupPolymorphism)同化效应同化效应蔓延到指针操作关键技术2.抽象编程的困惑(AbstractProgrammingPerplexing)破坏抽象编程的后果是:可维护性,可扩展性受到伤害.若增加一个博士类,则类代码与应用程序代码都得改,而这本来不是应用程序的份内事.因而呼吁从语言内部来支持这种多态性.3.虚函数(VirtualFunction)多态性使得应用程序使用类体系中的祖孙对象共存的复杂局面达到了一种编程自在境界.程序员从使用孤立的类(抽象数据类型),到使用分层的类,并且让各种对象“同场竞技”,充分展现其个性.尝到了对象化编程的真正乐趣.C++类机制的虚函数就是冲着让类编程实质性地支持应用编程中对家族化对象操作依赖的目的,从而面向对象来分析、设计和解决问题.4.避免误用虚函数(AvoidingMisusingVirtualFunction)函数重载对于编译识别来说,返回类型是不起作用的.voidfn(int);intfn(int);对于fn(2);无法判断应该调用哪个函数.而使调用遭遇编译失败.对于虚函数来说,声明:virtualBase*fn();virtualSub*fn();应看作不能分辨其多态调用的虚函数,但却引编译认为是同一个虚函数而获得通过.这是语言技术上的一种处理,事实上,如果一个多态函数正在处理Sub类的对象,则它仍可以通过返回的Sub对象指针,继续处理Sub对象,似乎更自然注意事项:多态性是通过成员函数捆绑不同类型的对象来体现的,所以,虚函数一定是成员函数,而且,静态成员函数都不行,因为它不捆绑对象,同样,构造函数也不行,因为它只产生对象,也不捆绑对象.可是,析构函数却可以是虚函数,事实上,鼓励类继承体系中的每个类最好其析构函数都是虚函数.一旦设置了虚函数,就与编译器达成了滞后联编的协议,函数必定分离于当前运行的模块,因而就不可能是内联函数了.5.精简共性的类(SimplifyClasswithGenerality)6.多态编程(PolymorphicProgramming)多态编程中,会遇到各种子类混在一个集合中的情形,这正是多态大展身手的时候.针对左边的类体系,有多态的应用代码:vector<shape*>a;//...for(inti=0;i<a.size();++i)a[i]->area();7.类型转换(TypeConversions)辨认对象的类型,首先应该知道其属于哪个类系.然后确定要判断的子类名称.再行编码.例如,针对每个对象进行操作:Savings类对象,余额增加以1%计算的利息;Checking类对象,余额增加以0.05%计算的利息vector<Account*>a;//...Checking*pC;Savings*pS;for(inti=0;i<a.size();++i){if(pC=dynamic_cast<Checking*>(a[i]))pC->deposit(pC->getBalan()*0.05);elseif(pS=dynamic_cast<Savings*>(&a[i]))pS->deposit(pS->getBalan()*0.1);a[i]->display();}动态转型只限于多态类,而静态转型适合更一般的类对象.例如,没有多态性的学生与研究生之间的转换:Student*ps=static_cast<Student*>(&gs);例如:无类型指针到某类型指针的转换:voidfn(void*dd){Student*pp=static_cast<Student*>(&dd);//...}许多标准类库函数的声明为了适应大多数编程场合,做了完美的设计.例如,max:constchar*max(constchar*s1,constchar*s2){returnstrcmp(s1,s2)>0?s1:s2;}但是,编程总是调用标准库函数和自处理交替进行的,当返回的对象要进行写操作时,由于类型的限制,便不能再正确编码下去了.然而,事实上,从一开始,对象完全是可修改的,只是由于函数调用的结果,而使对象性质被迫发生了变化.为了将这种本质上可以修改的对象回复可修改的状态,使用常量转型.intfn(){char*p=max("hello","world");//errorchar*p=const_cast<char*>(max(“hello”,”world”));//ok//…}