靜態成員變量 與 靜態成員函數

//
//  main.cpp
//  靜態成員變量
//  靜態成員函數
//  Created by mac on 2019/4/29.
//  Copyright © 2019年 mac. All rights reserved.
//  若是一個成員變量被聲明爲static,那麼該類的全部對象均可以訪問該變量。
//  若是一個成員函數被聲明爲static,那麼他能夠在類的任何實例化以前被調用。
//  成員函數加上const以後,就不能在此成員函數中對成員變量進行修改了。這個修改包括改變數值大小,賦值操做等。
//  能夠建立一個由同一個類的全部對象共享的成員變量。要建立這樣的成員,只須要將關鍵字static放在變量聲明的前面
//  注意:聲明提供了有關變量或函數的存在和類型的信息      而定義則提供了聲明中包含的全部信息,另外還將爲被定義的變量與函數分配內存
//  靜態成員變量必須在類中聲明,並在類外部進行定義。
//  純虛函數就是C++的接口
//  靜態成員函數沒法訪問非靜態變量

#include <iostream>

using namespace std;

class Widget{
private:
    double price;
    int quantity;

public:
    Widget(double p,int q){
        price=p;
        quantity=q;
    }
    
    double getPrice() const{
        return price;
    }
    
    int getQuantity() const{
        return quantity;
        // quantity++; //報錯,不能對成員變量進行修改。
    }
    
};

class StatDemo{
private:
    static int x;//靜態成員的聲明
    int y;
public:
    void setx(int a) const{x=a;}
    void sety(int b) {y=b;} //此處對成員函數進行const是錯誤的
    int getX(){return x;}
    int getY(){return y;}
    static int addSame();
};

int StatDemo::addSame(){
    return x+x; //靜態成員函數只能訪問靜態成員變量
}

int StatDemo::x;//靜態成員的定義

int main(int argc, const char * argv[]) {
    
    Widget w1(14.5,100),w2(12.75,500);
    
    cout<<w1.getQuantity()<<" "<<w2.getQuantity()<<endl;
    
    StatDemo obj1,obj2;
    obj1.setx(5);
    obj1.sety(10);
    obj2.sety(20);
    cout<<obj1.getX()<<" "<<obj2.getX()<<endl;
    cout<<obj1.getX()<<" "<<obj2.getY()<<endl;
    return 0;
}

運行結果

100 500
5 5
5 20
Program ended with exit code: 0

參考文獻

  • 《精通C++(第9版)》
相關文章
相關標籤/搜索