《C++程序设计基础》-陆勤-电子教案 第十章 继承与派生类

上传人:E**** 文档编号:89399463 上传时间:2019-05-24 格式:PPT 页数:33 大小:88.50KB
返回 下载 相关 举报
《C++程序设计基础》-陆勤-电子教案 第十章  继承与派生类_第1页
第1页 / 共33页
《C++程序设计基础》-陆勤-电子教案 第十章  继承与派生类_第2页
第2页 / 共33页
《C++程序设计基础》-陆勤-电子教案 第十章  继承与派生类_第3页
第3页 / 共33页
《C++程序设计基础》-陆勤-电子教案 第十章  继承与派生类_第4页
第4页 / 共33页
《C++程序设计基础》-陆勤-电子教案 第十章  继承与派生类_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《《C++程序设计基础》-陆勤-电子教案 第十章 继承与派生类》由会员分享,可在线阅读,更多相关《《C++程序设计基础》-陆勤-电子教案 第十章 继承与派生类(33页珍藏版)》请在金锄头文库上搜索。

1、1,第十章 继承与派生类,2,类的派生机制就是类的继承:即可以通过一个已定义的类派生一个新类,新类由原有类继承而来。 派生类既可继承其基类的所有数据属性与行为特性,同时还可加入属于它自己独有的特性。 若一个派生类仅有一个基类,则称为单继承。单继承可以构造树的层次结构。,3,多继承的派生类:即可定义拥有多个基类的派生类。多继承则可构造图的层次结构。 类的继承机制有助于利用原有程序扩充新的功能,以适应新的需求,从而大大提高软件可重用性和软件设计的效率。,4,10.1 派生类 10.1.1 公有继承派生类 定义公有继承派生类的常用形式为: class 基类名 public: 公有成员 private

2、: 私有成员 ; class 派生类名:public 基类名 public: 公有成员 private: 私有成员;,5,公有继承( public ) 基类中所有公有成员包括数据成员和成员函数,在派生类中也是公有的。 基类中所有公有成员可被派生类的其他成员直接访问。外界则可通过派生类的对象访问从基类继承来的公有成员。 基类的私有成员继续保持其私有的特性,无论派生类的其他成员或是派生类的对象,均不能直接访问其基类的私有成员。,6,例1 程序演示了公有继承派生类的定义以及派生类对象的访问控制属性。 #include using namespace std; class bcn public: vo

3、id seti(int ii) i=ii; int geti( ) return(i); void printi( ) cout”i=”iendl; private: int i; class dcn:public bcn public: void setj(int jj) j=jj; ,7,int getj( ) return(j); void printj( ) cout”j=”jendl; private:int j; void main( ) bcn bco; dcn dco; cout”Using base class object bco:”endl; bco.seti(0); b

4、co.printi( ); cout”Also i=”bco.geti( )endl; cout”Using derived class object dco:”endl; dco.seti(10);dco.printi( ); cout”Also i=”dco.geti( )endl; dco.setj(20);dco.printj( ); cout”Also j=”dco.getj( )endl;,8,运行示例 Using base class object bco: i=0 Also i=0 Using derived class object dco: i=10 Also i=10 j

5、=20 Also j=20,9,10.1.2 私有继承派生类 定义私有继承派生类的常用形式为: class 基类名 public: 公有成员 private: 私有成员; class 派生类名:private 基类名 public: 公有成员 private: 私有成员;,10,私有继承( private ) 基类中所有公有成员在派生类中其成员访问控制属性均变成私有,而基类中的私有成员在派生类中将不可访问(或称不可见)。 例2 程序演示了私有继承派生类的定义以及派生类对象访问控制属性与公有继承派生类相比的区别。,11,#include using namespace std; class bc

6、n public: void seti(int ii) i=ii; int geti( ) return(i); void printi( ) cout”i=”iendl; private:int i; class dcn:private bcn public: void setj(int jj) j=jj; int getj( ) return(j); void printj( ) cout”j=”jendl; private:int j;,12,void main( ) bcn bco;dcn dco; cout”Using base class object bco:”endl; bco

7、.seti(0); bco.printi( ); cout”Also i=”bco.geti( )endl; cout”Using derived class object dco:”endl; / dco.seti(10); / dco.printi( ); / cout”Also i=”dco.geti( )endl; dco.setj(20); dco.printj( ); cout”Also j=”dco.getj( )endl;,13,运行示例 Using base class object bco: i=0 Also i=0 Using derived class object d

