实验6多态性与虚函数

更新时间:2024-04-05 05:50:01 阅读量: 综合文库 文档下载

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

《C++面向对象程序设计》实验报告

实验6 多态性与虚函数

序号: [实验目的]

1、了解多态性的概念;

2、了解虚函数的用途及使用方法;

3、了解纯虚函数和抽象类的概念和用法。 [实验要求]

给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。 [实验学时]

2学时。 [实验内容]

1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。 [源程序]

#include using namespace std; class Shape {

public: virtual float area()const=0; virtual void display()const=0; };

class Circle:public Shape {

public: Circle(double a):r(a){} virtual float area()const{return 3.14*r*r;} virtual void display()const { cout<<\圆面积\ } private: double r; };

第 1 页 共 1页

《C++面向对象程序设计》实验报告

class Rectangle:public Shape {

public: Rectangle(double a,double b):l(a),w(b){} virtual float area()const{return l*w;} virtual void display()const { cout<<\矩形面积\ }

private: double l; double w; };

class Square:public Shape {

public: Square(double a):a1(a){} virtual float area()const{return a1*a1;} virtual void display()const { cout<<\正方形面积\ }

private: double a1; };

int main() { Circle c1(5); Rectangle r1(5,8); Square s1(2.5); Shape *p[3]={&c1,&r1,&s1}; int i; double m=0.0; for (i=0;i<3;i++) { p[i]->display(); m=m+p[i]->area(); }

第 2 页 共 1页

《C++面向对象程序设计》实验报告

cout<<\总面积:\ }

2、定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件(.h文件),对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数(.cpp文件)中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。 [源程序] //Point.h class Point {

public: Point(float a=0,float b=0); void display(); protected: float x,y; };

//Point.cpp

#include #include\

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

void Point::display() { cout<<\}

//Circle.h

class Circle:public Point {

public:

第 3 页 共 1页

《C++面向对象程序设计》实验报告

Circle(float x=0,float y=0,float r=0); void display(); protected: float radius; };

//Circle.cpp

#include #include\#include\

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){} void Circle::display() { cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<

//Cylinder.h

class Cylinder:public Circle {

public: Cylinder (float x=0,float y=0,float r=0,float h=0); void display(); protected: float height; };

//Cylinder.cpp

#include #include\#include\#include\

Cylinder::Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){} void Cylinder::display() { cout<<\ cout<<\

第 4 页 共 1页

《C++面向对象程序设计》实验报告

cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<

//Main.cpp

#include #include\#include\#include\int main() { Point p(2.0,4.0); p.display(); Circle c(4.0,5.0,6.0); c.display(); Cylinder cy(7.0,8.0,10.0,11.0); cy.display(); return 0; }

3、要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。 [源程序]

#include #include #define PI 3.14 class Cshape {

double radius,height; double area,vol;

第 5 页 共 1页

《C++面向对象程序设计》实验报告

int name; public:

Cshape(double r,double h) {

radius = r; height = h; name = 3; }

Cshape(double r) {

radius = r; name = 1; }

void DisAttr() {

if(name == 1)

cout<<\球体信息\ if(name ==2)

cout<<\正方形信息\

cout<<\表面积是:\ }

void DisAttr(int flag) {

cout<<\圆柱信息\

cout<<\表面积是:\ }

void Sarea() {

area = 4*PI*pow(radius,2); }

void Sarea(int cube) {

area = 6*pow(radius,2); }

void Sarea(double cube) {name = 3;

area = 2*PI*pow(radius,2)+2*PI*radius*height; }

第 6 页 共 1页

《C++面向对象程序设计》实验报告

};

int main() {

Cshape yuanqiu(3); yuanqiu.Sarea(); yuanqiu.DisAttr();

Cshape zhengfangxing(3); zhengfangxing.Sarea(1); zhengfangxing.DisAttr(); Cshape yuanzhu(3,4); yuanzhu.Sarea(12.3); yuanzhu.DisAttr(1); return 0; }

第 7 页 共 1页

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

Top