首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCircle类继承CMyShape,并实现求面积、求周长的两个函数。在main()函数中测试
使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCircle类继承CMyShape,并实现求面积、求周长的两个函数。在main()函数中测试
admin
2020-10-21
61
问题
使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCircle类继承CMyShape,并实现求面积、求周长的两个函数。在main()函数中测试得到下面的结果:
在CMyShape类构函数造内
在CMyCircle类构造函数内
在CMyShape类构造函数内
在CMyRectangle类构造函数内
myCircle:Area=314.159 Girth=62.8319
myRectangle:Area=900 Girth=120
具体要求如下:
(1)定义求面积纯虚函数,请在注释//********1********之处添加适当的语句。
(2)定义求周长纯虚函数,请在注释//********2********之处添加适当的语句。
(3)请在注释//********3********和//********4********之处添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include
#include
#define PI 3.1415926
class CMyPoint
{
public:
int x,y;
CMyPoint(int tx,int ty):
x(tx),y(ty){)
);
class CMyShape
{
public:
CMyShape(){cout<<"在
CMyShape类构造函数内"<
//********1********
//********2********
protected:
};
class CMyCircle:public CmyShape
{
public:
CMyCircle(CMyPoint i,double
j):CMyShape(),arcCenter(i),
radius(j){
cout<<"在CMyCircle类构造函数内"<
}
double GetArea()
{
return PI*radius*radius;
}
double GetGirth()
{
return 2*PI*radius;
}
private:
CMyPoint arcCenter;
double radius;
};
class CMyRectangle:public
CmyShape
{
public:
CMyRectangle(CMyPoint
it,CMyPoint rb):leftTop(1t),
rightB0ttom(rb),CMyShape(){
cout<<"在 cMyRectangle
类构造函数内"<
}
Double GetArea()
{
Int W1dth=abS
(rightBottom.x-leftTop.x);
int height:abs
(rightBottom.y-leftTop.y);
Return width*height;
}
double GetGirth()
{
int width=abs
(rightBottom.x-leftTop.x);
int height=abs
(rightBottom.y-leftTop.y);
return 2*(width+height);
}
private:
CMyPoint leftTop,rightBottom;
};
Void main()
{
CMyShape *myShape=NULL;
CMyCircle *myCirCle=new
CMyCircle(CMyPoint(5,5),10);
CMyRectangle *myRectangle=
new CMyRectangle(CMyPoint(0,0),
CMyPoint(30,30));
//********3********
cout<<"myCircle:"<<"Area="
<
GetArea()<<"\t"
<<"Girth="<
GetGirth()<
//********4********
cout<<"myRectangle:"<<"Are
a="<
GetArea()<<"\t"
<<"Girth="<
GetGirth()<
}
选项
答案
(1)添加语句:virtual double GetArea()=0; (2)添加语句:virtual double GetGirth()=0; (3)添加语句:myShape=mycircle; (4)添加语句:myshape=myRectangle;
解析
(1)第1个标识下声明纯虚函数,纯虚函数的定义格式为:virtual<函数类型><函数名>(<参数表>)=0,由程序后面的函数体实现可知求面积纯虚函数的函数名为GetArea0,因此第1个标识下应添加“virtual double GetArea0=0;”。
(2)声明格式和(1)相同,由求周长的函数具体实现可知该函数的名为GetGirth0,因此第2个标识下应添加“virtual double GetGirth()=0;”
(3)主函数中定义了CMyShape类对象指针myShape,CMyCircle类对象指针myCircle,CMyRectangle类对象指针myRectangle,由类继承关系知,在调用子类的构造函数的时候,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类CMyRectangle和类CMyCircle的实例的时候,抽象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出“在CMyShape类构函数造内”,然后输出“在CMyCircle类构造函数内”,实例化CMyRectangle对象的过程也是如此。同时由纯虚函数的性质知,抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但是通过用子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数,myShape是基类指针,其虚函数GetArea0和GetGirth()没有实现,要求程序输出面积值和周长值,只可能是myShape指向子类对象,调用子类的函数GetArea()和GetGirth()打印输出,显然第3个标识下是myShape指向子类CM:yCircle对象,即myShape=myCircle;。
(4)同理第4个标识下myShape指向子类CMyRectangle对象,即第4个标识下应添加“myShape=myRectangle;”。
转载请注明原文地址:https://www.kaotiyun.com/show/Tkyp777K
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
下列运算符中,不能被重载的是()。
下列关于函数的描述中,错误的是()。
有如下类定义:classFoo{public:Foo(intv):value(v){}//①-Foo(){}//②pnvate:Foo(){}//③intvalu
在数据库设计中,将E-R图转换成关系数据模型的过程属于()。
请使用菜单命令或直接使用VC6打开考生文件夹下的工程projl。程序中位于每个//ERROR**********found**********下的语句行有错误,请加以更正,不得修改程序的其他部分。更正后程序的输出应该是:两点之间的距离为:7.5231
请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程proj1,此工程中包含一个源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR****found****”下的语句行有错误,请加以改
使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)重载运算符int,请在注释//********1********后添加适当的语句。(2)重载运算符“<<”请在注释//****
关于关键字class和typename,下列表述中正确的是()。
一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为()。
随机试题
上呼吸道包括
In1807NoahWebsterbeganhisgreatestwork,AnAmericanDictionaryoftheEnglishLanguage.Inpreparingthework,hedevoted
肾纤维囊为贴于肾筋膜表面的一层结缔组织膜与肾筋膜很难分离。
甲、乙双方于2006年4月1日签订一份建筑材料购买合同,合同约定一旦乙收回前欠应收账款,立即给甲的银行账户汇款购买其材料,并约定如果一个月内不能履行,则合同失效。4月10日,乙的银行账户收到15万元前欠货款,乙于当日即向甲汇款,履行了合同。根据《中华人民共
下列关于留置的说法中,不正确的有()
较强的独立工作能力和创新精神表现在()。
下列关于手势语言说法不正确的是()。
案例:下面是学生小强在解答一道题目时的解法:在△ABC中,若2sinA+cosB=2,sinB+2cosA=,求∠C的大小。解:对2sinA+cosB=2,sinB+2cosA=两边分别平方后两式相加,化简得2(sinAcosB+cosAsinB)=
每一个问题都必须包含以下几种成分?()
从所给的四个选项中,选择最合适的一个填入问号处,使之呈现一定的规律性。
最新回复
(
0
)