使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:
member:1
member:10
member:100
注意:错误的语句在/********error********/的下面,修改该语句即可。其他的语句不能修改。
试题程序:
#include<iostream.h>
int i=100;
class TC
public:
TC(int i)
cout<<"member:"<<i<<end1;
/********error********/
i=i+9;
void Print()const
cout<<"member:"<<i<<end1;
private:
int i;
;
void main()
/********error********/
TC obj;
int i(0);
obj.Print();
/********error********/
cout<<"member:"<<i<<end1;
return;
参考答案:“cout<<"member:"<<i<<end1;”应改为“cout<<"member:"<<::i<<end1;”。
解析: 本题考查了考生对变量作用域的了解情况。i=i+9;语句使形参的值自增9,这样做是毫无意义的,因为形参变量值在函数结束后不会被保存。所以等号左边的变量i应引用为TC的私有成员变量,将私有成员初始化为形参i+9的值,可以通过this指针来引用,也可以通过域作用符“::”。“TC obj;”语句会产生一条编译错误,因为TC类已经定义了一条TC(int i)构造函数,C++就不会为其自动生成默认构造函数了。这就意味着,要创建TC类的对象必须带有一个int型构造函数参数。该构造函数中的第1条就是输出语句。从输出了形参i的内容来看,这个构造参数应该为1。“cout<<"member:"<<i<<end1;”语句输出了main函数中定义的局部变量i的内容,该变量被初始化为0,但这条语句已经是main()中的最后一条输出语句了,对应着第3行结果,应该输出100才对,所以该处引用的i应该是该文档中第2行定义的全局变量i。此时引用全局变量i必须通过域作用符。