问答题
请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2,此工程中包含一个头文件number.h,其中包含了类Number、OctNumber、HexNumber和DecNumber的声明;包含程序文件number.cpp,其中包含了上述类的成员函数toString的定义;还包含程序文件proj2.cpp,它以各种数制格式显示输出十进制数11。请在程序中的横线处填写适当的代码并删除横线,以实现上述功能。此程序的正确输出结果应为:
013,11,OXB
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
//mumber.h
class Number{
protected:
int n;
static char buf[33];
public:
Number(int k) :n(k) {}
//********** found**********
______;
//纯虚函数toString的声明
};
class HexNumber: public Number{
//16进制数
public:
//********** found**********
______//构造函数,参数名为k
const char* toString()const;
};
class OctNumber: public Number{
//八进制数
public:
OctNumber(int k):Number(k) {}
const char* toString()const;
};
class DecNumber: public Number{
//十进制数
public:
DecNumber(int k):Number(k){}
const char* toString()const;
};
//mumber.cpp
#include "Number.h"
#include <iostream>
#include <iomanip>
#include <strstream>
using namespace std;
char Number::buf[33] ="";
const char * HexNumber:: toString
()const
{
strstream str(buf,33);
str << hex << uppercase << showbase << n <<ends;
return buf;
}
const char * OctNumber::toString
()const
{
strstream str(buf, 33);
str << oct << showbase << n << ends;
return buf;
}
const char * DecNumber:: toString
()const
{
strstream str(buf,33);
str << dec << n << ends;
return buf;
}
//proj2.cpp
#include "Number.h"
#include <iostream>
using namespace std;
void show(Number& number)
{
//********** found**********
______; //按既定的数制显示输出参数对象number的值
}
int main ( )
{
show(OctNumber(11)); cout << ',';
show(DecNumber(11)); cout << ',';
//********** found**********
______; //以16进制格式输出十进制数11
cout << endl;
return 0;
}
【正确答案】(1)virtual const char*toString()const=0
(2)HexNumber(int k):Number(k){}
(3)cout<<number.toString()
(4)show(HexNumber(11))
【答案解析】[考点] 本题考查的是Number类及其派生类:HexNumber,OctNumber和DecNumber,其中涉及纯虚函数和构造函数。
[解析] (1)主要考查考生对纯虚函数的掌握,参考在派生类中该函数的定义:const char*toString()const;可知,纯虚函数应该写为:virtual const char*toString()const=0;。
(2)主要考查考生对构造函数的掌握,构造函数应使用成员列表初始化。
(3)主要考查考生对纯虚函数的掌握,程序要求按既定的数制显示输出参数对象number的值,直接调用纯虚函数,可以使派生类调用自身定义的函数。
(4)主要考查考生对派生类的掌握,使用十六进制的派生类初始为11,就可以调用该派生类的toString函数。