Static data members不属于object的一部份,而是class的一部份,以是步伐可以在还没有生成任何object的时候就处理Static data members。但首先,你必须定义它(为它分配内存)。
你应该在.CPP文件中且在class以外的任何区域设定其初始值,例如在main()之中,或在global function中,或任何函数之外:
请注意用词上的严谨:上述“定义”动作常被误以为是“初始化”动作。如果只是单纯的初值设定动作,应该可以安排在class constructor中,但上一行绝对无法如此。此外,你也不应该把上述的定义安排于.H文件中,因为这么一来它大概会被含入许多.CPP文件中,于是就重复定义了(会发生连接错误)。
上述动作有没有思量m_rate是private数据呢?没有关系,定义static data members,不受任何封装层级的束缚。请注意上述动作也指出static data members的范例,因为这是一个定义动作,不是一个数值指定动作,如果没有做这个动作,m_rate就没有获得内存,会发生非常错误:
error LNK2001: unresolved external symbol "private: static double
4 myAccount.m_rate = 0.0072; // 此行要成立,m_rate 需改为 public
5 }
复制代码
请注意,static data members并不是因为myAccount object的实现而才得以实现,它本来就存在。因此第一种的处理方式不轻易给人错误印象; 2. Static Menber Functions(静态成员函数)
既然static data members 是超越于object之外存在的,一般的member functions能否处理它呢?要知道,,member function得经过某个object才气调用,该object地点则成为所谓的this指针,但由于static data members并不需要靠this指针的指引来决定其地点,以是其实任何函数(包罗global函数),只要access level允许,都可以处理static data members。
但member function得经过某个object才气调用,如果你在尚未产生任何object之前,就盼望透过某个member function来更我以为前例的static m_rate,而它又是private(以至于不能被global函数处理)那么肯定要写个static member function了: