二、程序改错题
(1)应改为“TC(inti):Number(i)”。
(2)应删除“returnNumber;”。
(3)应改为“TC*p=newTC(7);”
【解析】本题第1处是声明构造函数,并使用初始化列表完成成员变量的初始化,可知第1处的初始化列表错误,正确的应该是“TC(inti):Number(i)”。构造函数不能有返回值,不能用return来返回值,故第2处应将“returnNumber;”删除。类实例在不指定构造函数的情况下,调用的是默认无参数的构造函数,此时成员变量Number是不确定的,在定义对象时,应使用已定义的构造函数,根据输出结果可知,P指向的对象的Number初始化值为7,故第3处应改为“TC*p=newTC(7);”。
三、简单应用题
intresult=0;
for(inti=11;i<=n;i++)
{
if((i%7==O)&&(i==0))
{
result+=i:
}
}
returnresult;
【解析】本题利用循环查找所有小于等于n的能被7和11整除的数,循环变量i从最小值11开始,到n结束,即11<=i<=n。在函数中定义累加变量result用来保存求和结果,在循环体内,逐个判断每个i是否能被7和11整除,即(i%7==0)和(i==0)都满足的话,说明i能同时被7和11整除,将该值加到resuh上,循环结束返回result。
四、综合应用题
(1)应添加“virtualdoubleGetArea()=0;”。
(2)应添加“virtualdoubleGetGirth()=0;”。
(3)应添加“myShape=myCircle;”。
(4)应添加“myShape=myRectangle;”。
【解析】本题在第1处声明纯虚函数,纯虚函数的定义格式为“virtual<函数类型><函数名>(<参数表>)=0”,由程序后面的函数体实现可知求面积纯虚函数的函数名称为GetAr-ea,因此第1处应添加“virtualdoubleGetArea()=0;”。声明格式和1处相同,由求周长的函数具体实现可知该函数的名称为GetGirth,因此第2处应添加“virtualdoubleGetGirth()=0;”。主函数中定义了CMyShape类对象指针myShape,CCir-cle类对象指针myCirele,CRectangle类对象指针myRectan-gle。由类继承关系知,在调用子类的构造函数时,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类CRectangle和类CCircle的实例时,抽象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出“在CMy-Shape类构造函数内”.然后输出“在CCircle类构造函数内”,实例化CRectangle对象的过程也是如此。同时由纯虚函数的性质知,抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但通过用子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数,myShape是基类指针,其虚函数GetArea和GetGirth没有实现,要求程序输出的面积值和周长值,只可能是myShape指向子类对象,调用子类的函数GetArea和GetGirth打印输出,显然在第3处是myShape指向子类CCircle对象,即“myShape=myCirele;”。同理第4处myShape指向子类CRectangle对象,即第4处应添加“myShape=myRectangle;”。
2015年全国职称计算机考试教材(2007模 .. 定价:¥225 优惠价:¥213 更多书籍 | |
全国职称计算机考试速成过关系列套装:W .. 定价:¥133 优惠价:¥133.0 更多书籍 |