面向对象C++:ch04 继承与派生

上传人:s9****2 文档编号:569769468 上传时间:2024-07-31 格式:PPT 页数:22 大小:454KB
返回 下载 相关 举报
面向对象C++:ch04 继承与派生_第1页
第1页 / 共22页
面向对象C++:ch04 继承与派生_第2页
第2页 / 共22页
面向对象C++:ch04 继承与派生_第3页
第3页 / 共22页
面向对象C++:ch04 继承与派生_第4页
第4页 / 共22页
面向对象C++:ch04 继承与派生_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《面向对象C++:ch04 继承与派生》由会员分享,可在线阅读,更多相关《面向对象C++:ch04 继承与派生(22页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章 继承与派生继承与派生Harbin Engineering UniversityHarbin Engineering University哈尔滨工程大学课件继承与派生的实例继承与派生的实例动物动物哺乳类哺乳类鸟类鸟类鱼类鱼类灵长类灵长类猫科猫科狮子狮子虎虎豹豹狮虎兽狮虎兽哈尔滨工程大学课件继承与派生的相关概念继承与派生的相关概念继承:继承:继承:继承: 保持已有类的特性而构造新类的过程。保持已有类的特性而构造新类的过程。保持已有类的特性而构造新类的过程。保持已有类的特性而构造新类的过程。派生:派生:派生:派生: 在已有类的基础上新增自己的特性而产生新类的在已有类的基础上新增自己的特

2、性而产生新类的在已有类的基础上新增自己的特性而产生新类的在已有类的基础上新增自己的特性而产生新类的过程。过程。过程。过程。基类(或父类)基类(或父类)基类(或父类)基类(或父类) : 被继承的已有类。被继承的已有类。被继承的已有类。被继承的已有类。派生类:派生类:派生类:派生类: 派生出的新类。派生出的新类。派生出的新类。派生出的新类。哈尔滨工程大学课件继承与派生的相关概念继承与派生的相关概念继承的目的:继承的目的: 实现代码重用。实现代码重用。派生的目的:派生的目的: 当新的问题出现,原有程序无法解决(或不能当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造完全解决

3、)时,需要对原有程序进行改造哈尔滨工程大学课件派生类的声明派生类的声明声明格式声明格式声明格式声明格式:class class 派生类名:继承方式派生类名:继承方式派生类名:继承方式派生类名:继承方式 基类名基类名基类名基类名 派生类新成员声明;派生类新成员声明;派生类新成员声明;派生类新成员声明; class stuclass stupublic:public: private: private: char name ; char name ; int age; int age; ; ;class stu1:public stupublic: void chose( ); private:

4、char spec20 ;哈尔滨工程大学课件继承的种类继承的种类直接基类直接基类直接参与新类派生的基类直接参与新类派生的基类间接基类间接基类基类的基类或更高层的基类。基类的基类或更高层的基类。单继承单继承只有一个直接基类的继承。只有一个直接基类的继承。多继承多继承同时有多个基类的继承。同时有多个基类的继承。哈尔滨工程大学课件继承的过程继承的过程1. 吸收基类成员吸收基类成员接收基类中除构造函数和析构函数之外的所有接收基类中除构造函数和析构函数之外的所有成员。成员。2. 改造基类成员改造基类成员根据继承方式对基类成员进行隐藏根据继承方式对基类成员进行隐藏3. 添加新的成员添加新的成员给派生类定义

5、新的成员,实现新的功能。给派生类定义新的成员,实现新的功能。哈尔滨工程大学课件派生类对基类成员的访问控制派生类对基类成员的访问控制class Aclass A public:public: void set( )void set( )void disp( )void disp( ) protected: protected: int w; int w; private: private: float x,y;float x,y; ;class B :public A public: void dispB( ) private: int c,d;void main( )B oa; oa.disp

6、B(); oa.set( ); void dispB( ) set( ); disp( ); w=3; x=4.7; 公有成员和保公有成员和保护成员的访问护成员的访问方式在派生类方式在派生类中保持中保持不变不变哈尔滨工程大学课件派生类对基类成员的访问控制派生类对基类成员的访问控制class A public: void set( )void disp( ) protected: int w; private: float x,y;class B :private A public: void dispB( ) private: int c,d;void main( )B oa; oa.disp

7、B(); oa.set( ); void dispB( ) set( ); disp( ); w=3; x=4.7; 公有成员和保公有成员和保护成员的访问护成员的访问方式在派生类方式在派生类中为中为私有成员私有成员哈尔滨工程大学课件派生类对基类成员的访问控制派生类对基类成员的访问控制class A public: void set( )void disp( ) protected: int w; private: float x,y;class B :protected A public: void dispB( ) private: int c,d;void main( )B oa; oa.

8、dispB(); oa.set( ); void dispB( ) set( ); disp( ); w=3; x=4.7; 公有成员和保公有成员和保护成员的访问护成员的访问方式在派生类方式在派生类中为中为保护成员保护成员哈尔滨工程大学课件派生类对基类成员的访问控制派生类对基类成员的访问控制1 1、基类的、基类的、基类的、基类的私有成员私有成员私有成员私有成员: 不能以任何方式访问。不能以任何方式访问。不能以任何方式访问。不能以任何方式访问。2 2、基类的、基类的、基类的、基类的公有成员公有成员公有成员公有成员: 公有继承:公有成员公有继承:公有成员公有继承:公有成员公有继承:公有成员 保护继

9、承:保护成员保护继承:保护成员保护继承:保护成员保护继承:保护成员 私有继承:私有成员私有继承:私有成员私有继承:私有成员私有继承:私有成员3 3、基类的、基类的、基类的、基类的保护成员:保护成员:保护成员:保护成员: 公有继承:保护成员公有继承:保护成员公有继承:保护成员公有继承:保护成员 保护继承:保护成员保护继承:保护成员保护继承:保护成员保护继承:保护成员 私有继承:私有成员私有继承:私有成员私有继承:私有成员私有继承:私有成员哈尔滨工程大学课件派生类的构造函数派生类的构造函数派生类构造函数的任务派生类构造函数的任务 1) 1) 初始化新增数据成员初始化新增数据成员初始化新增数据成员初

