问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: Base:Good Luck! Derived:Good Luck! 注意:只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。 //praj1.cpp #include <iostream> #include <cstring> using namespace std; class Base { // ERROR ******** found******** private: char* msg; public: Base(char* str) { // ERROR ******** found******** msg:new char[strlen(str)]; strcpy (msg, str); cout << "Base: " <<msg << endl; } // ERROR ******** found******** ~Base() { delete msg; } }; class Derived:public Base { public: Derived (char* str):Base(str) {} void Show () { cout <<"Derived:" <<msg << endl; } }; int main ( ) { Derived obj ("Good Luck! "); obj.Show(); return 0; }
【正确答案】(1)protected: (2)msg=new char[strlen(str)+1]; (3)~Base(){delete[]msg;}
【答案解析】[考点] 本题考查Base类及其派生类Derived,其中涉及动态数组、构造函数、strcpy()函数和析构函数。 [解析] (1)主要考查保护成员,因为在Base类的派生类中直接调用了msg,所以这里应该是保护成员。 (2)主要考查考生对动态分配的掌握,由下一条语句:strcpy(msg, str);可知,程序要将字符串str复制给msg,因此要给msg分配空间,空间大小应该为str的长度加1。 (3)主要考查考生对析构函数的掌握,delete语句要加上标识符“[]”。