实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx

上传人:b****6 文档编号:17628703 上传时间:2022-12-07 格式:DOCX 页数:9 大小:99.86KB
下载 相关 举报
实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx_第1页
第1页 / 共9页
实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx_第2页
第2页 / 共9页
实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx_第3页
第3页 / 共9页
实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx_第4页
第4页 / 共9页
实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx

《实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

实验三 虚函数与多态 纯虚函数完整版Word文档格式.docx

#include<

iostream>

usingnamespacestd;

classfigure{

protected:

doublex,y;

public:

voidset_dim(doublei,doublej=0)

{x=i;

y=j;

}

virtualvoidshow_area()

{cout<

<

"

Noareacomputationdefinedforthisclass.\n"

;

}

};

classtriangle:

publicfigure{

voidshow_area()

Trianglewithheight"

x<

andbase"

y<

hasanareaof"

x*0.5*y<

endl;

classsquare:

Squarewithdimensions"

and"

x*y<

}

classcircle:

Circlewithradius"

3.14159*x*x<

intmain(){

figure*p;

trianglet;

squares;

circlec;

p=&

t;

p->

set_dim(10.0,5.0);

show_area();

s;

c;

p->

set_dim(10.0);

return0;

【要求】

(1)建立工程,录入上述程序,调试运行并记录运行结果。

(2)修改上述程序,将virtualvoidshow_area()中的virtual去掉,重新调试运行观察结果有何变化?

为什么?

在不使用关键字virtual后,基类指针p对show-area的访问p->

show_area()没有针对所指对象的类型调用不同的函数,而是直接根据p的类型调用了基类的成员函数show-area。

(3)修改上述程序入口函数,使其动态建立三角形、矩形和圆形3个对象,通过基类指针访问这3个对象,然后释放这3个对象。

intmain()

{

figure*p;

triangle*p1;

square*p2;

circle*p3;

p1=newtriangle;

p2=newsquare;

p3=newcircle;

p=p1;

p=p2;

p=p3;

deletep1;

deletep2;

deletep3;

(4)修改类定义中的析构函数,使之适应用户动态定义对2、使用纯虚函数和抽象类对实验二中的题1进行改进。

doublex,y;

voidset_dim(doublei,doublej=0)

{x=i;

virtualvoidshow_area()

{

cout<

}

///////////////////////////////////

///////在此处将基类的析构函数声明为虚析构就OK了

virtual~figure(){}

////////////////////////////////////

voidshow_area()

trianglet;

squares;

circlec;

p=&

return0;

2、编程:

自定义一个抽象类Element,提供显示、求面积等公共接口(虚函数),派生出Point、Line、Circle等图形元素类,并重新定义(override)这些虚函数,完成各自的任务。

在这里,Element是抽象基类,它不能提供具体的显示操作,应将其成员函数定义为纯虚函数。

只有采用指向基类的指针或对基类的引用进行调用,实现的才是动态绑定,

完成运行时的多态性。

constdoublePI=3.14159;

classElement{

virtualconstchar*Name()const=0;

virtualdoubleArea()const=0;

classPoint:

publicElement{

Point(doublexv=0,doubleyv=0):

x(xv),y(yv)

{}

virtualconstchar*Name()const{return"

Point"

virtualdoubleArea()const{return0;

classLine:

doublelength;

Line(doublel=0):

length(l){}

virtualconstchar*Name()const{return"

Line"

classCircle:

protected:

doubleradius;

public:

Circle(doubler):

radius(r){}

Circle"

virtualdoubleArea()const{returnPI*radius*radius;

};

voidprint(Element*p){

Name()<

:

\t"

Area()<

endl;

intmain()

{

PointA(1,1);

print(&

A);

LineB(10);

B);

CircleC(10);

C);

return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1