C-课件第十一章继承和派生类.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C-课件第十一章继承和派生类.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课件 第十一 继承 派生
- 资源描述:
-
1、l类是一种抽象数据类型,是对具有共同属性和行为的对象(事物)的抽象描述。房屋平房楼房办公楼居民楼 顶层的抽象事物具有处于底层的抽象事物的共同特征,而处于底层的抽象事物除了包含顶层抽象事物的特征外,还具有自身的我特征。l 一个类继承另一个类时,这个类被称为继承类、派生类或子类,另一个类被称为被继承类、基类或父类。l 继承类包含了被继承类中的所有成员,且有自己的成员。 继承:从一个或多个先前定义过的类(称为基类)中接受全部或一部分数据(属性)或函数(行为或操作),并且补充定义新的数据或函数,因而形成一个新的低层的类(称为派生类)。而该派生类还可用作更低层派生类的基类。 class demo pro
2、tected: int j; public: demo()j=0 void add(int i) j+=i; void display( ) coutjendl;;1 1 派生类定义的格式派生类定义的格式class child:public demo public: void sub(int i)j-=i; ;void main(void) child object,object1; object.display(); object.add(10); object.display(); object.sub(5); object.display(); object1.display;01050
3、l定义派生类的基本格式: class 派生类名:继承权限 基类名l继承权限:public,protected,private影响的是被继承的原基类成员的访问权限class定义的默认为private,struct定义的默认为publicl 继承权限为public时,称该派生为公有派生。公有派生。基类中的所有public成员在派生类中仍是public成员,所有protected成员在派生类中仍是protected成员。l 继承权限为private时,称该派生为私有派生。私有派生。基类中的public成员和protected成员在派生类中均变成private成员。l 继承权限为protected时,
4、称该派生为保护派保护派生。生。基类中的public成员和protected成员在派生类中均变成protected成员。成员成员被其它函数访问被其它函数访问被继承被继承publicpublic可以可以可以可以protectedprotected不可以不可以可以可以privateprivate不可以不可以不可以不可以 无论哪一种继承权限,其基类的private成员均不能为派生类所继承。但可通过被同时继承下来的原基类的某些函数间接访问它们。private:aa1protected:aa2public:aa3AClass B:public A private:bb1 protected:bb2 pub
5、lic:bb3 private:bb1protected: aa2 bb2public: aa3 bb3B公有派生private:aa1protected:aa2public:aa3AClass B:protected A private:bb1 protected:bb2 public:bb3 private:bb1protected: aa2 bb2 aa3public: bb3B保护派生private:aa1protected:aa2public:aa3AClass B: A private:bb1 protected:bb2 public:bb3 private:bb1 aa2 aa3
6、protected: bb2 public: bb3B私有派生2 2 派生类的使用派生类的使用 #include class employee private: char *name; short age; float salary; public: employee( ) name=0; age=0; salary=0.0; employee(char *name1, short age1, float salary1) name=new charstrlen(name1)+1; strcpy(name,name1); age=age1; salary=salary1; void print
7、( ) const /const成员函数:不能改变类中成成员函数:不能改变类中成 员数据的值,也不能调用类中非员数据的值,也不能调用类中非 const成员函数成员函数 cout“name:”name; cout“age:”age; cout“salary:”salaryendl; employee( ) delete name; ;Manager: 除具有除具有employee的属性外,有新的属性。为避免重复定义,的属性外,有新的属性。为避免重复定义,可从可从employee中派生出中派生出manager(派生类)。(派生类)。class manager: public employee pr
8、ivate: int level; public: manager( ) level=0; manager(char *name1, short age1, float salary1, int level1): employee(name1, age1, salary1) level=level1; void print_level( ) cout“level:”levelendl; ;派生类构造函数:派生类构造函数:使用初始化符表初始化基类中的成员。使用初始化符表初始化基类中的成员。缺省构造函数缺省构造函数若基类无缺省构造函数,将出错若基类无缺省构造函数,将出错基类定义部分基类定义部分构造
9、函数构造函数析构函数析构函数printPrint_levelnameagesalarylevel函数函数函数函数函数函数派生类新增部分派生类新增部分公有方法公有方法私有成员私有成员void main()manager m(“xyz,24,1000,2); m.print_level(); m.print(); m.employee:print();void main() manager n; n.print_level() ; n.print(); 若若a a是是Y Y从从X X类中继承来的公用成员,设类中继承来的公用成员,设y y是是Y Y的一个对象的一个对象,则可访问,则可访问y.ay.a
10、或或y.X:ay.X:aprotected 访问指明符:访问指明符:外部函数不能访问;外部函数不能访问;派生类成员函数可直接访问。派生类成员函数可直接访问。 class employee private: short age; float salary; protected: char *name; / ;派生类成员函数:派生类成员函数:void manager:print_name( ) const coutnameendl; 外部函数:外部函数: void f( ) manager m; coutm.nameendl; /错错 继续派生: class director: public ma
11、nager / employeedirectormanager多层继承多层继承class x protected:int i, j; public:x(int i, int j) x:i=i, x:j=j; void print() cout i= i j= j endl; ;class y : public xint k; public:y(int i, int j) : x(i, j) k = i * j; /初始化列表初始化列表void print() cout i= i j= j k=kendl; ; class z : public y public:z(int i, int j)
12、: y(i, j) /初始化列表初始化列表void print1() cout i= i j= jendl; void print() y:print(); ; void main()y y1(23, 45);y1.print(); y1.x:print(); z z1(10, 20);z1.print();z1.print1(); z1.y:print(); z1.x:print(); i=23 j=45 k=1035i=23 j=45i=10 j=20 k=200i=10 j=20i=10 j=20 k=200i=10 j=20l 对属于基类的成员进行初始化是通过初始表中对属于基类的成员进
13、行初始化是通过初始表中的初始化项来初始化的。若初始化表中没有调用基的初始化项来初始化的。若初始化表中没有调用基类的初始化项,则自动调用基类的无参构造函数进类的初始化项,则自动调用基类的无参构造函数进行初始化。行初始化。 l 如果派生类的自有成员和继承成员同名,则自如果派生类的自有成员和继承成员同名,则自有成员优先,即通过这个共同的成员名所访问的是有成员优先,即通过这个共同的成员名所访问的是自有成员,而不是继承成员,这种情况下,可以在自有成员,而不是继承成员,这种情况下,可以在成员名前加类区分符将同名成员区分开。成员名前加类区分符将同名成员区分开。( (支配规支配规则则) )l 作用域运算符不能
展开阅读全文