通过对象名能够访问public成员变量,每个对象的成员变量都是专属的,成员变量不能再对象之间共享,先来看一个例子:
#include <stdio.h>
class Test
{
private:
int mCount;
public:
Test() : mCount(0)
{
mCount++;
}
~Test()
{
--mCount;
}
int getCount()
{
return mCount;
}
};
Test gTest;
int main()
{
Test t1;
Test t2;
printf("count = %d\n", gTest.getCount());
printf("count = %d\n", t1.getCount());
printf("count = %d\n", t2.getCount());
return 0;
}
结果:
sice@sice:~$ g++ a.c
sice@sice:~$ ./a.out
count = 1
count = 1
count = 1
这是因为我们定义的mCount是一个成员变量,而成员变量是每个对象自己都有一套的,也就是说gTest,t1,t2分别拥有一个mCount,如果想要打印出3就要引入静态成员变量(不建议使用全局变量,不安全)
静态成员变量:
静态成员变量属于整个类所有,它的生命期不依赖于任何对象,可以通过类名直接访问公有静态成员变量,所有对象共享类的静态成员变量,可以通过对象名访问公有静态成员变量
特性:
定义时直接通过static关键字修饰
静态成员变量需要在类外单独分配空间
静态成员变量在程序内部位于全局数据区
语法:
Type ClassName::VarName = value;
修改代码:
#include <stdio.h>
class Test
{
private:
static int mCount;
public:
Test()
{
mCount++;
}
~Test()
{
--mCount;
}
int getCount()
{
return mCount;
}
};
Test gTest;
int Test::mCount = 0;
int main()
{
Test t1;
Test t2;
printf("count = %d\n", gTest.getCount());
printf("count = %d\n", t1.getCount());
printf("count = %d\n", t2.getCount());
return 0;
}
sice@sice:~$ gedit a.c
sice@sice:~$ g++ a.c
sice@sice:~$ ./a.out
count = 3
count = 3
count = 3