C++实验报告--继承和派生(共6页).doc
精选优质文档-倾情为你奉上 面向对象程序设计 实验报告实验名称 继承和派生 实验室 522 实验日期 2012/12/18 一、实验目的 1、进一步巩固C+语言中类和对象的概念和应用。2、掌握继承和派生的概念和实现。二、实验要求1、进一步熟练掌握类和对象的概念,使用的方法,访问的规则。2、掌握单继承的概念和应用。3、掌握多继承和虚基类的概念,并熟练应用。三、实验内容1、定义一个点类,矩形类,长方体类,其中点类派生了矩形类,矩形类派生了长方体类,要求每个类设计构造函数,点类中添加成员函数能够计算任意两点的距离,矩形类能够计算面积和周长,长方体类能够计算体积和表面积。(1).源程序:#include <iostream>using namespace std;#include "math.h"class Pointprivate:int X,Y;public: Point(double x1,double y1)X=x1;Y=y1; double Getx()return X; double Gety()return Y; void showXY()cout<<"点:"<<"("<<X<<","<<Y<<")"<<endl; void distance(Point& p) double dX=X-p.X; double dY=Y-p.Y; cout<<"距离:"<<"distance="<<sqrt(dX*dX+dY*dY)<<" (cm)"<<endl; ;class Rectangle:public Pointprotected:int A,B;public:Rectangle(int a,int b,int X,int Y):Point(X,Y)A=a;B=b; int show_area()return A*B;void show_area1()cout<<"面积:"<<"A*B= "<<A*B<<" (cm2)"<<endl;void show_zhouchang()cout<<"周长:"<<"2*(A+B)= "<<2*(A+B)<<" (cm)"<<endl;class Cuboid:public Rectangleprivate:int H;public:Cuboid(int H,int A,int B,int X,int Y):Rectangle(A,B,X,Y)this->H=H; void show_volume()cout<<"体积:"<<"A*B*H= "<<H*(Rectangle:show_area()<<" (cm3)"<<endl; void show_biaomianji() cout<<"表面积:"<< "2*(A*B+A*H+B*H)= "<<2*(A*B+A*H+B*H)<<" (cm2)"<<endl; ;void main()Point C(6,8),D(3,4);C.showXY();D.showXY();D.distance(C);Rectangle E(3,4,1,2);E.show_area1();E.show_zhouchang();Cuboid F(4,3,4,1,2);F.show_volume();F.show_biaomianji();(2).运行结果:2、根据如图所示编辑程序,计算教师的课时,计算学生的平均成绩,假定每个学生3门课程,并输出每个类的信息(例如教师的职称,学生的专业等,程序实现要求使用到虚基类的知识)。(1).源程序:#include <iostream>using namespace std;#include "math.h"class Personprivate:int age;public:Person(int age)this->age=age;cout<<"Person constructing."<<endl;void show()cout<<"Person age:"<<age<<endl;class Teacher:virtual public Personprivate:int lesson;public:Teacher(int age,int lesson):Person(age)this->lesson=lesson;cout<<"Teacher constructing."<<endl;void show()Person:show();cout<<"Teacher lesson:"<<lesson<<endl;class Student:virtual public Personprivate:double grade1;double grade2;double grade3;public:Student(int age,double grade1,double grade2,double grade3): Person(age) this->grade1=grade1; this->grade2=grade2; this->grade3=grade3; cout<<"Student constructing." void show() Person:show(); cout<<"Student Grade:"<<endl; cout<<"grade1:"<<grade1<<endl; cout<<"grade2:"<<grade2<<endl; cout<<"grade3:"<<grade3<<endl; cout<<"Average Grade:"<<(grade1+grade2+grade3)/3<<endl; ;class Zhu:public Teacherprotected:int money;public:Zhu(int age,int lesson,int money):Person(age), Teacher(age,lesson) this->money=money; cout<<"Zhu_jiao constructing."<<endl; void show() Teacher:show(); cout<<"Zhu_jiao money:"<<money<<endl; ;class Yan:public Studentprotected:int Class;public:Yan(int age,double grade1,double grade2,double grade3,int Class): Person(age),Student(age,grade1, grade2, grade3) this->Class=Class; cout<<"Yan constructing."<<endl; void show() Student:show(); cout<<"Yan Class."<<Class<<endl; ;class YJSZJ:public Teacher,public Studentpublic:YJSZJ(int age,int lesson,double grade1,double grade2,double grade3,int money,int Class):Person(age),Student(age,grade1,grade2,grade3),Teacher(age,lesson) cout<<"constructing."<<endl; void show() cout<<"YJSZJ:"<<endl; Teacher:show(); Student:show(); ;void main()YJSZJ x(21,50,98.0,99.0,97.0,5000,02);x.show();(2).运行结果:专心-专注-专业