使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为: 30 130 注意:错误的语句在//******error******的下面,修改该语句即可。

admin2019-05-14  32

问题 使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:
    30
    130
    注意:错误的语句在//******error******的下面,修改该语句即可。
1  #include<iostream.h>
2  int a=10;
3  class CObj
4  {
5  public:
6    CObj()
7    {
8    a=b=0;
9    }
10    void display()
11    {
12    //******error********
13    cout<<a<<b<end1;
14    }
15    void func(int a)
16    {
17   //******error******
18    a+=a;
19    }
20    void func2()
21    {
22    //******error******
23    a+=a;
24    }
25  private:
26    int a,b;
27  };
28  void main()
29  {
30    CObj obj;
31    obj.func(3);
32    obj.display();
33    obj.func2();
34    obj.display();
35  }

选项

答案(1)cout<<a<<b<<end1; (2)this->a+=a; (3)a+=::a;

解析 程序当中定义了全局变量a和类CObj,类CObj含有成员变量a和b,类CObj的变量a和全局变量a均为整型变量,名字完全一样,使用时需要注意区分。类CObj成员函数display()打印变量a和b的值,func(int a)函数和func2()均使类成员变量a增加,但是增加方式不同。
    (1)成员函数display()打印变量a和b的值,即cout输出a和b的值,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,因此第1个标识下应改成cout<<a<<b<<end1。
    (2)在func(int a)中,参数a传递进来,其和成员变量a名字一样,因此第2个标识下的“a+=a”有歧义,从程序的运行结果来分析,CObj obj声明对象obj,初始化类成员变量a和b均为0,调用func函数后输出30,说明a为3,b:为0,因此这里应该是成员变量与参数a的和赋给成员变量a,正确的写法是“this->a+=a;”。
    (3)func2()函数虽然没有参数,但是成员变量a和全局变量a重名,第3个标识下“a、+=a”也会有歧义,分不清楚是全局变量加倍还是类成员变量加倍或者其他情况,调用func2()函数后,输出“130”,说明a为13,b为0,因此是成员变量与全局变量a的和赋给成员变量a,正确的写法是“a+=::a;”,“::a”表示是全局变量a。
转载请注明原文地址:https://jikaoti.com/ti/UvA0FFFM
0

最新回复(0)