首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCircle类继承CMyShape,并实现求面积、求周长的两个函数。在main()函数中测试
使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCircle类继承CMyShape,并实现求面积、求周长的两个函数。在main()函数中测试
admin
2019-01-19
48
问题
使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCircle类继承CMyShape,并实现求面积、求周长的两个函数。在main()函数中测试得到下面的结果:
在CMyShape类构函数造内
在CMyCirele类构造函数内
在CMyShape类构造函数内
在CMyRectangle类构造函数内
myCircle:Area=314.159 Girth=62.8319
myReetangle:Area=900 Girth=120
具体要求如下:
(1)定义求面积纯虚函数,.请在注释//********1********之处添加适当的语句。
(2)定义求周长纯虚函数,请在注释//********2********之处添加适当的语句。
(3)请在注释//*****3******和//******4*****之处添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
1 #include<iostream.h>
2 #include<math.h>
3 #define PI 3.1415926
4 class CMyPoint
5 {
6 public:
7 int x,y;
8 CMyPoint(int tx,int ty):x(tx),y(ty){}
9 };
10 class CMyShape
11 {
12 public:
13 CMyShape(){cout<<’’在CMyShape类构造函数内’’<<end1;}
14 //********1********
15
16 //********2********
17
18 protected:
19 };
20 class CMyCircle:public CmyShape
21 {
22 public:
23 CMyCircle(CMyPoint i,double j):CMyShape(),arcCenter(i),radius(j) {
24 cout<<’’在CMyCircle类构造函数内’’<<end1;
25 }
26 double GetArea()
27 {
28 return PI*radius*radius;
29 }
30 double GetGirth()
31 {
32 return 2*PI*radius;
33 }
34 private:
35 CMyPoint arcCenter;
36 double radius;
37 };
38 class CMyRectangle:public CmyShape
39 {
40 public:
41 CMyRectangle(CMyPoint 1t,CMyPoint rb):leftTop(1t),rightBottom(rb),CMyShape() {
42 cout<<’’在CMyRectangle类构造函数内’’<<end1;
43 }
44 Double GetArea()
45 {
46 int width=abs (rightBottom.x-leftTop.x);
47 int height=abs (rightBOttom.y-leftTop.y);
48 Return width*height;
49 }
50 double GetGirth()
51 {
52 int width=abs (rightBottom.x-leftTop.x);
53 int height=abs (rightBottom.y-leftTop.y);
54 return 2*(width+height);
55 }
56 private:
57 CMyPoint leftTop,rightBottom;
58 };
59 void main()
60 {
61 CMyShape *myShape=NULL;
62 CMyCircle*myCircle=new CMyCircle(CMyPoint(5,5),10);
63 CMyRectangle *myRectangle=new CMyRectangle(CMyPoint(0,0),CMyPoint(30,30));
64 //********3********
65
66 cout<<’’myCircle:’’<<’’Area=’’<<myShape->GetArea()<<’’\t’’
67 <<’’Girth=’’<<myShape->GetGirth()<<end1;
68 //********4********
69
70 cout<<’’myRectangle:’’<<’’Area=’’<<myShape->GetArea()<<’’\t’’
71 <<’’Girth=’’<<myShape->GetGirth()<<end1;
72 }
选项
答案
(1)添加语句:virtual double GetArea()=0; (2)添加语句:virtual double GetGirth()=0; (3)添加语句:myShape=myCircle; (4)添加语句:myShape=myRectangle;
解析
类CMyPoint含有成员变量x和y,抽象基类CMyShape含有两个虚函数GetArea()和GetGirth(),分别用来求图形的面积和周长。类CMyRectangle和类CMyCircle派生于类CMyShape,并都实现了抽象父类的纯虚函数,通过这两个函数可分别求得矩形的面积和周长以及圆的面积和周长。
(1)第1个标识下声明纯虚函数,纯虚函数的定义格式为:virtual<函数类型><函数名>(<参数表>)=0,由程序后面的函数体实现可知求面积纯虚函数的函数名为GetArea(),因此第1个标识下应添加“virtual double GetArea()=0;”。
(2)声明格式和(1)相同,由求周长的函数具体实现可知该函数的名为GetGirth(),因此第2个标识下应添加“virtual double GetGirth()=0:”
(3)主函数中定义了CMyShape类对象指针myShape,CMyCircle类对象指针myCircle,CMyRectangle类对象指针myRectangle,由类继承关系知,在调用子类的构造函数的时候,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类CMyRectangle和类CMyCircle的实例的时候,抽象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出“在CMyShape类构函数造内”,然后输出“在CMyCircle类构造函数内”,实例化CMyRectangle对象的过程也是如此。同时由纯虚函数的性质知,抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但是通过用子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数,myShape是基类指针,其虚函数GetArea()和GetGirth()没有实现,要求程序输出面积值和周长值,只可能是myShape指向子类对象,调用子类的函数GetArea()和GetGirth()打印输出,显然第3个标识下是myShape指向子类CMyCircle对象,即myShape=myCircle;。
(4)同理第4个标识下myShape指向子类CMyRectangle对象,即第4个标识下应添加“myShape=myRectangle;”。
转载请注明原文地址:https://www.kaotiyun.com/show/ggAp777K
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
有以下程序:#include<iostream>usingnamespacestd;classA{private:inta;public:A(inti){a=i;}void
将一个函数声明为一个类的友元函数必须使用关键字______。
下面程序的运行结果为()。#include<iostream.h>voidswap(int&a,intB){inttemp;temp=a++;a=b;b=temp;}void
下列程序的输出结果是()。#include<iostream>usingnamespacestd;intmain()于chara[]=”Hello,Test”;Char*p=a;whil
假设fin是一个文件流对象,则关闭文件的语句是______。
下面的描述中错误的是
在软件生命周期的各个阶段都会发生一系列的文件,如手册、数据和程序等,它们总称为______。
在C++语言中,访问一个对象的成员所用的运算符是______,访问一个指针所指向的对象的成员所用的运算符是______。
有以下程序段:intk=0;while(k=1)k++;while循环执行的次数是()。
有如下定义:classMA{intvalue;public:MA(intn=0):value(n){}};MA*ta,tb;其中MA类的对象名标识符是______。
随机试题
按照中图法,《马克思主义大辞典》的大类标记符号是()。
地下或半地下建筑、一类高层建筑的耐火等级不低于()级。
新星企业为增值税一般纳税企业,适用增值税率为17%,其材料按计划成本进行核算,甲材料每公斤计划成本为10元。该企业2010年2月有关甲材料收发资料如下:(1)2月1日,甲材料账面计划成本为50000元,“材料成本差异”账户月初有贷方余额1000元。(2
红外激光片(IR型)的吸收光谱峰值为
1.背景某大型工程,由于技术特别复杂,对施工单位的施工设备比同类工程的施工经验要求较高,经省有关部门批准后决定采取邀请招标方式。招标人于2011年3月8日向通过资格预审的A、B、C、D、E五家施工承包企业发出了投标邀请书,五家企业接受了邀请并于规定时间内
中国公民A、B、C、D都是非上市公司Hawk的雇员,同时,A和C还是该公司的个人投资者,2016年Hawk公司实施如下激励措施:(1)A每月工资收入10000元,2016年6月该公司为A购买价值30万元的小轿车一辆供其使用,车辆所有权登记在A名下。(2
某公司甲车间采用滚动预算方法编制制造费用预算。已知2011年分季度的制造费用预算如下(其中间接材料费用忽略不计):2011年3月31日公司在编制2011年第2季度~2012年第1季度滚动预算时,发现未来的四个季度中将出现以下情况:(1)间接人工费用预
设计名为mysupply的表单(表单的控件名和文件名均为mysupply)。表单的标题为“零件供应情况”。表单中有一个表格控件和两个命令按钮“查询”(名称为Command1)和“退出”(名称为Command2)。运行表单时,单击“查询”命令按钮后
Whatarethespeakerstalkingabout?
Therehavebeengreatadvancesinthe______ofcancer.
最新回复
(
0
)