操作题
请使用VC6或使用【答题】菜单打开proj1下的工程proj1。程序中位于每个“// ERROR ****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:
value = 63
number = 1
注意:只修改每个“// ERROR ****found****”下的那一行,不要改动程序中的其他内容。
#include <iostream>
using namespace std;
class MyClass {
int * p;
const int N;
public:
// ERROR *******found*******
MyClass(int val):N = 1
{
p = new int;
*p = val;
}
// ERROR *******found*******
~MyClass() {delete *p;}
friend void print (MyClass& obj);
};
// ERROR *******found*******
void MyClass::print (MyClass& obj)
{
cout << 'value =' << * (obj.p) << endl;
cout << 'number =' << obj.N << endl;
}
int main()
{
MyClass obj(63);
print(obj);
return 0;
}
【正确答案】(1)MyClass(int val):N(1) (2)~MyClass() {delete [] p;} (3)void print(MyClass & obj) 答案考生文件夹
【答案解析】[考点] 本题考查MyClass类,其中涉及动态数组、构造函数、析构函数和友元函数。构造函数的成员列表初始化格式为:私有成员(参数)……{},不能用赋值语句。析构函数使用delete语句,delete语句的语法是:delete []指针。 (1)主要考查考生对构造函数的掌握,在这里不能使用赋值语句。 (2)主要考查考生对析构函数的掌握,析构函数的delete语句要使用标识符“[]”,即delete []p;。 (3)主要考查考生对友元函数的掌握,友元函数并不属于类,因此定义时前面不用加类名和作用域符号。 友元函数考查较少,但也是很关键的,友元函数并不属于类,只是可以使用类的私有成员而已,因此定义的时候就当作普通函数处理即可。