问答题 请使用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函数。