请朋友们帮我解答一下这道C语言的题目.特别是this->a += a;和a+=::a;这两句什么意思

#include<iostream.h>
int a=10;
class CObj
{
public:
CObj()
{
a = b= 0;
}
void display()
{
//********error********
cout<<a<<b<<endl;
}
void func(int a)
{
//********error********
this->a += a;
}
void func2()
{
//********error********
a+=::a;
}
private:
int a,b;
};
void main()
{
CObj obj;
obj.func(3);
obj.display();
obj.func2();
obj.display();
}
输出结果是什么?? 最好步骤详细点!!谢谢各位啦

::a指的是int a=10;中的a
this->a指的是int a,b;中的a
void func(int a)
{
//********error********
this->a += a;//this指的是类,this->a是指这个类所定义的变量a; 等号后面的a是函数参数的a, 加this是为了区分这两个a; 如果变量名不同时可以省去this关键字,如test这个函数中的a同样是指类的a,但因为传入参数名为 t ,所以省去this
}

void test(int t)
{
//********error********
a += t;
this->func(a);//这样调用等于a++
}

void func2()
{
//********error********
a+=::a;//指的是"int a,b;"中的a 加"int a=10;"中的a
//第一个中类内定义的a ,第二个 是类外部定义的a,

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-14
这个问题很有意思

我们直接看main函数吧,
首先定义了一个CObj对象,这个对象默认初始化对象成员a和b都为0 (我强烈建议不要这么写,类和变量命名不要这样)。
然后调用对象的func方法,将对象中的a属性赋值为3
接着调用对象的输出函数,这个时候a=3,b=0,所以输出为30

然后他又掉用对象的func2方法,将属性a的值加上最外面定义的变量a,即3+10=13.
最后输出结果,这个时候a=13 ,b=0,所以输出130

代码运行的最后结果是
30
130本回答被提问者采纳
第2个回答  2011-09-14
从主函数开始
CObj obj; //用类CObj定义对象obj,此时调用构造函数,把a和b赋值为0.
obj.func(3);//调用func函数,执行this->a += a;
//this->a中this是系统默认的指针,指向当前的对象,this->a实际就是调用obj中的私有成员a,为了区别形参a
//b是一个变量b +=a;等价于 b=b+a;这句话把私有成员a加了3(传入的参数)
obj.display();//调用函数display,将a,b输出
obj.func2();//调用函数func2
//::是作用域运算符,在这里能使用作用域更大的全局变量a,(本来由于类中已有一个同名变量,不可使用)
//这句话作用就是把a加上了全局变量a,变为13
obj.display();//再次把a、b输出

结果:
30
130
第3个回答  2011-09-14
什么东东!
相似回答