8、co: j=20 Also j=20 在派生类定义中当不指明继承方式时,将默认缺省的继承方式为private。 对于私有继承来说,实际上堵住了继续往下继承的链路,基类公有成员仅可由直接派生类进行访问。,14,10.3 派生类与基类中同名成员的处理同名覆盖 同名覆盖:如果在派生类定义中新增添的成员与从基类中继承过来的成员同名,则新成员将隐藏继承来的成员。即 派生类对象名.成员名 派生类名:成员名 如果基类中的同名成员是一个公有成员,则用 派生类对象名.基类名:成员名 可访问到基类的同名成员。,15,例4 程序演示了派生类与基类中同名成员的处理。 #include using namespace

9、std; class bcn public: void seti(int ii) i=ii; int geti( ) return(i); void print( ) cout”i=”iendl; private: int i; ;,16,class dcn:public bcn public: void setj(int jj) j=jj; int getj( ) return(j); void print( ) cout”j=”jendl; private: int j; ; void main( ) bcn bco;dcn dco; cout”Using base class objec

10、t bco:”endl; bco.seti(0);,17,bco.print( ); cout”Also i=”bco.geti( )endl; cout”Using derived class object dco:”endl; dco.seti(10); / dco.print( );/访问不到基类 dco.bcn:print( );/基类 cout”Also i=”dco.geti( )endl; dco.setj(20); dco.print( );/访问派生类 cout”Also j=”dco.getj( )endl; ,18,运行示例 Using base class object

11、 bco: i=0 Also i=0 Using derived class object dco: i=10 Also i=10 j=20 Also j=20,19,将 改写为 运行经修改的程序,可得如下输出结果 Using base class object bco: i=0 Also i=0 Using derived class object dco: j=-858993460 Also i=10 j=20 Also j=20,dco.print( );/派生类 / dco.bcn:print( );,/ dco.print( ); dco.bcn:print( );,20,10.5

12、类的保护成员 类定义一般形式 class 类名 public: 公有成员 protected: 保护成员 private: 私有成员 ;,21,在没有类继承的情况下: 类的保护成员和私有成员的性质相类似,它们仅在该类中为可见。 类的对象可以直接访问该类的公有成员,但却不能直接访问该类的保护成员和私有成员,而是需通过调用该类的公有成员函数间接地访问它们。,22,在类的公有继承方式下: 对于公有继承派生类,基类中的公有成员对于其派生类仍然是公有的,因此,派生类的对象可对基类的公有成员任意存取。 基类中的保护成员在派生类中仍是保护的,从而它可被派生类的成员函数存取,即基类中的保护成员在派生类中是可见

13、的。 基类中的私有成员仅为基类所私有,它对派生类的成员函数而言是不可见的,故它不能被派生类中的成员函数存取。,23,例7 程序演示了基类的保护成员和私有成员在被该基类的派生类继承时所具有的不同性质。 #include using namespace std; class one public: void print1( ); protected: int j; private: int i;,24,class two:public one public: void print2( ); private: int k; void one:print1( ) i=10;j=20; cout”i=”

14、i”,j=”jendl; void two:print2( ) / i=10; cout”i=”iendl;/私有 j=20; k=30; cout”j=”j”,k=”kendl; ,25,void main( ) one co1;two co2; co1.print1( ); co2.print2( ); / co1.i=10; /私有 / co1.j=20; /保护 / cout”i=”co1.i”,j=”co1.jendl; 运行示例 i=10,j=20 j=20,k=30,26,10.6 继承机制下类的构造函数和析构函数 10.6.1 继承机制下类的构造函数 在继承机制下,派生类不继承

15、基类的构造函数和析构函数。 派生类的对象在创建时,自动调用派生类的构造函数:1)先调用其基类的构造函数,用来对派生类对象中的基类部分进行初始化, 2)再执行派生类构造函数中指定的操作,以对派生类中新增添的成员进行必要的初始化。,27,例11 程序演示了在基类中包含一个缺省构造函数,而在派生类中不包含任何构造函数时创建派生类对象的执行情形。 #include using namespace std; class bcn public: bcn( ) seti(0); void seti(int ii) i=ii; int geti( ) return(i); void printi( ) cout”i=”iendl; private:int i;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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