当前位置:文档之家› 多态性与虚函数练习

多态性与虚函数练习

多态性与虚函数练习
多态性与虚函数练习

多态性与虚函数练习

1.设计一个评选优秀教师和学生的程序,其类结构如图1所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出。

图1 类结构

假设运行结果如下所示:#include

#include

using namespace std;

class Base

{

public:

void getname(){ cout<<"姓名:";cin>>name;} void printname()

{ cout<

virtual int isgood()=0;

protected:

string name;

};

class Student:public Base

{

public:

void getnum(){ cout<< "成绩:";cin>>num;}

int isgood() { return num>90?1:0;}

private:

int num;

};

class Teacher:public Base

{

public:

void getnum() { cout<< "每年发表论文数:";cin>>num;}

int isgood(){ return num>3?1:0;}

类Base

void getname()

void printname()

纯虚函数int ifgood()=0 string name

类student

void getnum()

int num

纯虚函数ifgood实现:若考试成绩大于90分,则返回1

类teachere

void getnum()

int num

纯虚函数ifgood实现:若一年发表论文大于3篇,则返回1

private:

int num;

};

int main()

{

Base *p[50];

Student *pstud;

Teacher *ptech;

char ch;

int count=0;

do

{

cout<<"Input teacher(t) or student(s):";

cin>>ch;

if(ch=='s')

{

pstud=new Student;

pstud->getname();

pstud->getnum();

p[count++]=pstud;

}

else if(ch=='t')

{

ptech=new Teacher;

ptech->getname();

ptech->getnum();

p[count++]=ptech;

}

else

cout<<"Data error!"<

cout<<"continue (y/n)?";

cin>>ch;

}while(ch=='y');

cout<<"优秀者的姓名:";

for(int i=0;i

if(p[i]->isgood()==1)

p[i]->printname();

cout<

}

2.编写一个程序实现图书和杂志销售管理。当输入一系列图书和杂志销售记录后,将销售良好(图书每月售500本以上,杂志每月2500本以上)的图书和杂志名称显示出来。

图2 类结构

假设运行结果如下:

#include

#include

using namespace std;

class Base

{

public:

virtual void gettitle()=0;

void printtitle()

{ cout<

virtual int isgood()=0;

protected:

string title;

};

class Book:public Base

{

public:

void gettitle() { cout<<"书名:";cin>>title;}

void getsold(){ cout<< "每月销售书量:";cin>>numsold;}

int isgood() { return numsold>500?1:0;}

private:

int numsold;

};

class Journal:public Base

{

public:

void gettitle() { cout<<"杂志名:";cin>>title;}

void getsold() { cout<< "每月销售杂志量:";cin>>numsold;}

int isgood(){ return numsold>2500?1:0;}

private:

int numsold;

};

int main()

{

Base *p[50];

Book *pbook;

Journal *pjour;

char ch;

int count=0;

do

{

cout<<"Input book(b) or journal(j):";

cin>>ch;

if(ch=='b')

{

pbook=new Book;

pbook->gettitle();

pbook->getsold();

p[count++]=pbook;

}

else if(ch=='j')

{

pjour=new Journal;

pjour->gettitle();

pjour->getsold();

p[count++]=pjour;

}

else

cout<<"Data error!"<

cout<<"continue (y/n)?";

cin>>ch;

}while(ch=='y');

cout<<"销售良好的书或杂志:";

for(int i=0;i

if(p[i]->isgood()==1)

p[i]->printtitle();

cout<

}

3.扩写程序:

以下程序的功能为计算正方体的表面积和体积。增加两个类Globe和Cylinder,求球体和圆柱体的表面积和体积。在基类中定义的公共数据成员radius,可作为正方体的边长、球体的半径、圆柱体的底面半径。(补充类结构图)xt03.cpp

部分程序代码:

#include

using namespace std;

class Container

{ public:

Container(float r)

{ radius=r;}

float getRadius()

{ return radius;}

virtual void containerName(){};

virtual float surface_area(){return 0;};

virtual float volume(){return 0;}; protected:

float radius;

};

class Cube:public Container

{ public:

Cube(float r):Container(r){};

void containerName()

{ cout<<"Cube:";}

float surface_area()

{return 6*radius*radius;}

float volume()

{return radius*radius*radius;}

};

int main()

{

Container *pt;

Cube cube(3);

pt=&cube;

pt->containerName();

cout<<"a="<

cout<<"surface_area="<surface_area()<

cout<<"volume="<volume()<

return 0;

}

运行结果如下:

4.(习题6.4)写一个程序,定义抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle (矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。xt04.cpp

5.(习题6.5)写一个程序,定义抽象基类Shape,由它派生出5个派生类:Cirle(圆形)、Square (正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形的面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。xt05.cpp

类Base

纯虚函数void gettitle()

void printtitle()

纯虚函数int ifgood()=0

string title

类Journal

void getsold()

int numsold

纯虚函数ifgood实现:若

每月杂志销售量大于

2500,则返回true

类Book

void getsold()

int numsold

纯虚函数ifgood实现:若

每月图书销售量大于

500,则返回1.

相关主题
文本预览
相关文档 最新文档