P10 扩展补充:模板类,函数模板,及其它
1、静态
1.1 概念
静态成员数据是所有的对象用的同一个数据;
静态成员函数没有this,只能处理静态成员数据。
静态数据一定要在class的外面定义,是否设置初值都可以。
调用static函数的方式有两种:
(1)通过class name调用
(2)通过object调用
class Account{
public:
static double m_rate;
static void set_rate(const double& x) { m_rate = x; }
};
double Account::m_rate = 8.0;//静态数据一定要在class的外面定义
int main(){
Account::set_rate(5.0);//通过class name调用
//通过object调用
Accout a;
a.set_rate(7.0);//编译器不会给静态函数调用this指针,因此参数列表里自然不会有this
}
1.2 把ctors放在private中
Meyers Singleton设计模式
class A{
public:
//仅通过一个静态函数取得a
static A& getInstance();
setup() {...}
private:
//将构造函数设为私有类型,不允许外界创建
A();
A(const A& rhs);
...
};
//这样写可以避免浪费空间,仅在需要用到该类型时才定义。
A& A::getInstahce()
{
static A a;
return a;
}
A::getInstance().setup();