第四章派生类与继承课件2.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第四章派生类与继承课件2.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 派生 继承 课件
- 资源描述:
-
1、第四章 派生类与继承(2)表表4.1(1)基类中的私有成员基类中的私有成员 无论何种继承方式无论何种继承方式,派生类均不可直接访问派生类均不可直接访问(2)基类中的共有成员基类中的共有成员 根据继承方式而改变根据继承方式而改变(3)基类中的保护成员基类中的保护成员共有共有/保护保护 继承时不变继承时不变,私有继承时私有继承时 改变改变 4.1.3 4.1.3 基类成员在派生类中的访问属性基类成员在派生类中的访问属性4.1.4 4.1.4 派生类对基类成员的访问规则派生类对基类成员的访问规则访问形式:内部访问内部访问 由派生类新增成员对基类继承来的成员进行访问.对象访问对象访问 在派生类外部,通
2、过派生类对象对基类继承来的成员进行访问.1.私有继承的访问规则 基类的基类的 public 和和 protected 成员被继承成员被继承后后,变成派生类的私有成员变成派生类的私有成员.派生类其他成员可直接访问派生类其他成员可直接访问(内部可访问内部可访问)外部通过派生类对象无法访问外部通过派生类对象无法访问例:4.1private:X public:setx(int x)showx()private:Y public:setxy(int n,int m)showxy()base derive私有派生私有派生void showxy()cout x;cout yendl;例例4.24.2prot
3、ected:a public:seta(int sa)showa()protected:b public:seta(int sa,int sb)showab()protected:c public:seta(int sa,int sb,int sc)showabc()base derive1 derive2私有派生私有派生私有派生私有派生1.私有继承的访问规则 表 4.2 内部可访问基类的public和protected成员 外部对象对基类成员均不能访问。2.公有继承的访问规则 公有继承基类所有成员 (不变)内部可访问:基类的public 和 protected 外部可访问:基类的public
4、 基类的private 内外都不能直接访问;例 4.3private:xprotected:y public:setxy()showxy()private:z public:setxyz()showxyz()base derive公有派生公有派生void setxyz(int m,int n,int j)setxy(m,n);Z=j;void showxyz()cout xendl;cout yendl;cout zendl;2.公有继承的访问规则 表4.3 内部可访问基类的public和protected成员 外部对象可访问:基类的public 基类的private 内外都不能直接访问;3.
5、保护继承的访问规则 基类的public和protected成员,通过保护继承作为派生类中的protected成员 基类的private成员(不变),派生类无论内部还是外部均不可直接访问。例 4.4 private:xprotected:y public:zsetx()getx()base derive保护继承保护继承private:mprotected:npublic:psetall()show()void setall(.)x=a;/setx(a);y=b;z=c;.3.保护继承的访问规则 表4.4 内部可访问:基类的public和protected成员 外部对象均不可直接访问基类成员。4.
6、2 4.2 派生类的构造函数和析构函数派生类的构造函数和析构函数基类都有显式或隐式的构造函数和析构函数基类都有显式或隐式的构造函数和析构函数 当创建一个派生类对象时,如何调用基类的当创建一个派生类对象时,如何调用基类的构造函数对基类数据初始化,以及在撤消派构造函数对基类数据初始化,以及在撤消派生类对象时,又如何调用基类的析构函数来生类对象时,又如何调用基类的析构函数来对基类对象的数据成员进行善后处理?对基类对象的数据成员进行善后处理?4.2.1 4.2.1 派生类构造函数和析构函数的执行顺序派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时通常情况下,当创建派生类对象时:当撤消
7、派生类对象时,顺序相反当撤消派生类对象时,顺序相反执行基类的构造函数执行基类的构造函数执行派生类的构造函数执行派生类的构造函数执行派生类的析构函数执行派生类的析构函数执行基类的析构函数执行基类的析构函数4.2.2 4.2.2 派生类构造函数和析构函数的构造规则派生类构造函数和析构函数的构造规则 当基类的构造函数没有参数,或没有显式定义构造当基类的构造函数没有参数,或没有显式定义构造函数时,派生类可以不向基类传递参数,甚至可以不函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数。例定义构造函数。例4.54.5的程序就是由于基类的构造函的程序就是由于基类的构造函数没有参数,所以派生类没有向
8、基类传递参数。数没有参数,所以派生类没有向基类传递参数。派生类派生类不能不能继承基类中的构造函数和析构函数继承基类中的构造函数和析构函数。当。当基类合有带参数的构造函数时,派生类必须定义构造基类合有带参数的构造函数时,派生类必须定义构造函数以提供把参数传递给基类构造函数的途径。函数以提供把参数传递给基类构造函数的途径。在在C+C+中,派生类构造函数的一般格式为:中,派生类构造函数的一般格式为:派生类构造函数名派生类构造函数名(参数表参数表):基类构造函数名:基类构造函数名(参数表参数表)当派生类中含有对象成员时当派生类中含有对象成员时,构造函数的一般形式:构造函数的一般形式:派生类构造函数名派
9、生类构造函数名(参数表参数表):基类构造函数名:基类构造函数名(参参数表数表)、对象成员名、对象成员名1(1(参数表参数表),、对象成员名、对象成员名n(n(参数表参数表)在定义派生类对象时,构造函数的执行顺序:在定义派生类对象时,构造函数的执行顺序:1.1.基类的构造函数基类的构造函数2.2.对象成员的构造函数对象成员的构造函数3.3.派生类的构造函数派生类的构造函数撤消对象时,析构函数的调用顺序与构造函数的调用撤消对象时,析构函数的调用顺序与构造函数的调用顺序正好相反。顺序正好相反。(1)(1)当基类构造函数不带参数时,派生类不一定当基类构造函数不带参数时,派生类不一定需要定义构造函数,然
10、而当基类的构造函数那需要定义构造函数,然而当基类的构造函数那怕只带有一个参数,它所有的派生类都必须定怕只带有一个参数,它所有的派生类都必须定义构造函数,甚至所定义的派生类构造函数的义构造函数,甚至所定义的派生类构造函数的函数体可能为空,仅仅起参数的传递作用。函数体可能为空,仅仅起参数的传递作用。derived(int derived(int n n):base():base(n n)j=0;j=0;说明说明说明说明(2)(2)若基类使用缺省构造函数或不带参数的构若基类使用缺省构造函数或不带参数的构造函数,则在派生类中定义构造函数时可造函数,则在派生类中定义构造函数时可略去略去“:基类构造函数名
展开阅读全文