问答题 请使用VC6或使用【答题】菜单打开 proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“// ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
Constructor called.
The value is 10
Max number is 20
Destructor called.
注意:只能修改注释“// ERROR ****found****”的下一行语句,不要改动程序中的其他内容。
// proj1.cpp
#include <iostream>
using namespace std;
class MyClass {
public:
// ERROR ********found********
void MyClass (int i)
{value = i; cout << "Constructor called." << endl;}
int Max (int x, int y) {return x>y ? x : y;} //求两个整数的最大值
// ERROR *******found*******
int Max(int x, int y, int z = 0)
//求三个整数的最大值
{
if (x > y)
return x>z ? x : z;
else
return y>z ? y : z;
}
int GetValue () const {return value;}
~MyClass () {cout << "Destructor called." << endl;}
private:
int value;
};
int main()
{
MyClass obj(10);
// ERROR *******found*******
cout << "The value is" << value() << endl;
cout << "Max number is" << obj.Max(10,20) << endl;
return 0;
}
【正确答案】
【答案解析】(1)MyClass(int i)
(2)int Max(int x,int y,int z)
(3)cout<<"The value is"<<obj.GetValue()<<endl;
答案考生文件夹 [考点] 本题考查MyClass类、构造函数、析构函数、成员函数和函数重载。函数重载必须要求形参类型不同,或者形参个数不同。
[解析] (1)考查构造函数,构造函数前不加void或其他任何类型名,直接使用MyClass(int i)即可。
(2)主要考查函数重载,在
int Max(int x,int y) {return x>y? x:y;}中两个形参变量都是int型,而语句int Max(int x,int y,int z=0)的前两个形参也都是int型,第三个形参定义默认值,那么这两个Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参个数不同,所以要把int z = 0改为int z,才能构成函数重载。
(3)主要考查成员函数的调用,因为value是私有成员,所以不能被类外函数直接调用,而且value()的用法也是错误的,可以使用成员函数obj.GetValue()得到value的值。