读书人

以上程序中b的值为什么为2

发布时间: 2012-08-28 12:37:01 作者: rapoo

以下程序中b的值为什么为2?
#include "stdafx.h"
#include <iostream>
using namespace std;
class XA{
int a;
public:
static int b;
XA(int aa):a(aa) {b++;}
int getA(){return a;}
};
int XA::b=0;
int main()
{
XA d1(4),d2(5);
cout<<d1.getA()+d2.getA()+XA::b+d1.b<<endl;
cin.get();
return 0;
}


[解决办法]
b是这个类的静态成员 所有对象共享这个b

XA d1(4),d2(5);有2个对象构造 b++后等于2
[解决办法]
静态变量是属于类的,不属于对象, 相当于全局变量,
构造函数被调用了两次, b自加了两次,所以是2.
[解决办法]
调用了两次构造函数,所以结果是2
XA(int aa):a(aa) {b++;}
[解决办法]
4+5+2+2=13.楼主用什么编译器?
[解决办法]
类中的静态成员变量是类的属性,不是对象的属性。所以,可以直接通过类来引用它,如 XA::b。同时它对所有对象又是可见的,即所有对象也可以引用它(不考虑类访问控制标识,假定静态成员变量是 public 的),如d1.b; 并且任何一个对象对它的修改对其它对象都是可见的。可以把它想像成是属于一个类的一片共享存储区。

在楼主的例子中,实例化了了两个 XA 类型的对象,每一次实例化,都会调用构造函数,而构造函数中对静态成员变量 b 进行了自加操作 b++; 经过两次自加,b 就变成了 2. 无论是对类,还是对所有的实例对象,它都是 2。

希望楼主能够理解,Good Luck!
[解决办法]
因为调用了两次构造函数。

读书人网 >C++

热点推荐