C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx

C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx

ID:51777222

大小:449.65 KB

页数:21页

时间:2020-03-07

C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx_第1页
C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx_第2页
C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx_第3页
C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx_第4页
C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx_第5页
资源描述:

《C++程序设计与实践 教学课件 作者 白忠建chapter12 多继承.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C++程序设计与实践第十二章多继承电子科技大学信息与软件工程学院白忠建第十二章多继承本章要点多继承的概念与语法。多继承指一个类拥有多个直接基类。虚继承和虚基类。虚基类的设置是为了避免多继承中容易出现的二义性。12.1问题引入现实世界中,一种事物往往具有多种事物的特征。例如嫁接的苹果梨,它既有苹果的特征,又有梨的味道。这说明了展示了对象可能拥有多个事物的特征。再考虑五种形体中的正方形。实际上,正方形它既有矩形的特征:相邻两边互相垂直,同时也有菱形的特征:四边相等。从继承的角度来讲,就是作为派生类的正方形有两个基类。这就是多继承的概念。10.1问题引入有的时候,我们不得不编写一系列

2、非常相似的函数来处理不同类型的数据。例如,考虑这样一个问题:编写全局函数来比较两个数的大小。整型版本boolGreater(constint&a,constint&b){returna>b;}浮点版本boolGreater(constdouble&a,constdouble&b){returna>b;}类版本booloperator>(constQuadrangle&a,constQuadrangle&b){returna.area()>b.area();}boolGreater(constQuadrangle&a,constQuadrangle&b){returna>b;}1

3、2.2多继承的概念voidf(){inta=1,b=2;doublec=4.0,d=-1.0;Rectangler("r",3,4),t("t",5,6);Greater(a,b);Greater(c,d);//Greater(r,t);}callGreater(constint&,constint&)callGreater(constdouble&,constdouble&)callGreater(constQuadrangle&,constQuadrangle&)12.2多继承的概念在前面章节的例子中,派生类仅有一个直接基类,这称为“单继承”。但是一些类却代表两个或多个类的

4、合成,例如正方形。因此多继承是指一个派生类有两个或者两个以上的直接基类。Square类的继承就属于这种情况,它的层次结构如图12-1所示。12.2多继承的概念1.多继承的语法C++为多继承提供了完整的语法支持,其语法如下:class类名:基类名,基类名,…{};classParallelogram:publicQuadrangle{…};classRectangle:publicParallelogram{…};classDiamond:publicParallelogram{…};classSquare:publicRectangle,publ

5、icDiamond{…};12.2多继承的概念2.派生类构造函数初始化所有基类由于Square类拥有多个基类,因此在为其设计构造函数时,应该显式引起其所有基类构造函数的调用。例如:Square(stringn="Square",intw=5):Rectangle(n,w,w),Diamond(n,w,w){}Rectangle类和Diamond类的构造函数都可以缺省全部参数。因此,我们可以在初始化列表中省略直接基类中的任何一个,而这个省略的直接基类子对象将用自己的缺省参数去构造。如果有Square(stringn="Square",intw=5):Rectangle(n,w,w

6、){}那么有效的参数n和w就没有能够传递到Diamond基类子对象。12.2多继承的概念3.构造函数和析构函数的调用顺序在派生类对象构造时,将按派生时指定的顺序调用基类的构造函数。在最终派生类析构时,析构函数的调用顺正好与构造函数的调用顺序相反。(ex12-1)12.3虚继承和虚基类在C++中,一个类不能被多次说明为一个派生类的直接基类,但可以不止一次地成为间接基类,例如Square类,它有两个直接基类。如果这两个直接基类没有共同的祖先,那么一切都没有问题。但是,正如读者在代码中看到的那样,Rectangle和Diamond都继承自Parallelogram类。这将会为多继承派

7、生类Square的使用带来一些问题。12.3虚继承和虚基类12.3.1多继承的二义性问题由于Square类只有一个特征从参数,因此我们不应该使用继承过来的draw()方法来“画”正方形,而是为其编写一个自己的方法。其代码可能是这样的:classSquare:publicRectangle,publicDiamond{public:Square(stringn="Square",intw=5):Rectangle(n,w,w){}voiddraw()const{cout<

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

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

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