C++静态成员和静态成员函数
1.静态成员
C++的静态成员类似于全局变量,是在程序编译后就已经分配了空间,而不同于类中的其他成员,是在为类
实例化一个对象时才为此对象的成员分配空间。因此,静态成员是不属于任何一个对象,但能够被所有对象
共享。
静态成员的作用:一般是作为所有对象所共享的数据,尽管能够使用全局变量实现此功能,但静态成员要比
全局变量更加安全,原因是有时的要求一般都是只需要该类的对象共享,而全局变量则是让所有的类的对象
共同使用。
静态成员的使用:定义在类中,前面加上static关键字,不能在类中初始化,需要在类外面或者是在主函数
之前重新定义并初始化(缺省时默认初始化为0)。
例如:
2.静态函数
C++中的静态函数也是为所有对象共有,那么就是所有的对象都使用相同的静态函数,故在静态函数中无法
直接使用非静态成员,因为非静态成员对于不同的对象来说是不同的,一般是通过this指针进行访问,而
静态函数是共享的,故不存在this指针,但是可以通过参数传递来进行访问。
静态函数的作用:一个最基本的作用就是当所有的对象都需要进行一个固定不变的操作是可以把其作为一个
静态函数来处理;而实际中静态函数一般存在是为了对静态成员进行处理(一般是初始化处理)和仅使用
静态成员的操作。
故不加,具体我也不是很清楚。
后面两点注意是直接引用了大牛的博客:
D,不能把静态成员函数定义为虚函数。静态成员函数也是在编译时分配空间,所以在程序的执行过程中不能提供多态性。
从C++书上了解了C++的静态成员和静态成员函数,但不是很清楚有什么用,在网上搜了两篇大牛写的博客看了下,
下面是我的一些总结。1.静态成员
C++的静态成员类似于全局变量,是在程序编译后就已经分配了空间,而不同于类中的其他成员,是在为类
实例化一个对象时才为此对象的成员分配空间。因此,静态成员是不属于任何一个对象,但能够被所有对象
共享。
静态成员的作用:一般是作为所有对象所共享的数据,尽管能够使用全局变量实现此功能,但静态成员要比
全局变量更加安全,原因是有时的要求一般都是只需要该类的对象共享,而全局变量则是让所有的类的对象
共同使用。
静态成员的使用:定义在类中,前面加上static关键字,不能在类中初始化,需要在类外面或者是在主函数
之前重新定义并初始化(缺省时默认初始化为0)。
例如:
class DATE
{
public: //实际中一般设为private,这里是为了在主函数中访问
static int year ;
};
int DATE::year = 10 ; //重新定义
int main()
{
DATE a1, a2 ;
cout << a1.year << endl
<< a2.year << endl
<< DATE::year << endl ; //因为不属于任何一个对象,可以直接通过类名访问
return 0 ;
}
2.静态函数
C++中的静态函数也是为所有对象共有,那么就是所有的对象都使用相同的静态函数,故在静态函数中无法
直接使用非静态成员,因为非静态成员对于不同的对象来说是不同的,一般是通过this指针进行访问,而
静态函数是共享的,故不存在this指针,但是可以通过参数传递来进行访问。
静态函数的作用:一个最基本的作用就是当所有的对象都需要进行一个固定不变的操作是可以把其作为一个
静态函数来处理;而实际中静态函数一般存在是为了对静态成员进行处理(一般是初始化处理)和仅使用
静态成员的操作。
静态函数的使用:
例如:
class DATE
{
public:
static int year ;
public:
static void init_year() ;
};
int DATE::year ;
void DATE::init_year() //注意对静态成员函数的实现时不加static
{
year = 2013 ;
}
int main()
{
DATE::init_year() ; //调用静态函数初始化静态成员
cout << DATE::year << endl ;
return 0 ;
}
说明:对静态函数的实现时不加关键字static,大牛的博客中解释是因为关键字static不是数据类型的组成部分,故不加,具体我也不是很清楚。
后面两点注意是直接引用了大牛的博客:
D,不能把静态成员函数定义为虚函数。静态成员函数也是在编译时分配空间,所以在程序的执行过程中不能提供多态性。
E,可将静态成员函数定义为内联(inline),其定义方法与非静态成员函数完全相同。
参考http://blog.csdn.net/devilkin64/article/details/5952475
C/C++静态成员变量和静态成员函数
参考http://blog.sina.com.cn/s/blog_7fa6b06f01016n13.html
11C++静态成员