10、始化新增数据成员 2) 2) 调用基类构造函数,初始化继承来的成员。调用基类构造函数,初始化继承来的成员。调用基类构造函数,初始化继承来的成员。调用基类构造函数,初始化继承来的成员。单继承构造函数形式单继承构造函数形式单继承构造函数形式单继承构造函数形式派生类名派生类名派生类名派生类名: :派生类名派生类名派生类名派生类名( (形参形参形参形参): ):基类名基类名基类名基类名( (参数表参数表参数表参数表) ) 本类成员初始化赋值语句;本类成员初始化赋值语句;本类成员初始化赋值语句;本类成员初始化赋值语句; ; 形参表:形参表:形参表:形参表: 基类所需的形参,基类所需的形参,基类所需的形参

11、,基类所需的形参, 本类成员所需的形参本类成员所需的形参本类成员所需的形参本类成员所需的形参哈尔滨工程大学课件派生类的构造函数派生类的构造函数class Bclass B public: public: B() b=0; B() b=0; B(int i) b=i; B(int i) b=i; B() B() cout“exit b”; cout“exit b”; void Print() const void Print() const coutbendl; coutbendl; private: private: int b; int b; ;class C:public Bclass C

12、:public B public: public: C(); C(); C(int i,int j); C(int i,int j); C(); C(); void Print() const; void Print() const; private: private: int c; int c; ; ;C:C()C:C() c=0; c=0;C:C(int i,int j):B(i)C:C(int i,int j):B(i) c=j; c=j;C:C()C:C() cout“exit c”; cout“exit c”; void C:Print()void C:Print() B:Print

13、(); B:Print(); coutcendl; coutcendl; 哈尔滨工程大学课件派生类的构造函数派生类的构造函数多继承时的构造函数多继承时的构造函数多继承时的构造函数多继承时的构造函数派生类名派生类名派生类名派生类名: :派生类名派生类名派生类名派生类名( (基类基类基类基类1 1形参,基类形参,基类形参,基类形参,基类2 2形参,形参,形参,形参,.基基基基类类类类n n形参,形参,形参,形参,本类形参本类形参本类形参本类形参): ):基类名基类名基类名基类名1(1(参数参数参数参数), ), 基类名基类名基类名基类名2(2(参参参参数数数数), .), .基类名基类名基类名基类

