蹒跚前行者
类static成员引进:有时特定类的全体对象需要访问一个全局对象。
★为什么用static成员而不是全局对象?
---- static对象名字在类作用域中,可以有效避免命名冲突,并且清晰显示程序意图。
---- 可以实施封装(static成员可以定义为private,而全局对象不可以)
★ 如何调用? ---- class A a; A::static_mem; a.static_mem;
★ 声明和定义
---- static成员函数在类定义体内部外部定义均可。在类定义体外定义时不加(不可以加)static修饰。
---- static数据成员必须在类定义体外部定义(正好一次)(在类定义体外声明并定义)
class A{public : static int n;} int A::n = 10;
---- const static数据成员可以(也可以不)在类定义内初始化,但必须在类定义体外部重新声明(不可以加static修饰符,不可以赋初值)
★ static数据成员其他特性:
----一般地,在类的内部不能有该类类型的变量(或函数形参),最多只能有该类类型的指针或引用做变量类型(或函数形参). static数据成员则不受这个限制。
---- 类的static数据成员可以作为函数默认实参 ---- static成员的继承:如果基类有static成员,则整个继承层次中只有一个这样的成员。每个static成员总是只有一个实例。
posted on 2010-01-08 12:22 幸运草 阅读(1501) 评论(6) 编辑 收藏 引用 所属分类: C++
为啥要在类外面写一次定义呢?为了初始化? 回复 更多评论
@Sunshine Alike static成员变量的初始化必须是在类定义体外面的,类定义体内其实只是声明。 回复 更多评论
@幸运草嗯,这个我知道,只是觉得这种写法有点不好看,呵呵,类里的东西要写在外面干嘛不能写成在类体里面进行初始化class A{public: static int n = 10;}; 回复 更多评论
@Sunshine Alike 因为在C++中类只是一种类型,内存中并没有给它分配空间,所以在类体内是不能有赋初值的操作的。 static成员变量不像其他普通类成员变量可以通过构造函数赋值,所以只能在类的定义体外定义并初始化它了 回复 更多评论
输出类类型静态成员变量的值必须重载操作符么?还有什么别的办法没有? 回复 更多评论
@nic 我的示例里静态成员并不是通过重载的操作符输出的。直接通过A::a获取,然后用cout输出的。 至于重载操作符,只是我的一种习惯,平时只是验证一些小知识点写的代码,一般都需要输出看结果,我还懒得对每个private数据成员都定义一个get函数然后输出。所以。。。 回复 更多评论
Powered by: C++博客 Copyright © 幸运草