关闭

静态数据成员和静态成员函数理解

320人阅读 评论(0) 收藏 举报
分类:

1、静态数据成员

静态数据成员其特殊点在于它以关键字static开头。静态数据成员我们也可以叫它共享数据,原因在于一旦我们在一个类中定义了一个或多个静态数据成员,即使我们不创建对象也可以引用这些数据成员。如果只声明了类而没有定义对象,类中的一般数据成员是不占内存空间的。需要注意的是:静态数据成员不属于某一个对象,不会占用某一个对象的内存空间。所有的对象,都可以引用这些静态数据成员。

静态数据成员的生命周期从程序运行开始到主程序运行结束,其所占的内存空从编译被分配,直到程序运行结束才释放。

静态数据成员可以被初始化,而且只能在类外进行初始化。例如:

int Person::name = "Person";

注意不能再初始化参数列表里对静态数据成员进行初始化。

Person(string n):name(n){}    //错误,name被定义为静态数据成员

静态数据成员既可以通过对象引用,也可以通过类名来引用。通过类名引用应该加对象名和成员运算符“.”。

2、静态成员函数

成员函数也可以被定义为静态的。一般声明格式:static 数据类型 函数名();

静态成员函数是类的一部分,不是对象的一部分。在类外调用公用静态成员函数,要用类名和域限定符::,静态成员函数是用来处理静态数据成员。

如:Perosn::show();

回顾一般成员函数的调用过程:当调用一个函数的成员函数时,系统会把该对象的起始地址赋给成员函数的this指针,然后执行成员函数。

但是静态成员函数不属于某一个对象,没有this指针,就无法对一个对象中的非静态成员进行默认访问。静态成员函数与非静态成员函数的根本区别在于:非静态成员函数有this指针,而静态成员函数没有this指针。这就决定了静态成员函数不能访问本类中的非静态成员。
静态成员函数可以直接引用本类中的静态数据成员,因为静态数据成员同样属于本类的,可以直接引用。在一个C++程序中,静态成员函数可以访问静态数据成员,但是不可以访问非静态数据成员。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9600次
    • 积分:36
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:6篇
    • 译文:0篇
    • 评论:6条
    最新评论