//
// 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
參考文獻