




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8讲 继承与派生在C+中所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类(base class)”或“父类(father class)”。新建立的类称为“派生类(derived class)”或“子类(son class)”。1.类的继承与派生派生类是在基类的基础上产生的特殊类,派生类自动继承了基类的成员。派生类具有自身的属性和行为,不然就完全等同于基类,这样就没有必要派生新类。继承是为了避免代码的重复继承是为了避免代码的重复派生是为了使新产生的派生类除具有基类的共性之外,还具有其他个性。设计两个类,一个类描述点,另一个类描述圆。圆由圆心和半径构成,圆类由点类派生而来,其中圆心的特性由点类继承下来。#include iostream.h描述点的类的设计:数据成员点的坐标值(x,y)成员函数根据需要定义。如构造函数、取值函数、设值函数class Pointint m_x,m_y;public:Point(int x,int y)m_x=x;m_y=y;int get_x()return m_x;int get_y()return m_y;Public继承公有继承公有继承class Circle:public Pointdouble radius;public:Circle(int x,int y,double r):Point(x,y)描述圆的类的设计:数据成员圆心(点)、半径成员函数计算周长、面积等radius=r;double Area(void)return 3.14*radius*radius;int get_centreX()return get_x();int get_centreY()return get_y();void main()int x,y;double r;coutx;couty;coutr;Circle c(x,y,r);coutthe centre of the Circle is the point(c.get_centreX(),c.get_centreY()endl;coutthe Area of the Circle is c.Area()display();/对象指针-成员名int main() Base1 base1; /声明Base1类对象 Base2 base2; /声明Base2类对象 Derived derived; /声明Derived类对象 fun(&base1); /用Base1对象的指针调用fun函数 fun(&base2) ; /用Base2对象的指针调用fun函数 fun(&derived); /用Derivedx对象的指针调用fun函数fun(&derived); return 0;class Base1 /基类Base1定义public: void display() const cout Base1:display() endl;class Base2: public Base1/公有派生类Base2定义 public: void display() const cout Base2:display() endl;class Derived: public Base2/公有派生类Derived定义 public: void display() const cout Derived:display() endl;pb1=&d1;用派生类对象中从基类继承来的成员,逐个赋值给基类对象的成员。B &rb=d1;用派生类对象中从基类继承来的成员,逐个赋值给基类对象的成员。b1=d1;用派生类对象中从基类继承来的成员,逐个赋值给基类对象的成员。 情况1:派生类对象可以赋值给基类对象class Bclass D:public BB b1,*pb1;D d1; 情况2:派生类对象可初始化基类对象的引用class Bclass D:public BB b1,*pb1;D d1; 情况3:派生类对象的地址可隐含转换为指向基类的指针 class Bclass D:public BB b1,*pb1;D d1;4 派生类的构造函数与析构函数派生类构造函数的格式:派生类名:派生类名 (总参数表):基类名(参数表1),对象成员名(参数表2) 派生类新增成员的初始化; #include using namespace std;class Base1 /基类Base1,构造函数有参数public:Base1(int i) cout Constructing Base1 i endl; ;class Base2 /基类Base2,构造函数有参数public:Base2(int j) cout Constructing Base2 j endl; ;class Base3 /基类Base3,构造函数无参数public:Base3() cout Constructing Base3 * endl; ;class Derived: public Base2, public Base1, public Base3 /派生新类Derived,注意基类名的顺序public:/派生类的公有成员Derived(int a, int b, int c, int d): Base1(a), member2(d), member1(c), Base2(b) coutDerived Constructingendl;/注意基类名的个数与顺序,/注意成员对象名的个数与顺序private:/派生类的私有成员对象Base1 member1;Base2 member2;Base3 member3;int main() Derived obj(1, 2, 3, 4);return 0; 派生类构造函数的执行顺序: 1调用基类构造函数。调用顺序按照它们被继承时声明的顺序(从左向右)2对象成员类初始化。初始化顺序按照它们在类中声明的顺序3执行派生类构造函数4.3 派生类的析构函数#include using namespace std;class Base1 /基类Base1,构造函数有参数public:Base1(int i) cout Constructing Base1 i endl; Base1() cout Destructing Base1 endl; ;class Base2 /基类Base2,构造函数有参数public:Base2(int j) cout Constructing Base2 j endl; Base2() cout Destructing Base2 endl; ;class Base3 /基类Base3,构造函数无参数public:Base3() cout Constructing Base3 * endl; Base3() cout Destructing Base3 endl; ;class Derived: public Base2, public Base1, public Base3 /派生新类Derived,注意基类名的顺序public:/派生类的公有成员Derived(int a, int b, int c, int d): Base1(a), member2(d), member1(c), Base2(b) /注意基类名的个数与顺序,注意成员对象名的个数与顺序private:/派生类的私有成员对象Base1 member1;Base2 member2;Base3 member3;int main() Derived obj(1, 2, 3, 4);return 0;5.2 作用域分辨符(:)作用域分辨:,用来限定要访问的成员所在的类的名称。类名:成员名类名:成员名(参数)派生类新增成员隐藏了基类的同名成员,这时使用“对象名.成员名”的访问方式,就只能访问到派生类新增的成员。对基类同名成员的访问,只能通过基类名和作用域分辨符来实现。#include using namespace std;class Base1 /定义基类Base1public:int var;void fun() cout Member of Base1 endl; ;class Base2 /定义基类Base2public:int var;void fun() cout Member of Base2 endl; ;class Derived: public Base1, public Base2 /定义派生类Derivedpublic:int var;/同名数据成员void fun() cout Member o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肾脏内科护理专业培养体系
- 2025年事业单位工勤技能-湖南-湖南客房服务员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖南-湖南农机驾驶维修工三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖北-湖北放射技术员二级(技师)历年参考题库含答案解析
- 高速公路智能交通系统2025年智能交通法规与标准研究
- 2025年数字人民币跨境支付技术挑战与金融创新解决方案全解
- 建筑信息模型(BIM)在2025年建筑工程项目施工质量保证体系构建应用研究报告
- 2025年事业单位工勤技能-浙江-浙江水工监测工四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河南-河南堤灌维护工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-河北-河北农机驾驶维修工五级(初级工)历年参考题库含答案解析(5套)
- 2025年公平竞争审查知识竞赛考试练习题库(正式版)含答案
- 2025年重庆市中考英语试卷真题(含标准答案及解析)
- 2025年时事政治考试题及参考答案(100题)
- 2023综合基础知识题库及解析(500题)
- 生活区、办公区安全检查表
- 国际反洗钱师cams考试真题中文版题库汇总(含答案)
- 2023新教材高中数学第5章三角函数微专题5三角函数中的最值问题课件新人教A版必修第一册
- 入厂新员工安全知识培训考试题及答案
- 水厂原水水质污染处置应急预案
- 仲夏夜之梦英文话剧剧本
- 下消化道常见疾病诊断
评论
0/150
提交评论