看看下面程序的输出结果,为什么

来源:百度知道 编辑:UC知道 时间:2024/05/16 07:48:11
#include"iostream.h"
class A
{
public:
static int a;
void init()
{
a=1;
}
A(int a=2)
{
init();
a++;
}
};
int A::a=0;
A obj;
int main()
{
cout<<obj.a;
return 0;
}
哪位高手指点一下

输出结果为1,因为A obj是调用构造函数A(int a=2)创建对象obj,这个括号里面的a的作用域就只起赋值作用,在A中调用init()函数,a=1,然后a++变为2,但是注意到cout<<obj.a; 这就相当于a=1后再cout<<a++,所以是先输出a=1,然后再++的。

输出1

楼上的前面说的对,定义obj的是调用构造函数,但后面说的不对,构造函数里面定义的a是属于构造函数,是局部变量,不是类A里面的静态变量a,他在调用init()时被改变值1,其他时候都没有改变

还有写成cout<<A::a;更好~