




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、多重继承多重继承一个派生类可以有多个基类派生类同时继承多个基类的成员,更好的软件重用多重继承时派生类构造时, 基类构造函数的调用顺序与派生类声明的继承顺序相同, 而与成员初始化序列的顺序无关. 而析构函数的调用顺序和构造函数的调用顺序相反. 例、class C:public A,public B ;多重继承可能会有大量的二义性,多个基类中可能包含同名变量或函数,而且出现基类中的一个数据被拷贝多份现象,既占用内存单元,在访问这些成员时也容易出错。多重继承B(int data)A(int data)C(int data)Dvoid show()coutdata;多重继承多重继承中解决访问歧义的方法
2、(1)明确指明要访问定义于哪个基类中的成员基类名 : 数据成员名(或成员函数(参数表)) (2)采用虚拟继承的方法-即虚基类虚拟继承-虚基类的初始化 类成员的初始化可以通过创建类对象时调用它的构造函数来完成,还可以由它的派生类调用它的构造函数来完成。 思考:一个虚基类可能有多个的直接派生类和间接派生类,那么在这些派生类中是否有必要对此虚基类进行多次初始化呢? 多重继承B(int data)A(int data)C(int data)D(int B:data, int C:data)虚拟继承虚基类的简单实例PeopleName,sex,ageTeacherTitle /职称Studentscor
3、eGraduateWage /工资Show()/显示各成员信息虚拟继承class people public:people(char *pname,char s, int a)strcpy(name, pname);sex=s; age=a;protected:char name20,sex; int age;虚拟继承class teacher : virtual public people public:teacher(char *str, char s, int a, char *ptitle):people(str,s,a) strcpy(title,ptitle);protected:
4、char title20;虚拟继承class student : virtual public people public:student(char *str, char s, int a, float sco):people(str,s,a),score(sco) protected:float score;虚拟继承class graduate : public teacher,public student public: graduate (char *str, char s, int a, float sco,char *ptitle,float w):people(str,s,a),t
5、eacher(str,s,a,ptitle), student(str,s,a,sco),wage(w)虚拟继承 void show() cout“name:”nameendl;cout“age:”ageendl;cout“sex:”sexendl;cout“title:”titleendl;cout“score:”nameendl;cout“wages:”wageshow(); /调用基类对象的show函数 基类对象派生类对象指向基类对象的指针变量也可以指向派生类对象 例如:定义一个基类student(学生),再定义student的公有派生类graduate(研究生),用指向基类对象的指针输
6、出数据。基类对象派生类对象 class student public: student(int n,char *str, float sco) num=n; strcpy(name,str); score=sco; void display() cout“num:”numendl; cout“name:”nameendl; cout“score:”scoreendl; protected: float score; int num; char name20; ; 基类对象派生类对象class graduate : public student public:graduate(int n, ch
7、ar *str, float sco,float p):student(n,str,sco),pay(p) void display() student:display(); cout“pay:”payendl;private: float pay;/工资 ;is_a和has_a类之间的关系是(is_a)类的继承中学和学校,中学是学校,学校不能拥有中学,中学是学校的一个特例,是某一种学校有(has_a)类的复合班级和学校,班级不是学校,学校拥有班级,班级是学校的一部分,再如Pc机类,Cpu类,Storage类,I/O类is_a和has_ahas_a的例子:#include class stud
8、ent public: student() cout“student”endl; private: int semeshours; /总学时 float gpa; /平均学分;is_a和has_aclass tutorpair() public: tutorpair( ) cout“tutorpair”endl; private: student stu; teacher chen;is_a和has_aint main() tutorpair tp; cout“back in main”endl; is_a和has_a练习 1、创建一个circuit类,该类使用三个数据成员存储电路的电阻(R)
9、、输入电压(intv)和电流(A)。 Circuit类还有以下成员函数: -一个带有初始化数据成员参数的构造函数 -一个计算、返回电流的函数(即输入电压除以电阻) -一个显示电阻、电流和输入电压的函数。 is_a和has_a创建一个继承circuit的所有成员的amplifier类,除circuit类成员外,还有一些特定的成员: - 数据成员gain和输出电压outv - 一个带有初始化数据成员参数的构造函数 -一个计算、返回输出电压的函数(输入电压乘以gain)设计函数实例化类的一个对象,然后使用对象来调用所有成员函数。is_a和has_a2、设计一个带有下列成员的risistor类: - 一个用来保存电阻的数据成员 - 一个带有用来初始化电阻的参数的构造函数 -一个返回电阻值的函数 -一个显示下列消息的析构函数 resistor is d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政管理的变化与挑战的系列分析的试题及答案
- 执业药师考试经验人士分享试题及答案
- 2025年大学生护士职业规划试题及答案
- 行政法学与国际法的现状与发展试题及答案
- 行政法学的逻辑推导试题与答案
- 执业医师考试的知识点关联分析试题及答案
- 文化活动对社会凝聚力的影响试题及答案
- 执业护士应对考前焦虑的方法试题及答案
- 2025年护士自我评估试题及答案
- 行政法学实践案例试题与答案
- 殡葬单位面试题及答案
- 网络科学在社会网络分析中的应用-全面剖析
- 民法典讲座课件
- 2024年蚌埠市龙子湖区产业发展有限公司招聘笔试真题
- 【安全随行】新员工入场三级安全教育培训
- 【《生育意愿及影响因素研究的国内外文献综述》3400字】
- 建筑工地各工种安全操作规程
- (四调)武汉市2025届高中毕业生四月调研考试 数学试卷(含答案详解)
- 中外比较文学研究专题智慧树知到期末考试答案2024年
- 建设用地报批服务投标方案(技术方案)
- EN779-2012一般通风过滤器——过滤性能测定(中文版)
评论
0/150
提交评论