欢迎来到天天文库
浏览记录
ID:20724438
大小:550.00 KB
页数:99页
时间:2018-10-15
《c语言 继承与派生》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章继承与派生7.1继承与派生7.2多继承7.3类的继承方式7.4派生类的构造和析构函数7.5派生中成员的标识与访问7.6虚基类7.7类模板的派生和继承7.1继承与派生7.1.1继承与派生的概念举个简单的例子:“狗”和“黑狗”。当谈论“狗”的时候,知道它是哺乳动物,有4条腿,1条尾巴,喜欢啃肉骨头,……。现在谈论“黑狗”,人们会怎么说呢?当然可以说:“黑狗是一种哺乳动物,有4条腿,1条尾巴,喜欢吃肉骨头,……,并且它的毛是黑色的”。但是人们一般都不这么说,而是说:“黑狗就是黑毛的狗”。比较一下这两种说法,显然后一种说法更好。那么它好在哪里呢?第一,它更简炼;第二,更重要
2、的是它反映了“狗”和“黑狗”这两个概念的内在联系。“狗”和“黑狗”之间存在一条重要的联系,那就是所有的“黑狗”都是“狗”,或者说,“黑狗”是一类特殊的“狗”。根据这一条,“狗”所具有的特征,例如4条腿,1条尾巴等,“黑狗”自然都具有。也就是说,“黑狗”从“狗”那里继承了“狗”的全部特征。所谓继承,就是新的类从已有类那里得到已有的特性。从另一个角度来看,从已有类产生新类的过程就是类的派生。已有的类称为基类或父类,产生的新类称为派生类或子类。派生类同样也可以作为基类再派生新的类,这样就形成了类的层次结构。类的继承和派生的层次结构,可以说是人们对自然界中的事物进行分类、分析和认
3、识的过程在程序设计中的体现。现实世界中的事物都是相互联系、相互作用的,人们在认识过程中,根据事物的实际特征,抓住其共同特性和细小差别,利用分类的方法进行分析和描述。C++中有两种继承:单一继承和多重继承。对于单一继承,派生类只能有一个基类;对于多重继承,派生类可以有多个基类。图7-1交通工具分类层次图例如,对于交通工具的分类见图7-1。7.1.2单一继承的派生类声明在C++中,派生类的一般声明语法如下:class<派生类名>:[继承方式]<基类名>{派生类成员声明;};其中:①class是类声明的关键字,用于告诉编译器下面声明的是一个类。②派生类名是新生成的类名。③继承方
4、式规定了如何访问从基类继承的成员。继承方式关键字为private、public和protected,分别表示私有继承、公有继承和保护继承。如果不显式地给出继承方式关键字,系统的默认值就认为是私有继承(private)。类的继承方式指定了派生类成员以及类外对象对于从基类继承来的成员的访问权限,这将在7.3节中详细介绍。④派生类成员指除了从基类继承来的所有成员之外,新增加的数据和函数成员。这些新增的成员正是派生类不同于基类的关键所在,是派生类对基类的发展。当重用和扩充已有的代码时,就是通过在派生类中新增成员来添加新的属性和功能。可以说,这就是类在继承基础上的进化和发展。例如,
5、从基类vehicle(汽车)公有派生car(小汽车)类的声明形式如下:classvehicle//基类vehicle类的声明{private://私有数据成员intwheels;floatweight;public://公有函数成员voidinitvehicle(intin_wheels,floatin_weight);intget_wheels();floatget_weight();//...};classcar:publicvehicle//派生类car类的声明{private://新增私有数据成员intpassenger_load;public://新增公有函数成
6、员voidinitcar(intin_wheels,floatin_weight,intpeople=4);intget_passengers();//...};7.1.3派生类生成过程仔细分析派生新类这个过程,实际是经历了三个步骤:吸收基类成员,改造基类成员和添加新的成员。面向对象的继承和派生机制,其最主要的目的是实现代码的重用和扩充。因此,吸收基类成员就是一个重用的过程,而对基类成员进行调整、改造以及添加新成员就是原有代码的扩充过程,二者是相辅相成的。下面以某公司人员管理系统为例,分别对这几个步骤进行解释。基类employee和派生类technician声明如下,类的
7、实现部分略去。classemployee{protected:char*name;//姓名intindividualEmpNo;//个人编号intgrade;//级别floataccumPay;//月薪总额staticintemployeeNo;//本公司职员编号目前最大值public:employee();~employee();voidpay();//计算月薪函数voidpromote(int);//升级函数voiddisplayStatus();//显示人员信息};classtechnician:publicemploy
此文档下载收益归作者所有