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