- 1、本文档共226页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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(); /
您可能关注的文档
- C++面向对象程序设计(杜茂康 第4版)-课件 第1--3章 C++与面向对象程序设计、 C++程序设计基础、类和对象.pptx
- C++面向对象程序设计(杜茂康 第4版)-课件 第6--8章 运算符重载、模板和STL、异常.pptx
- C++面向对象程序设计(杜茂康 第4版)-课件 第9、10章 线程、流和文件.pptx
- C++面向对象程序设计(杜茂康 第4版)-课件全套 第1--10章 C++与面向对象程序设计---流和文件.pptx
- 嵌入式系统导论(钱晓捷 第2版) 课件 第1--5章 嵌入式系统设计基础---STM32的GPIO.ppt
- 嵌入式系统导论(钱晓捷 第2版) 课件 第6--10章 CM3异常和STM32中断---STM32的模拟接口.ppt
- C++面向对象程序设计(杜茂康 第4版)-课件 第4--10章 继承---流和文件.pptx
- 保险营销理论与实务 ( 周灿 第二版)课件 03分析保险市场需求、04制定保险营销战略.ppt
- 保险营销理论与实务 (周灿 第二版)课件 01认识保险营销、02开展保险营销调研.ppt
- 保险营销理论与实务 (周灿 第二版)课件 05拟定保险产品策略、06制定保险产品定价策略.ppt
文档评论(0)