第八章类的继承.ppt

上传人:sccc 文档编号:5313414 上传时间:2023-06-25 格式:PPT 页数:21 大小:180.03KB
返回 下载 相关 举报
第八章类的继承.ppt_第1页
第1页 / 共21页
第八章类的继承.ppt_第2页
第2页 / 共21页
第八章类的继承.ppt_第3页
第3页 / 共21页
第八章类的继承.ppt_第4页
第4页 / 共21页
第八章类的继承.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第八章类的继承.ppt》由会员分享,可在线阅读,更多相关《第八章类的继承.ppt(21页珍藏版)》请在三一办公上搜索。

1、第八章 类的继承,继承和组合 多重继承虚拟继承、虚基类,程序设计讲究代码的重用,这不应当仅仅依靠代码的拷贝来实现,而应使用更具可进化性的方法解决。在C+中,可以用类的方法来实现代码的重用。通过创建新类重用代码,而不是从头创建它们,这样就可以使用其他人已经创建并调试过的类。关键是使用类而不是更改已存在的代码。C+最重要的性能之一即代码重用。,8.1 代码重用,继承可以使已存在的类不需修改地适应新应用,理解继承是理解面向对象程序设计所有方面的关键。,通信工具类通信工具的属性和行为,派生类的构造,派生类的构造是从基类的初始化开始的。派生类调用基类的构造函数对基类对象进行初始化,派生类通过其构造函数的

2、初始化表来实现这一点。若派生类未在其构造函数的初始化表中显示调用基类的构造函数,则系统将在构造派生类对象之前自动调用其基类的默认构造函数,构造基类对象部分,即一个无名基类对象。,8.2 组合,类以另一个类对象作数据成员,称为组合。继承和组合都发挥了重用,将以前设计好的类“重新拿来”,但两者在使用上不同。,class Xint i;public:X()i=0;void set(int k)i=k;int get()return i;,class Y int i;public:X xo;Y()i=0;void set(int k)i=k;int get()return i;,void main()

3、Y yo;yo.set(7);yo.xo.set(7);,class Y:public X int i;public:Y()i=0;void set(int k)i=k;int get()return i;,void main()Y yo;yo.set(7);,私有的嵌入式对象,class Yint i;X xo;public:Y()i=0;void set(int k)i=k;xo.set(k);int get()return i*xo.get();,void main()Y yo;yo.set(7);,继承与组合,无论组合还是继承都能把子对象放在新类型中。两者都使用构造函数的初始化表去构造

4、这些子对象。这两者之间到底有什么不同?该如何选择?,组合通常在希望新类内部有已存在类的性能时使用,而不希望已存在类作为它的接口。这就是说,嵌入一个计划用于实现新类性能的对象,而新类的用户看到的是新定义的接口而不是来自老类的接口。为此,在新类的内部嵌入已存在类的private对象。有时,需要允许类用户能够直接访问新类中组合的对象成员,这就要让对象成员是public属性的。,class Engine;class Wheel;class Window;class Door public:Window window;;,class Car public:Engine engine;Wheel whee

5、l 4;Door left,right;;,class VehicleEngine engine;public:void run();float speedUp(float speed);,class Car:public Vehicle Wheel wheel 4;public:;,继承也就是取一个已存在的类,并制作它的一个专门的版本。通常,这意味着取一个一般目的的类并为了特殊的需要对它专门化。,8.3 多重继承,可以根据需要为一个派生类指定多个基类,这样的继承结构称为多重继承或多继承。现实世界中,有些类代表多个类的合成,实现这样的类需要使用多重继承。,/床类的定义,class Bed pr

6、otected:int weight;public:Bed():weight(0)void Sleep()cout Sleeping.n;void SetWeight(int i)weight=i;,/沙发类的定义,class Sofa protected:int weight;public:Sofa():weight(0)void WatchTV()cout Watching TV.n;void SetWeight(int i)weight=i;,/沙发床类的定义,class SleeperSofa:public Bed,public Sofa public:SleeperSofa()voi

7、d FolderOut()cout Fold out the sofa.n;,/主程序,void main()SleeperSofa ss;ss.WatchTV();ss.FolderOut();ss.Sleep();,Watching TV.Fold out the sofa.Sleeping.,继承的模糊性,ss.SetWeight(20);,?,ss.Bed:SetWeight(20);ss.Sofa:SetWeight(20);,名称冲突,class Furniture protected:int weight;public:Furniture()int GetWeight()retu

8、rn weight;void SetWeight(int i)weight=i;,class Bed:public Furniture public:Bed()void Sleep()coutSleeping.n;,class Sofa:public Furniture public:Sofa()void WatchTV()cout Watching TV.n;,床部分,沙发部分,SleeperSofa完整对象,虚拟继承,class Bed:virtual public Furniture public:Bed()void Sleep()coutSleeping.n;,class Sofa:virtual public Furniture public:Sofa()void WatchTV()cout Watching TV.n;,void main()SleeperSofa ss;ss.SetWeight(20);coutss.GetWeight()endl;,多继承的构造顺序,包含多继承的复杂继承结构中,构造函数按下列顺序被调用:任何虚拟基类的构造函数按照它们被继承的顺序构造任何非虚拟基类的构造函数按照它们被继承的顺序构造任何成员对象的构造函数按照它们声明的顺序构造类自己的构造函数,析构的顺序则恰好相反,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号