实验四 继承与派生.doc_第1页
实验四 继承与派生.doc_第2页
实验四 继承与派生.doc_第3页
实验四 继承与派生.doc_第4页
实验四 继承与派生.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验四 继承与派生一、 实验目的:掌握利用单继承和多重继承的方式定义派生类的方法;深刻理解在各种继承方式下构造函数和析构函数的执行顺序;理解和掌握公有继承,私有继承和保护继承对基类成员的访问机制;理解虚基类的概念以及引入虚基类的目的和作用。二、 实验时间:三、 实验地点:四、 实验内容:1运行以下程序,并对运行结果进行分析#include stdafx.h#includeusing namespace std;class base int n;public: base(int a) coutconstructing base classendl; n=a; coutn=nendl; base()coutdesstructing base classendl;class subs:public base base bobj; int m; public: subs(int a,int b,int c):base(a),bobj(c) coutconstructing sub classendl; m=b; coutm=mendl; subs()coutdestructing sub classendl;void main()subs s(1,2,3);l subs s(1,2,3);subs(int a,int b,int c):base(a),bobj(c)所以a=1,b=2,c=3,l class subs:public base,又因为base(a),所以先调用base 传一个参数的构造函数base(int a),(若此处删去base(a),则会出现如下错误)l 调用base(int a),所以有l 然后,因为base bobj;所以这里还会调用base(int a)构造函数,此时传入的a值为bobj(c)中的c,即3,所以有l 再者,才会调用subs的构造函数subs(int a,int b,int c):base(a),bobj(c)l 相反,在调用析构函数的时候,顺序刚刚好相反,则base()cout:nendl; subs()cout:mendl;2设计一个圆类circle和一个桌子类table,另外设计一个圆桌类roundtable,从前2个类派生的,要求输出一个圆桌的高度,面积和颜色等数据。l Public继承/ 2.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include#includeusing namespace std;class circleprivate:float R; public:circle(float r)R=r;void area()cout面积为:3.14*R*Rendl;class tableprivate:float H; string color;public:table(float h,string c)H=h;color=c;void message()cout高度为:Hendl颜色为:colorendl;class roundtable:public circle,public tablepublic:roundtable(float r,float h,string c):circle(r),table(h,c);int main()roundtable a(3,5,yellow);a.area();a.message();return 0;l Protected继承class roundtable:protected circle,protected tablel Private继承class roundtable:private circle,private table3设计一个虚基类base,包含姓名和年龄私有数据成员以及相关成员函数,由它派生出领导类leader,包含职务和部门私有数据成员以及相关成员函数。再由base派生出工程师类engineer,包含职务和专业私有数据成员以及相关成员函数。然后由leader和engineer类派生出主任工程师chairman。采用一些数据进行测试(写在构造函数里)/ 3.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include#includeusing namespace std; class baseprivate:string name;int age;public:base(string n,int a)name=n;age=a;cout名字:nameendl年龄:ageendl;class leader:virtual public basestring pos,dept;public:leader(string n,int a,string p,string d):base(n,a) pos=p; dept=d;cout职位:posendl部门:deptendl;class engineer:virtual basestring pos,speciaty;public:engineer(string n,int a,string p,string s):base(n,a)pos=p;speciaty=s;cout职位:posendl专业:speciatyendl; ;class chairman:virtual public leader,virtual public engineerpublic:chairman(string n,int a,string p,string d,string p1, string s):base(n,a),leader(n,a,p,d),engineer(n,a,p1,s)coutchairmanendl; ;int main()chairman a(name,10,pos1,dept,pos2,speciaty);return 0;(写在show()函数里)/ 3.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include#includeusing namespace std; class baseprivate:string name;int age;public:base(string n,int a)name=n;age=a; void show()cout名字:nameendl年龄:ageendl; string getname() return name; int getage() return age; ;class leader:virtual public basestring pos,dept;public:leader(string n,int a,string p,string d):base(n,a) pos=p; dept=d;void show()base:show();cout职位:posendl部门:deptendl; string getpos() return pos;string getdept() return dept;class engineer:virtual basestring pos,speciaty;public:engineer(string n,int a,string p,string s):base(n,a)pos=p;speciaty=s;void show()base:show();cout职位:posendl专业:speciatyendl;string getpos() return pos;string getspe() return speciaty;class chairman: public leader , public engineerpublic:chairman(string n,int a,string p,string d,string p1, string s):base(n,a),leader(n,a,p,d),engineer(n,a,p1,s)coutchairmanendl;void show()cout姓名:getname()endl年龄:getage()endl职位:leader:getpos(),engineer:getpos()endl部门:getdept()endl专业:getspe()endl;int main()chairman a(name,10,pos

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论