C++实验四继承多态

更新时间:2023-10-18 12:38:01 阅读量: 综合文库 文档下载

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

面向对象程序设计实验报告

实验四

继承

多态

面向对象程序设计实验报告

一、 实验目的

(1)了解继承在面向对象程序设计中的重要作用。 (2)进一步理解继承与派生。

(3)掌握通过继承派生出一个新的类的方法。 (4)了解虚基类的作用和用法。

二、 实验设计

1.

实验任务一

(1)将《C++面向对象程序设计》第五章例题5.1的程序片段补充和改写成一个完整的正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

2.

实验任务二

(2)将《C++面向对象程序设计》第五章例题5.3的程序修改,补充和改写成一个完整的正确的程序,用保护继承方式。在程序中应包括输入数据的函数。

3. 实验任务三

(3)修改第二题程序,改为公用继承方式。上机调试程序,使之能正确运行并得到正确结果。

4. 实验任务四

分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:

(1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。

(2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。

(3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

(4)在类体中声明成员函数,在类外定义成员函数。

(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

5. 实验任务五

事先编写好程序,上机调试和运行程序,分析结果。

(1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件,对

面向对象程序设计实验报告

它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行; (2)该任务采用什么方案实现:如程序的结构,算法思想,需要的输入、期望的输出,等;

(3)完成该任务的需要的主要步骤;

6. 实验任务6

事先编写好程序,上机调试和运行程序,分析结果。

(1)在《C++面向对象程序设计》第6章例6.3的基础上作以下修改,并作必要的讨论。

①把构造函数修改为带参数的函数,在建立对象时初始化。

②先不将析构函数声明为virtual,在main函数中另设一个指向Circle类对象的指针变量,使它指向gradl。运行程序,分析结果。

③不作第②点的修改而将析构函数声明为virtual,运行程序,分析结果。 (2)该任务采用什么方案实现:如程序的结构,算法思想,需要的输入、期望的输出,等;

(3)完成该任务的需要的主要步骤;

7. 实验任务7

事先编写好程序,上机调试和运行程序,分析结果。 (1)声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

(2)该任务采用什么方案实现:如程序的结构,算法思想,需要的输入、期望的输出,等;

(3)完成该任务的需要的主要步骤;

三、 实验记录及结果

1.

实验任务一

#include

#include namespace std; class Student {public:

void get_value()

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

{cout<<\ cout<<\

面向对象程序设计实验报告

cout<<\private: int num; char name[10]; char sex; };

class Student1:public Student {public:

void get_value_1() {get_value(); cin>>age>>addr; }

void display_1()

{cout<<\ cout<<\ } private: int age; }; int main() {Student1 stud1; stud1.get_value_1(); stud1.display(); stud1.display_1(); return 0; }

char addr[30];

2. 实验任务二

#include

#include namespace std; class Student {public:

void get_value()

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

{cout<<\ cout<<\ cout<<\private: int num; char name[10];

面向对象程序设计实验报告

char sex; };

class Student1:private Student {public:

void get_value_1() {get_value(); cin>>age>>addr; }

void display_1()

{cout<<\ cout<<\ } private: int age; }; int main() {Student1 stud1; stud1.get_value_1(); stud1.display_1(); return 0; }

char addr[30];

3. 试验任务三

#include using namespace std; class Student {public:

void get_value(); void display(); protected: int num; char name[10]; char sex; };

void Student::get_value() {cin>>num>>name>>sex;} void Student::display() {cout<<\ cout<<\

面向对象程序设计实验报告

{

Point *p=new Circle(2.5,1.8,4.5); delete p; return 0; }

源程序②:

#include using namespace std; class Point {

public:

Point(float a,float b):x(a),y(b){} ~Point() {

cout<<\ }

private: float x; float y; };

class Circle:public Point {

public:

Circle(int a,int b,int r):Point(a,b),radius(r){} ~Circle() {

cout<<\ }

private: float radius; };

int main() {

Point *p=new Circle(2.5,1.8,4.5); Circle *pt=new Circle(2.5,1.8,4.5); delete pt; return 0; }

源程序③:

#include using namespace std; class Point {

面向对象程序设计实验报告

public:

Point(float a,float b):x(a),y(b){} virtual ~Point() {

cout<<\ }

private: float x; float y; };

class Circle:public Point {

public:

Circle(float a,float b,float r):Point(a,b),radius(r){} virtual ~Circle() {

cout<<\ }

private: float radius; };

int main() {

Point *p=new Circle(2.5,1.8,4.5); delete p; }

7. 实验任务七

#include using namespace std; //定义抽象基类Shape class Shape {public:

virtual double area() const =0; //纯虚函数 };

//定义Circle类

class Circle:public Shape {

public:

Circle(double r):radius(r){} //结构函数

面向对象程序设计实验报告

virtual double area() const

{return 3.14159*radius*radius;}; //定义虚函数 protected:

double radius; //半径 };

//定义Rectangle类

class Rectangle:public Shape {public:

Rectangle(double w,double h):width(w),height(h){} //结构函数 virtual double area() const {return width*height;} //定义虚函数 protected:

double width,height; //宽与高 };

class Triangle:public Shape {public:

Triangle(double w,double h):width(w),height(h){} //结构函数 virtual double area() const {return 0.5*width*height;} //定义虚函数 protected:

double width,height; //宽与高 };

//输出面积的函数

void printArea(const Shape &s)

{cout<

int main() {

Circle circle(12.6); //建立Circle类对象circle cout<<\ =\

printArea(circle); //输出circle的面积

Rectangle rectangle(4.5,8.4); //建立Rectangle类对象rectangle

cout<<\ printArea(rectangle); //输出rectangle的面积 Triangle triangle(4.5,8.4); //建立Triangle类对象 cout<<\ =\

printArea(triangle); //输出triangle的面积 return 0; }

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

Top