问答题 使用VC++6.0打开 下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,其输出的结果为
30
130
注意:错误的语句在//******error******的下面,修改该语句即可。
试题程序:
#include<iostream.h>
int a=10;
class TC
{
public:
TC()
{
a=b=0;
}
void display()
{
//******error******
cout<<a<<b<endl;
}
void func(int a)
{
//******error******
a+=a;
}
void func2()
{
//******error******
a+=a;
}
private:
int a,b;
};
void main()
{
TC obj;
obj.func(3);
obj.display();
obj.func2();
obj.display();
}
【正确答案】
【答案解析】(1)应改为“cout<<a<<b<<endl;”。
(2)应改为“this->a+=a;”。
(3)应改为“a+=::a;”。
答案考生文件夹 [解析] 成员函数display打印变量a和b的值,即cout输出a和b的值,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,第1处的语句应改成“cout<<a<<b<<endl”。在func(int a)中,参数a传递进来,其和成员变量a的名称一样,因此第2处的“a+=a”有歧义,从程序的运行结果来分析,TC obj声明对象obj,初始化类成员变量a和b均为0,调用func函数后输出30,说明a为3,b为0,因此这里应该是成员变量与参数a的和赋给成员变量a,正确的写法是“this->a+=a;”。func2函数虽然没有参数,但成员变量a和全局变量a重名,第3处的“a+=a”也会有歧义,分不清楚是全局变量加倍还是类成员变量加倍或者其他情况,调用func2函数后,输出“130”,说明a为13,b为0,因此是成员变量与全局变量a的和赋给成员变量a,正确的写法是“a+=::a;”,“::a”表示是全局变量a。