首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
使用VC++6.0打开考生文件夹下的源程序文件3.cpp,要求编写一个CMyShape类,含有求面积、周长等的纯虚函数,然后编写一个CRectangle类和CCircle类继承CMyShape,并实现求面积、周长的两个函数。在main函数中测试得到下面的结
使用VC++6.0打开考生文件夹下的源程序文件3.cpp,要求编写一个CMyShape类,含有求面积、周长等的纯虚函数,然后编写一个CRectangle类和CCircle类继承CMyShape,并实现求面积、周长的两个函数。在main函数中测试得到下面的结
admin
2019-06-07
52
问题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp,要求编写一个CMyShape类,含有求面积、周长等的纯虚函数,然后编写一个CRectangle类和CCircle类继承CMyShape,并实现求面积、周长的两个函数。在main函数中测试得到下面的结果:
在CMyShape类构函数造内
在CCircle类构造函数内
在CMyShape类构造函数内
在CRectangle类构造函数内
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 CCircle:public CMyShape
{
public:
CCircle(CMyPoint i,double j):CMyShape(),arcCenter
(i),radius(j)
{
cout<<"在CCircle类构造函数内"<
}
double GetArea()
{
return PI*radius*radius:
}
double GetGirth()
{
return 2*PI*radius:
}
private:
CMyPoint arcCenter;
double radius;
};
class CRectangle:public CMyShape
{
public:
CRectangle(CMyPoint h,CMyPoint rb):leftTop(It),
rightBottom(rb),CMyShape()
{
cout<<"在CRectangle类构造函数内"<
}
double GetArea()
{
int width=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;
CCircle*myCircle=new CCircle(CMyPoint(5,5),10):
CRectangle*myRectangle=new CRectangle r CMy
Point(0,0),CMyPoint(30,30));
//********2********
cout<<"myCircle:"<<"Area="<
//********2********
cout<<"myReetangle:"<
GetArea()<<"\t”<<"Girth="<
GetGirth
()<
}
选项
答案
(1)应添加“virtual double GetArea()=0;”。 (2)应添加“virtual double GetGirth()=0;”。 (3)应添加“myShape=myCircle;”。 (4)应添加“myShape=myRectangle;”。
解析
本题在第1处声明纯虚函数,纯虚函数的定义格式为“virtual<函数类型><函数名>(<参数表>)=0”,由程序后面的函数体实现可知求面积纯虚函数的函数名称为GetArea,因此第1处应添加“virtual double GetArea()=0;”。声明格式和1)相同,由求周长的函数具体实现可知该函数的名称为GetGirth,因此第2处应添加“virtual double GetGirth()=0;”。
主函数中定义了CMyShaPe类对象指针myShape,CCircle类对象指针myCircle,CRectangle类对象指针myRectangle。由类继承关系知,在调用子类的构造函数时,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类CRectangle和类CCircle的实例时,抽象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出“在CMyShape类构造函数内”,然后输出“在CCircle类构造函数内”,实例化CRectangle对象的过程也是如此。同时由纯虚函数的性质知.抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但通过周子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数,myShape是基类指针,其虚函数GetArea和GetGirth没有实现,要求程序输出的面积值和周长值,只可能是myShape指向子类对象,调用子类的函数GetArea和GetGirth打印输出,显然在第3处是myShape指向子类CCirele对象,即“myShape=myCircle;”。同理第4处myShape指向子类CRectangle对象,即第4处应添加“myShape=myRectangle;”。
转载请注明原文地址:https://kaotiyun.com/show/fm8p777K
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
下列程序的输出结果为12.324.6,请将横线处的缺失部分补充完整。#include<iostream>usingnamespacestd;classBase{public:Base(intA):id
下列关于模板的描述中,错误的是()。A)类模板的成员函数都是模板函数B)函数模板是一种参数化类型的函数C)满足一定条件时可以省略模板实参D)模板形参只能由关键字typename声明
下列关于二叉树的叙述中,正确的是()。A)叶子结点总是比度为2的结点少一个B)叶子结点总是比度为2的结点多一个C)叶子结点数是度为2的结点数的两倍D)度为2的结点数是度为1的结点数的两倍
若要在C盘根目录下作为二进制文件打开文件test.dat,则应该用的语句是______。
下列关于类、对象、属性和方法的叙述中,错误的是()。
下面关于友元的说法中错误的是()。
树是结点的集合,它的根结点的数目是()。
需求分析阶段的任务是()。
将E-R图转换到关系模式时,实体与联系都可以表示成()。
随机试题
抛开一些带有有色眼镜的“主观臆想”不论,新生事物被过度__________几乎是普遍规律。因此,所有“中国方案”在一开始难免被质疑甚至是被__________。但也正如亚投行在正式运行之后以其开放、包容的姿态和快速扎实地推进有效地打消了外界的疑虑一样,每一
患者,女,26岁。已婚。月经规律,周期28天,末次月经为4月1日。下列说法正确的是
妇女下腹有结块,积块不坚,或胀,或满,或痛者.称为
某高层建筑基础采用筏形基础,基底尺寸为28m×33.6m,基础埋深为7m,相应于作用的准永久组合时的基底附加压力p0=300kPa,地基处理采用CFG桩复合地基,桩径0.4m,桩长14m。工程地质土层分布见图5.8.1所示。已知复合地基承载力特征值为336
按保险人承保责任范围大小,下列三种险别依次顺序应为()。
下面关于贷款分类的说法,不正确的有()。
在教学中如何提高学生的问题解决能力?
增长人的知识、经验,发展人的智慧、潜能,全面提高人的素质等在教育过程之中实现的价值是教育的()
Wheredidthemangetthemoneyforhiscompany?
ThechangesingloballyaveragedtemperaturethathaveoccurredattheEarth’ssurfaceoverthepastcenturyaresimilarinsize
最新回复
(
0
)