电子信息学院实验报告书课程名:面向对象程序设计题目:实验7 继承与派生实验类别设计班级:BX1004学号:35姓名:赵鑫一.实验目的1.理解继承的含义,掌握派生类的定义方法和实现;2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;4.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。
二.实验内容1.将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。
在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。
2.编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。
3. 编写一个程序计算出球、圆柱和圆锥的表面积和体积。
要求:(1)定义一个基类圆,至少含有一个数据成员半径;(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。
(3)定义主函数,求球、圆柱、圆锥的和体积(初始化用构造函数)。
3.实验结果⑴ #include<iostream>using namespace std;class Student{public:void get_value(){cin>>num>>name>>sex;}void display(){cout<<"学号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;}private:char num[20];char name[10];char sex[10];};class Student1:private Student{public:void get_value_1(){get_value();cin>>age>>addr;}void display_1(){display();cout<<"年龄:"<<age<<endl;cout<<"住址:"<<addr<<endl;}private:int age;char addr[30];};int main(){cout<<"请输入学生学号姓名性别年龄住址:"<<endl;Student1 stud1;stud1.get_value_1();cout<<"*******************************************"<<endl;cout<<endl;stud1.display_1();cout<<endl;cout<<"*******************************************"<<endl;cout<<"\t\t欢迎再次使用!"<<endl;cout<<"\t\t喜迎“十八大”"<<endl;return 0;}运行结果:⑵ #include<iostream>#include<string>using namespace std;class Student{public:Student(int a,string nam,string ban,string sco){number=a;name=nam;banji=ban;score=sco;}void display(){cout<<"编号:"<<number<<endl;cout<<"姓名:"<<name<<endl;cout<<"班级:"<<banji<<endl;cout<<"成绩:"<<score<<endl;}protected:int number;string name;string banji;string score;};class Teacher{public:Teacher(int n,string nam,string tit,string dep){number=n;name=nam;title=tit;department=dep;}void display1(){cout<<"编号:"<<number<<endl;cout<<"姓名:"<<name<<endl;cout<<"职称:"<<title<<endl;cout<<"部门:"<<department<<endl;}protected:int number;string name;string title;string department;};class Person:public Student,public Teacher{public:Person(int a,string nam,string ban,string sco,int n,string nam1,string tit,stringdep):Student(a,nam,ban,sco),Teacher(n,nam1,tit,dep){}void show(){cout<<"人类学生编号:"<<Student::number<<endl;cout<<"人类学生姓名:"<<Student::name<<endl;cout<<"人类学生班级:"<<Student::banji<<endl;cout<<"人类学生成绩:"<<Student::score<<endl;cout<<endl;}void show1(){cout<<"人类教师标号:"<<Teacher::number<<endl;cout<<"人类教师姓名:"<<Teacher::name<<endl;cout<<"人类教师职称:"<<Teacher::title<<endl;cout<<"人类教师部门:"<<Teacher::department<<endl;cout<<endl;}};int main(){Person Per(1,"赵鑫","BX1004","100",2,"夏建国","校长","行政"); Per.show1();Per.show();return 0;}运行结果:(3)#include<iostream>using namespace std;#define pi 3.14159class banjing(int bj,int h);{public:banjing(int bj){R=bj;}void display();protected:int R;};class qiu:public banjing{public:qiu(int R):banjing(R){R1=R;s1=4*pi*R1*R1;v1=4/3*pi*R1*R1*R1;}void show(){cout<<"球的表面积为:"<<s1<<endl;cout<<"球的体积为:"<<v1<<endl;cout<<endl;}protected:int R1;float s1;float v1;};class yuanzhu:public banjing{public:yuanzhu(int R,int h):banjing(R,h){h2=h;R2=R;s2=pi*R2*R2+4*pi*R2*h2;v2=pi*R2*R2*h2;}void show(){cout<<"圆柱的表面积为:"<<s2<<endl;cout<<"圆柱的体积为:"<<v2<<endl;cout<<endl;}protected:int R2;int h2;float s2;float v2;};class yuanzhui:public banjing{public:yuanzhui(int R,int h):banjing(R,h){h3=h;R3=R;s3=pi*R3*R3+38.0;v3=1/3*pi*R3*R3*h3;}void show(){cout<<"圆锥的表面积为:"<<s3<<endl;cout<<"圆锥的体积为:"<<v3<<endl;cout<<endl;}protected:int R3;int h3;float s3;float v3;};int main(){banjing ban(2,3);ban.show();return 0;}运行结果:4.结果分析与实验体会本次实验,我进一步熟悉和掌握了《继承和派生》的相关知识。