问答题 请使用VC6或使用【答题】菜单打开 proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“// ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
The value is:10
注意:只修改注释“// ERROR ****found****”的下一行语句,不要改动程序中的其他内容。
// proj1.cpp
#include <iostream>
using namespace std;
class Member {
// ERROR *******found*******
private:
Member(int val):value(val) {}
int value;
};
class MyClass {
Member _m;
public:
// ERROR *******found*******
MyClass(int val) {}
int GetValue() const {return _m.value;}
};
int main()
{
MyClass *obj = new MyClass (10);
// ERROR *******found*******
下面语句输出obj指向类中的value值
cout << "The value is:" << obj.GetValue() << endl;
delete obj;
return 0;
}
【正确答案】
【答案解析】(1)public:
(2)MyClass(int val): _m(val){}或MyClass(int val) {_m=val}
(3)cout<<"The value is:"<<obj->GetValue()<<endl;
答案考生文件夹 [考点] 本题主要考查的是Member类和MyClass类,其中涉及构造函数、成员函数和类的指针。类的指针调用类的成员函数时要使用标识符“->”,而不是“.”,这是最容易出错的地方。私有成员使用private,公有成员使用public,保护成员使用protected,类的构造函数一定是公有成员函数。
[解析] (1)主要考查考生对私有成员和公有成员的掌握,先看改错语句的下一条语句:Member(int val):value(val) {},该语句是一个构造函数,因此我们可以得出此处为公有成员,因为构造函数不可能是私有成员。
(2)主要考查构造函数,构造函数要对类的成员进行初始化,因此在这里使用成员列表初始化,即MyClass(int val):_m(val){}或MyClass(int val){_m=val}。
(3)指针调用类的成员函数时,应使用标识符“->”。
判断该成员是公有成员还是私有成员的方法很多,不必一一死记,只要记住公有成员可以被类外函数调用,私有成员则不可以,类的构造函数一定是公有成员函数就可以了。