实验7 继承与派生

更新时间:2023-03-15 18:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

电子信息学院 实验报告书

课程名: 面向对象程序设计

题 目: 实验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 using namespace std; class Student {public:

void get_value()

{cin>>num>>name>>sex;} void display()

{cout<<\学号:\cout<<\姓名:\cout<<\性别:\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<<\年龄:\ cout<<\住址:\}

private: int age;

char addr[30]; };

int main() {

cout<<\请输入学生学号 姓名 性别 年龄 住址:\ Student1 stud1;

stud1.get_value_1();

cout<<\ cout<

stud1.display_1(); cout<

cout<<\ cout<<\欢迎再次使用!\ cout<<\喜迎“十八大”\ return 0; }

运行结果:

⑵ #include #include 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<<\编号:\cout<<\姓名:\cout<<\班级:\cout<<\成绩:\}

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<<\编号:\cout<<\姓名:\cout<<\职称:\

cout<<\部门:\}

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,string

dep):

Student(a,nam,ban,sco),Teacher(n,nam1,tit,dep){} void show()

{cout<<\人类 学生编号:\cout<<\人类 学生姓名:\cout<<\人类 学生班级:\cout<<\人类 学生成绩:\cout<

void show1()

{cout<<\人类 教师标号:\cout<<\人类 教师姓名:\cout<<\人类 教师职称:\

cout<<\人类 教师部门:\cout<

int main()

{Person Per(1,\赵鑫\夏建国\校长\行政\Per.show1(); Per.show(); return 0; }

运行结果:

(3)#include using namespace std; #define pi 3.14159

class 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<<\球的表面积为:\ cout<<\球的体积为:\ cout<

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<<\圆柱的表面积为:\ cout<<\圆柱的体积为:\ cout<

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<<\圆锥的表面积为:\ cout<<\圆锥的体积为:\ cout<

protected: int R3; int h3; float s3; float v3; };

int main() {

banjing ban(2,3); ban.show(); return 0; }

运行结果:

4.结果分析与实验体会

本次实验,我进一步熟悉和掌握了《继承和派生》的相关知识。截止到本章节,我们已经学习了C++的抽象性、封装性、继承派生性。一个新类从已有的类那里获得其已有特性,

这种现象称为类的继承。通过继承,一个新建子类从已有的父类那里获得父亲的特性。从另一角度说,从已有的类(父类)产生一个新的子类,称为类的派生。这些定义,我通过课本例题、课后习题和本次实验得到了更深层次的理解。派生类是基类的具体化,而基类则是派生类的抽象。

在实验的第二道题中,由于最初编写时没有注意到多重继承引起的二义性问题,所以出错。通过进一步学习,我对多重继承引起的二义性问题有了更深的理解。由于老师和学生都有姓名和编号,所以使用基类名来限定是必不可少的,否则编译系统会发出ambiguous的错误提示。如:“cout<<\人类 学生姓名:\”,可避免程序中的二义性。在实验不断验证、修改的过程中,我对本章的知识点有了更深刻的理解和认识。

最后,感谢老师的指导。

本文来源:https://www.bwwdw.com/article/7e6v.html

Top