操作题
请使用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指针。