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

原创 2013年12月02日 21:54:56

1、静态数据成员

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

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

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

int Person::name = "Person";

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

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

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

2、静态成员函数

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

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

如:Perosn::show();

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

类的静态成员函数和静态数据成员

一、基本知识当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少...
  • will130
  • will130
  • 2015年10月10日 21:31
  • 861

c++ 静态数据成员和静态成员函数

温故而知新,闲来无事,再次捧了本c++primer 看了看,写点c++静态成员变量和成员函数吧,以前一直在用,但是有没有完全搞懂什么时候该用static 成员变量,什么时候该用static funct...

C++ 静态数据成员与静态成员函数

在类中的数据成员或成员函数定义或声明前以static关键词开头,即构成静态数据成员与静态成员函数。静态数据成员1.静态数据成员的实现class Time { public : void sho...

(转)C++静态数据成员和静态成员函数小结

类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成...

C++静态成员函数和静态数据成员

当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。...

C++中静态数据成员以及静态成员函数

类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。  静态类成员包括静态数据成员和静态函数成员两部分。  一 静态数据成...
  • julysee
  • julysee
  • 2015年03月25日 10:13
  • 154

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

静态数据成员:         静态数据成员是类的成员,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一...

c++类静态数据成员与类静态成员函数

/************************************************************  声明为static的类成员或者成员函数便能在类的范围内共同享,  我们...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:静态数据成员和静态成员函数理解
举报原因:
原因补充:

(最多只允许输入30个字)