C++面向对象程序设计(杜茂康 第4版)-课件 第4、5章 继承、多态.pptx

C++面向对象程序设计(杜茂康 第4版)-课件 第4、5章 继承、多态.pptx

  1. 1、本文档共226页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第4章继承;1.继承的概念

以现有的类为基础定义新的类,新类即捅有基类的数据成员和成员函数的一份复制品,这就是继承。;2、继承目的

代码重用coderesue

描述能力:类属关系广泛存在

IsAvs.HasA

3、有关概念

基类,超类

派生类,子类;4、派生类可实施的对基类的改变

增加新的数据成员和成员函数。

重载基类的成员函数。

重定义(覆盖)基类已有的成员函数。

改变基类成员在派生类中的访问属性。

5、派生类不能继承基类的以下内容

基类的构造函数C++11之后可以继承

析构函数。

基类的友元函数。

静态数据成员和静态成员函数;基类中protected的成员

类内部:可以访问

类的使用者:不能访问

类的派生类成员:可以访问

【例4-1】类B有数据成员i,j,k,希望j可被派生类D和自身访问,但不希望除此之外的其它函数访问。

分析:protected权限正好具有这样的访问控制能力

;classB

{ private:inti;

protected:intj;

public:intk;

};

classD:publicB

{public:

voidf()

{ i=1;//cannotaccess

j=2; k=3; }

};

voidmain()

{ Bb;

b.i=1;//cannotaccess

b.j=2;//cannotaccess

b.k=3;

};4.3.继承方式;1、public继承

最常用的派生方式,派生类复制了基类数据成员和成员函数的一份复制品。

派生类从基类继承到的成员,维持基类成员的可访问性。即基类的public成员在派生类中也是public成员,可被派生类的外部函数访问。

同样,一个成员若在基类是protected或private属性,它在派生类中仍然是protected或private属性

在任何情况下,类的private成员只能被自身类的成没访问。因此,派生类不可直接访问基类的private成员

;例题4_2.cpp,派生类Derived继承了基类Base的数据成员x和全部成员函数;voidmain()

{ Derivedobj;

obj.setx(10);

coutobj.getx();;

obj.showy();

obj.sety();

obj.sety(20);

obj.showy();

obj.showy();

};2.Private

基类的中的public、protected成员在派生类private,private成员在派生类中不可访问。

【例】私有继承的例子

#includeiostream

usingnamespacestd;

classBase{

intx;

public:

voidsetx(intn){x=n;}

intgetx(){returnx;}

voidshowx(){coutxendl;}

};;2、Private继承

classDerived:privateBase{

……

}

在private派生方式下,派生复制了基类全部成员,但复制到的成员在派生类中全部变成了private成员。

在private派生方式下,虽然基类的public和protected成员在派生类中都变成了private成员,但它们仍然有区别:派生类的成员函数不能直接访问基类的private成员,但可以直接访问基类的public和protected成员,并且通过它们访问基类本身的private成员。;;3、protected继承

classDerived:protectedBase{

……

}

在protected派生方式下,派生复制了基类全部成员,但复制到public成员在派生类中变成了protected成员,其余成员的访问权限保持不变。

在派生方式下,派生类的继承到的成员函数都不能被外部函数访问,但在派生类中可以直接访问基类的public和protected成员,并且通过它们访问基类本身的private成员。;classDerived:protectedBase{

inty;

public:

voidsety(intn){y=n;}

voidsety(){y=getx();}//访问基类的保护成员

voidshowy(){coutyendl;}

};

voidmain(){

Derivedobj;

obj.setx(10);//错误

obj.showx(); /

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档