




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对继承的讨论1. 继承的形式和继承的原理class 派生类名:继承方式 基类名 成员声明;上面是继承的形式。当继承发生后,可以认为派生类拥有了基类的成员。例:class Apublic:int i;void show()coutiendl;class B: public Apublic:int m;void print()coutmendliendl;void main()B b; b.m; b.i; b.show(); b.print();这个例子就是继承的写法。其中类A是类B的父类,类B是类A的子类。可以认为类B拥有了类A的所有,也就是B中拥有了来自A的i和void show()函数。b.m; b.i; b.show(); b.print();都是对的。因为b是B类型的对象,所以b拥有了A和B的所有成员。2. 关于继承方式(上面的红字部分)继承方式有三种,分别是public,private,protected。我们认为private为最严格的限制级别,认为protected为中等的限制级别,认为public为宽松的限制。当继承发生时,我们可以认为父类的成员(无论成员函数还是数据成员)会迁移一份到子类。父类的成员也拥有访问的级别,这些级别也是由public,private,protected来说明的。如果继承,则父类中的成员迁移至子类。父类成员迁移至子类成员时,访问级别以父类和继承方式中更严的为准。 派生类对基类成员的使用,与继承访问控制和基类中成员性质有关 公有继承基类的公有成员派生类的公有成员 基类的保护成员派生类的保护成员 私有继承 基类的公有成员和保护成员派生类的私有成员 保护继承 基类的公有成员和保护成员派生类的保护成员公有继承class Aprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()cout” public”endl;class B: public Apublic:int i;void function();void main()B b;此时,类B拥有了类A的所有成员。并且这些成员在A中是什么形式,迁移到B中还是什么形式。也就是继承完之后B看上去就是如下的样子:class Bprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()cout” public”endl;public:int i;void function();红色的成员可以视为B的成员,但这些成员来自于A的成员迁移。蓝色的代表迁移过程中访问性质变化。其中,一定要注意,B的对象b只能访问public下的成员,通过public下的成员函数可以访问protected下的成员,? .但是,来自A的private成员必须用来自A的成员函数来访问。也就是function可以激活除去m和print_private()的剩下的所有内容,因为m和print_private()是A(也就是父类)的私有的成员。保护继承class Aprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()cout” public”endl;class B: protected Apublic:int i;void function();void main()B b;此时,类B拥有了类A的所有成员。A成员迁移至B后,从前的限制级别比访问级别严格的或者相等的则不变,访问级别限制比protected宽松的则变为protected。也就是继承完之后B看上去就是如下的样子:class Bprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;protected:int q;void print_ public ()cout” public”endl;public:int i;void function();红色的成员可以视为B的成员,但这些成员来自于A的成员迁移。蓝色的代表迁移过程中访问性质变化。其中,一定要注意,B的对象b只能访问public下的成员,通过public下的成员函数可以访问protected下的成员,但是,来自A的private成员必须用来自A的成员函数来访问。也就是function可以激活除去m和print_private()的剩下的所有内容,因为m和print_private()是A(也就是父类)的私有的成员。私有继承class Aprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()cout” public”endl;class B: private Apublic:int i;void function();void main()B b;此时,类B拥有了类A的所有成员。A成员迁移至B后,从前的限制级别比访问级别严格的或者相等的则不变,访问级别限制比private宽松的则变为private。也就是继承完之后B看上去就是如下的样子:class Bprivate:int m;void print_private()cout”private”endl;private:int n;void print_ protected ()cout” protected”endl;private:int q;void print_ public ()cout” public”endl;public:int i;void function();红色的成员可以视为B的成员,但这些成员来自于A的成员迁移。蓝色的代表迁移过程中访问性质变化。其中,一定要注意,B的对象b只能访问public下的成员,通过public下的成员函数可以访问protected下的成员,但是,来自A的private成员必须用来自A的成员函数来访问。也就是function可以激活除去m和print_private()的剩下的所有内容,因为m和print_private()是A(也就是父类)的私有的成员。3. 关于多层继承class Aprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()cout” public”endl;class B: private Apublic:int i;void function();class C: protected Bpublic:int k;void c_fun();多层继承只考虑相邻层。从上到下依次完成迁移过程。例如上例。继承完毕之后C如下:class Cprivate:int m;void print_private()cout”private”endl;private:int n;void print_ protected ()cout” protected”endl;private:int q;void print_ public ()cout” public”endl;protected:int i;void function()public:int k;void c_fun();红色的成员和绿色的成员可以视为B的成员。蓝色的代表迁移过程中访问性质变化。其中,一定要注意,C的对象c只能访问public下的成员,通过public下的成员函数可以访问protected下的成员,但是,追根述源来自A本身的private成员必须用来自A的成员函数来访问。追根述源来自B本身的private成员必须用来自B的成员函数来访问。也就是c_fun可以激活除去红色部分的剩下的所有内容(即c_fun可以激活function()函数),function()函数可以激活print_ public ()和print_ protected (),print_ public ()和print_ protected ()又可以激活print_private()。以后要注意一个问题:视为或者说拥有在继承中和访问是两回事。4. 关于多继承当一个子类继承多个父类时,相当于把父类一个一个的迁移至子类。这与多层继承是不同的。只存在一层继承。class Aprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()cout” public”endl;class B:public:int i;void function();class C: public A,protected Bpublic:int k;void c_fun();C可以看做class Cprivate:int m;void print_private()cout”private”endl;protected:int n;void print_ protected ()cout” protected”endl;public:int q;void print_ public ()c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兴业银行福州市晋安区2025秋招笔试英语题专练及答案
- 招商银行襄阳市樊城区2025秋招群面案例总结模板
- 民生银行西宁市城中区2025秋招笔试综合模拟题库及答案
- 吊装安全知识培训
- 兴业银行北京市海淀区2025秋招无领导模拟题角色攻略
- 光大银行兰州市西固区2025秋招英文面试题库及高分回答
- 广发银行武汉市江夏区2025秋招信息科技岗笔试题及答案
- 2024-2025学年度公务员考试《常识》每日一练试卷【A卷】附答案详解
- 中信银行金华市义乌市2025秋招结构化面试经典题及参考答案
- 2024自考专业(汉语言文学)自我提分评估带答案详解(预热题)
- 宠物医院建设方案(3篇)
- 2025年中学生法治素养竞赛题库及答案
- 《“高效办成一件事”2025年度第二批重点事项清单》知识解读
- 2025年飞行器设计与工程师考试试卷及答案
- 2025年三级律师试题题库及答案
- 智能化系统施工方案及技术措施
- 收费员考试题库及答案
- 计算机视觉技术 课件全套 第1-5章 计算机视觉概述-图像噪声
- 智能课件自动生成技术解析
- 2025至2030全球及中国汽车外饰件行业项目调研及市场前景预测评估报告
- 酒店运营管理权委托合同
评论
0/150
提交评论