14、名n(n(参数参数参数参数) ) 本类成员初始化赋值语句;本类成员初始化赋值语句;本类成员初始化赋值语句;本类成员初始化赋值语句; ;哈尔滨工程大学课件派生类的构造函数派生类的构造函数#include #include class B1class B1 public:public:B1(int i) cout“B1 iendl;B1(int i) cout“B1 iendl;class B2class B2public:public:B2(int j) coutB2 jendl;B2(int j) coutB2 jendl;class B3class B3public:public:B3( )

15、 cout“B3 *endl;B3( ) cout“B3 *endl;哈尔滨工程大学课件派生类的构造函数派生类的构造函数class C: class C: public B2, public B1, public B3 public B2, public B1, public B3 public:public:C(int a,int b,int c,int d,int x,int z): C(int a,int b,int c,int d,int x,int z): B1(a),B2(b),m(x),k(z) B1(a),B2(b),m(x),k(z) x=c; y=d; x=c; y=d;

16、cout“C x yendl; cout“C x yendl; private: private:int x,t,y;int x,t,y;B1 m; B3 n; B2 k;B1 m; B3 n; B2 k; ;void main()void main() C obj(1,2,3,4,5,6); C obj(1,2,3,4,5,6); 哈尔滨工程大学课件派生类的构造函数派生类的构造函数构造函数的调用次序构造函数的调用次序1. 1. 调用基类构造函数,调用顺序按照它们调用基类构造函数,调用顺序按照它们调用基类构造函数,调用顺序按照它们调用基类构造函数,调用顺序按照它们被继承被继承被继承被继承时时时

17、时声明的顺序(从左向右)。声明的顺序(从左向右)。声明的顺序(从左向右)。声明的顺序(从左向右)。2. 2. 调用成员对象的构造函数,调用顺序按照它们在调用成员对象的构造函数,调用顺序按照它们在调用成员对象的构造函数,调用顺序按照它们在调用成员对象的构造函数,调用顺序按照它们在类中类中类中类中声明的顺序声明的顺序声明的顺序声明的顺序。3. 3. 派生类的构造函数体中的内容。派生类的构造函数体中的内容。派生类的构造函数体中的内容。派生类的构造函数体中的内容。哈尔滨工程大学课件派生类的拷贝构造函数派生类的拷贝构造函数1. 无拷贝构造函数无拷贝构造函数 编译器将自动调用基类的缺省拷贝构造函数。编译器

18、将自动调用基类的缺省拷贝构造函数。2. 有拷贝构造函数有拷贝构造函数 需要为基类相应的拷贝构造函数传递参数。需要为基类相应的拷贝构造函数传递参数。 例如例如: C:C(C &c1):B(c1)C:C(C &c1):B(c1) 哈尔滨工程大学课件派生类的析构造函数派生类的析构造函数#include #include class B1class B1 public: public:B1(int i) coutc B1 iendl;B1(int i) coutc B1 iendl;B1() coutd B1 endl;B1() coutd B1 endl; ;class B2class B2publ

19、ic:public:B2(int j) coutc B2 jendl;B2(int j) coutc B2 jendl;B2() coutd B2 endl;B2() coutd B2 endl; ;class B3class B3public:public:B3()coutcg B3 *endl;B3()coutcg B3 *endl;B3() coutd B3 endl;B3() coutd B3 endl; ;哈尔滨工程大学课件派生类的析构造函数派生类的析构造函数class C: public B2, public B1, public B3class C: public B2, public B1, public B3public:public: C(int a, int b, int c, int d): B1(a),mB2(d),mB1(c),B2(b)C(int a, int b, int c, int d): B1(a),mB2(d),mB1(c),B2(b) private:private:B1 mB1;B1 mB1;B2 mB2;B2 mB2;B3 mB3;B3 mB3; ;void main()void main() C obj(1,2,3,4); C obj(1,2,3,4); 哈尔滨工程大学课件哈尔滨工程大学课件

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号