《C++ 大学教程 》10.6 static类成员

1、非静态数据成员:每个类对象都有一个副本;静态数据成员:每个类有一个副本。

2、类的static数据成员只在类的作用域起作用。基本类型的static数据成员默认为0。

3、static数据成员只能且仅只能被初始化一次。Int或者枚举类型的const static数据成员可以在类定义中的声明处初始化。但是,所有其他static数据成员必须在文件作用域(即,类定义之外)进行定义和初始化。

原因:
(郑莉网络版P155)在类的定义中仅仅对静态数据成员进行引用性声明,必须在命名空间作用域的某个地方使用类名限定定义性声明,这时也可以进行初始化。之所以类的静态数据成员需要在类定义之外再加以定义,是因为需要以这种方式专门为他们分配空间。非静态数据成员无需以此方式定义,因为他们的空间是与他们所属对象的空间是同时分配的。而类的静态数据成员不属于任何对象。


文章中的图片截取自我之前学习时参考的CSDN的一篇博文,现在我找不到来源了,对原作者说声抱歉.

上图中关于 id和count的定义和初始化可以写类定义外即可(若类在.h文件中声明,在.cpp文件中定义,可以将静态数据成员的定义和初始化写在.cpp文件中或者测试.cpp文件中均可)

4、如果类类型的static数据成员具有默认构造函数,那么这样的数据成员无需初始化,因为他们的默认构造函数将会被调用。

5、static成员函数不具有this指针,因为static数据成员和static成员函数独立于类的任何对象而存在,而this指针必须指向类的具体对象。

6、声明为static的函数,不允许访问类的任何非static成员。
7、在没有类对象时,要访问类的public static成员,只需通过 类名::static数据成员 即可(编译容易出错)。还可以通过类对象访问类的public static成员。
当没有类对象,而要访问private或protected的static类成员时,应提供public static成员函数,并通过 类名::函数名 的方式来调用此类函数。

我之前刷过的一道题有涉及到关于static数据成员和static函数的具体实现,感兴趣的话可以去看看。点下这个超链接就好了啊

发布了11 篇原创文章 · 获赞 7 · 访问量 5250

猜你喜欢

转载自blog.csdn.net/qq_35591140/article/details/105739081