操作题   请使用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语句要加上标识符“[]”。