六一的部落格


关关难过关关过,前路漫漫亦灿灿。



使用关键字static

不属于任何对象. 独立于任何对象, 和所有对象共通, 都可以使用

可以是静态数据成员, 也可以是静态函数成员


静态函数成员

  1. 无this指针
  2. 不能声明成const

定义静态函数成员

只在声明时使用static关键字

 1class Account
 2{
 3public:
 4    void calculate() { amount += amount * interestRate; }
 5
 6    static double rate() { return interestRate; }
 7    static void rate(double);
 8
 9private:
10    // 每个Account对象包含两个数据成员,owner和amount
11    string owner;
12    double amount;
13
14    // 只存在一个interestRate对象,被所有Account对象共享
15    static double interestRate;
16
17    static double initRate();
18};
19
20void Account::rate(double newRate)        // 无static关键字
21{
22    interestRate = newRate;
23}

静态数据成员

静态数据成员在整个继承体系中只有一个实例

可以是不完全类型

因为静态数据成员不属于某个对象,常量成员函数中可以对其执行写操作


定义静态数据成员

不由类的构造函数定义

在类的外部定义. 只能被定义一次

建议在把静态数据成员的定义和类的实现放在一起

1// interestRate和initRate()都是私有成员,但和私有成员函数一样,可以在类外定义
2// 和其他成员的定义一样,interestRate的定义可以访问类的私有成员
3// 同样,无static关键字
4double Account::interestRate = initRate();

可以将静态数据成员用作默认实参


访问静态成员

可以通过作用域运算符访问 ::

也可以通过类对象访问

在成员函数中可以直接访问


类的静态成员


使用关键字static

不属于任何对象. 独立于任何对象, 和所有对象共通, 都可以使用

可以是静态数据成员, 也可以是静态函数成员


静态函数成员

  1. 无this指针
  2. 不能声明成const

定义静态函数成员

只在声明时使用static关键字

 1class Account
 2{
 3public:
 4    void calculate() { amount += amount * interestRate; }
 5
 6    static double rate() { return interestRate; }
 7    static void rate(double);
 8
 9private:
10    // 每个Account对象包含两个数据成员,owner和amount
11    string owner;
12    double amount;
13
14    // 只存在一个interestRate对象,被所有Account对象共享
15    static double interestRate;
16
17    static double initRate();
18};
19
20void Account::rate(double newRate)        // 无static关键字
21{
22    interestRate = newRate;
23}

静态数据成员

静态数据成员在整个继承体系中只有一个实例

可以是不完全类型

因为静态数据成员不属于某个对象,常量成员函数中可以对其执行写操作


定义静态数据成员

不由类的构造函数定义

在类的外部定义. 只能被定义一次

建议在把静态数据成员的定义和类的实现放在一起

1// interestRate和initRate()都是私有成员,但和私有成员函数一样,可以在类外定义
2// 和其他成员的定义一样,interestRate的定义可以访问类的私有成员
3// 同样,无static关键字
4double Account::interestRate = initRate();

可以将静态数据成员用作默认实参


访问静态成员

可以通过作用域运算符访问 ::

也可以通过类对象访问

在成员函数中可以直接访问