操作题   请使用VC6或使用[答题]菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
    The extension is:CPP
    注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。
    // proj1.cpp
    #include <iostream>
    using namespace std;
    class MyClass {
    char * p;
    public:
    MyClass(char c)
    {p = new char; * p=c;}
    // ERROR ******** found********
    MyClass (const MyClass copy) { p =new char; * p = * (copy.p); }
    // ERROR ******** found********
    下列析构函数用于释放字符指针
    ~MyClass() { free p; }
    MyClass& operator = (const MyClass & rhs)
    {
    if ( this == &rhs ) return * this;
    *p = * (rhs.p);
    // ERROR ******** found********
    return this;
    }
    char GetChar() const { return * p; }
    };
    int main()
    {
    MyClass obj1('C'), obj2 ('P');
    MyClass obj3(obj1);
    obj3 = obj2;
    cout << 'The extension is:'
    <<obj1.GetChar () <<obj2.GetChar()
    <<obj3.GetChar () << endl;
    return 0;
    }
 
【正确答案】MyClass(const MyClass & copy) {p=new char; *p=*(copy.p);} ~MyClass() {delete p;} return *this;
【答案解析】[考点] 本题考查MyClass类,其中涉及动态数组、构造函数、复制构造函数、析构函数和运算符重载。 (1)主要考查考生对复制构造函数的掌握,复制构造函数的形参是引用调用。 (2)主要考查考生对析构函数的掌握,析构函数使用delete语句释放指针。 (3)主要考查考生对this指针的掌握,函数要求返回MyClass,可知要返回的是this指针指向的当前类,而非tins指针。