静态变量和静态函数

  • 对于类的静态成员变量,只有static const int类型和 enum 类型能在类里面初始化,其他只能在.cpp里初始化,但不能在类体内初始化,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。

  • 静态成员函数和静态变量在类体外初始化时,无须加static关键字,否则是错误的。

  • 静态变量不参与sizeof计算

  • 静态成员仍然遵循public,private,protected访问准则。

  • 静态成员函数只能调用静态变量,因为没有this指针

  • 非静态成员函数可以任意地访问静态成员函数和静态数据成员。

  • 静态成员函数不能声明为虚函数

  • 静态成员函数与成员函数同名同参数,也就是静态和非静态函数不能重载,否则编译器不知调用哪个

举例:

// 头文件
class Obj
{
private:
    Obj() {}
    static Obj* instance;

public:
    static Obj* getInstance();
    static const int n = 12;
    static int n;
};
//源文件
Obj* Obj::instance=0;   //类外定义
int Obj::n = 4;        //类外定义
Obj* Obj::getInstance()
{
    if(!instance)
    {
        instance = new Obj();
    }
    return instance;
}

参考:
Essential C++ 115页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值