C++------類靜態成員

理解

類靜態成員獨立於任何對象,與類本身直接相關,爲所有對象所共享。

分類

類靜態數據成員

類靜態成員函數

聲明

在成員聲明前加關鍵字static,靜態成員可以是public的或private的。

class A{
public:
    static double rate()
    static int num;
private:
    static initrate();
    static double rate;
};

定義

對於成員函數,既可以在類內部定義,也可以在類的外部定義,在外部定義是不能重複關鍵字static。

對於靜態數據成員,一般必須定義在類的外部定義和初始化。 

靜態成員的類內初始化

我們可以爲靜態成員提供const整數型類內初始值,不過要求靜態成員必須是字面值常量類型的constexpr。

calss B{
public:
//...
private:
    static constexpr int period = 30;
};

使用

可以通過作用域運算符訪問,也可以通過類的對象訪問。

//作用域運算符
double r = A::rate();
//類對象
A a;
a.rate();
#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include <iostream>
#include <string>
class Employee{
public:  
    
    //默認構造函數
    Employee(){
        name = "None";
        mynu = ++number;
    }
    //構造函數
    Employee(std::string &n){
        name = n;
        mynu = ++number;
    }
    //打印員工信息
    void display(){
        std::cout << this->name << ':' << this->mynu << std::endl;
    }

private:  
    static int number; //遞增證件號
    std::string name;
    int mynu;
};
#endif


#include "ex13_18.h"
using namespace std;

int Employee::number = 0;//初始化靜態證件號
int main(){
    Employee a;
    string s = "chen";
    Employee  b(s);
    a.display();
    b.display();
    return 0;
}

若將int Employee::number定義在main函數內部,會出現error:qualified-id in declaration before '=' token。

 

靜態成員與普通成員區別

1、靜態數據成員可以是不完全類型。特別的,靜態數據成員可以是它所屬類型。

2、我們可以使用靜態成員作爲默認實參。普通成員不能作爲默認實參,因爲其本身爲對象的一部分。


class Name{
public:
    //靜態成員爲默認實參
    func(var = num);
private:
    static int num;
    //靜態成員爲不完全類型
    static Name obj1;
};



 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章