欢迎来到天天文库
浏览记录
ID:59007573
大小:68.00 KB
页数:17页
时间:2020-09-15
《C++课件第9章继承.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章面向对象1--继承这一章的内容包括:n基类和派生类n派生类的构造函数/析构函数n子类型化和类型适应n多继承n虚基类一、基类和派生类1.概念通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。 在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。
2、 2.语法 单继承的定义格式如下: class派生类名:继承方式基类名 { //派生类新定义成员 }; 其中,<派生类名>是新定义的一个类的名字,它是从<基类名>中派生的,并且按指定的<继承方式>派生的。<继承方式>常使用如下三种关键字给予表示: public表示公有基类; private表示私有基类; protected表示保护基类;示例:classMyDate:publicDate1 { //派生类新定义成员变量或函数 };//派生类新定义成员变量(或函数)初始化(或实
3、现)3派生类的三种继承方式 公有继承(public)、私有继承(private)、保护继承(protected)是三种继承方式。(1)公有继承(public) 公有继承的特点是基类的private、public和protected成员作为派生类的成员时,它们都保持原有的状态。(2)私有继承(private) 私有继承的特点是基类的public成员和protected成员,在派生类都变为私有成员。基类的原私有成员仍为派生类的私有成员(3)保护继承(protected) 保护继承的特点是基类的
4、public成员和protected成员,在派生类都变为保护成员。基类的原私有成员仍为派生类的私有成员。下表列出三种不同的继承方式的基类特性和派生类特性: 继承方式基类成员派生类成员公有继承publicprotectedprivatepublicprotectedprivate私有继承publicprotectedprivate变为private变为privateprivate保护继承publicprotectedprivate变为protectedprotectedprivate对于单级继承来说
5、,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。私有继承在一些特定场合下可用于表示类的组成关系。保护继承与私有继承在实际编程中是极其少见的。Q1:C++默认的继承方式?对于C++的类(class),默认的继承方式是私有继承(private),而最常用的继承方式是公有继承(public)。对于C++的结构体(struct)默认的继承方式是公有继承(public)。 4.基类与派生类的关系 任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生
6、类是相对而言的。 基类与派生类之间的关系可以有如下几种描述,了解这些关系有助于指导实际编程工作:(1)派生类是基类的具体化 类的层次通常反映了客观世界中某种真实的模型。在这种情况下,不难看出:基类是对若干个派生类的抽象,而派生类是基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型。(2)派生类是基类定义的延续 先定义一个抽象基类,该基类中有些操作并未实现。然后定义非抽象的派生类,实现抽象基类中定义的操作。例如,虚函数就属此类情况。这时,派生类是抽象的
7、基类的实现,即可看成是基类定义的延续。这也是派生类的一种常用方法。(3)派生类是基类的组合在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为的组合。比如以前讲过的飞机组成的例子,用组成关系和多继承都可以,但最好使用组成关系。 派生类将其本身与基类区别开来的方法是添加数据成员和成员函数。因此,继承的机制将使得在创建新类时,只需说明新类与已有类的区别,从而大量原有的程序代码都可以复用,所以有人称类是“可复用的软件构件”。在实际编程中,一定要注意,继承是软件体系结构方面的问题:(1)派
8、生类最好是基类的一类(isakindof),否则容易出现设计概念错误。(2)继承会增加空间复杂度和时间复杂度,要慎重使用。继承链不要太长(3-5层足矣),要“头轻脚重”,越是顶层的类越要轻巧----最好是完全抽象的虚类。(3)优先使用组成关系(有的书叫聚集、聚合、复合),而不是继承关系解决问题。继承把抽象化角色(基类)和实现化角色(派生类)的关系绑定,使得两个层次之间产生了相互依赖和限制,很难独立地演化,在软件设计中应避免此类问题。组成关系没有这个缺点。(4)基类要“坚固不变”,否
此文档下载收益归作者所有