在本例中,将看到类的静态成员可以是本身所定义的类类型。也只有static类成员才可以如此定义,否则,成员变量只能定义成类的引用或指针。
class C中含有两个构造函数:C(std::string)及C(C* p)。前者为私有构造函数,故只能被静态成员外部定义时使用。
静态成员的定义分成二步:必需分为类内声明、和类外定义。本例中用"icanth"初始化对象stc_c的_name。
#include <iostream>
#include <string>
class C
{
private:
static C stc_c; // 类内声明
C* p_c;
std::string _name;
private:
C(std::string name):_name(name) { }
public:
C( C* p = & stc_c ): p_c (p), _name( "undef" ) { }
void print();
};
void C::print() {
std::cout << "The static name is : " << p_c->_name << '\n'
<< "The object name is " << _name << std::endl;
}
C C::stc_c("icanth"); // 类外定义
void test(char * args[], int argc)
{
C c;
c.print();
}
运行截图