C++程序分析

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:56:36
#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;
}
请帮忙分析一下输出结果并给出详细解答,谢谢!

class A
{
public:
static int a;//定义一个静态整型变量a,变量a在A类所有的对象中只存在一个拷贝
void init()//类A中一个公开的成员函数,看代码中的意思是初始化用的
{
a=1;
}
A(int a=2)//类A的构造函数,除此之外它还有一个系统默认的构造函数,这个默认的构造函数不带任何参数
{
init();a++;
}
};
int A::a=0;//给类A的静态变量赋值
A obj;//创建类A的对象,这种方法调用的是系统默认的构造函数,而不是上面写到的构造函数
int main()//程序主函数
{
cout<<obj.a;//输出类A中静态变量值
return 0;
}
静态变量是类对象共有的,一个类对象改变这个值,同一个类构造的其他变量中的这个静态的成员变量一起改变,因为对象中的静态变量在内存中是同一个地址空间

A是类,对于类来说,它本身不是一个实际存在的东西,只有再实例化了之后,才算存在。这个实例化就是建立对象。
A obj;语句就是建立对象。
这个时候可能有个问题:对象建立前,语句int A::a=0;怎么能成功,它如何给对象的成员赋值,这个对象没有建立呢。

这个时候出来的问题是static成员与普通成员的区别。
static成员是属于类的,而不是属于对象的,它是类和对象所共有的。没有建立对象时,这个static成员就存在,所有对象共享这个static成员。
所以cout<<obj.a;
输出是0.
具体可以参考C++primer一书关于static成员的讲解部分,我记得不是很清楚,讲多了怕误导!

答案是1.
解释:
1:类里有static变量,无论类是否实例化,此变量都已经存在,而且相当于全局变量,且无论类有多少个实例,此变量只有一个。int A::a=0; 这句话以后a的值变成了0.
2:class A 的构造函数是一个参数