一.靜態成員
靜態成員分為靜態成員函式和靜態資料成員,是為了實現我們有時候希望有某乙個或者幾個資料成員為類所定義出來的物件所共有,從而實現乙個類多個物件之間的資料共享,如統計總數,平均值等。
靜態資料成員:若類中的乙個資料成員被宣告為static,則這個成員為靜態資料成員,這個成員為這個類的所有物件所共享。
我們需要注意以下幾點:
1.靜態資料成員與普通成員相類似,但在其前面要加上關鍵字static.
2.靜態資料成員初始化應該在類外單獨進行,一般在類物件定義之前。初始化的格式為:資料型別 類名::靜態資料成員名=初始值;
3.靜態資料成員屬於類中物件的集合,而不像普通資料成員只屬於類的某乙個物件,可以用(類名::)訪問靜態資料成員;
4.靜態資料成員與靜態變數一樣,是在編譯建立並初始化,它在該類的任何物件被建立之前就存在,因此,公有的靜態資料成員可以在物件定義之前被訪問。物件定義後,公有的靜態資料成員也可以通過物件進行訪問。
靜態成員函式:前面有static關鍵字說明的函式被稱為靜態成員函式,靜態成員函式屬於整個類,是該類所有物件所共有的成員函式,與靜態資料成員不同的是,靜態成員函式不是為了物件之間的溝通,而是為了處理靜態資料成員。一般而言,靜態成員函式不訪問類中的非靜態成員,若確實需要訪問,可以通過物件名或引用或者是指標的方式訪問非靜態成員,想一下,為什麼?
很簡單,因為我們的靜態成員函式不含this指標。
靜態成員函式與非靜態成員函式的重要區別是:非靜態成員函式有this指標,而靜態成員函式沒有this指標,靜態成員函式可以訪問靜態資料成員,因為靜態資料成員是屬於類的,可以訪問。靜態成員函式不能呼叫非靜態成員函式,非靜態成員函式可以呼叫靜態成員函式。
關於靜態成員函式的使用再做幾點宣告:
1.一般情況下,靜態成員函式主要用來訪問靜態資料成員,當他與靜態資料成員一起使用時,達到了對同乙個類中物件之間共享資料的目的。
2.私有靜態成員函式不能被類外面的函式和物件訪問;
3.使用靜態成員函式的乙個原因是,可以用它在建立任何物件之前呼叫靜態成員函式以處理靜態資料成員,這是普通成員函式不能實現的功能。
4.編譯系統將靜態成員函式限定為內部連線,也就是說,與現行檔案相連線的同名函式不會與該函式發生衝突,維護了該函式使用的安全性。
5.靜態成員函式是類的一部分而不是物件的一部分。如果在類外呼叫公有的靜態成員函式,可以用類名::靜態成員函式名()方式呼叫。
#include#includeusing namespace std;
class student
~student()//析構函式
void show()
;void show(const date& d)//可以定義在類內,也可以定義在類外,訪問類成員加上物件名d
這裡輸入和輸出運算子的過載都定義為成員函式,而這兩個運算子的過載函式是具有this指標的,並且我們都知道this指標是第乙個引數,這就導致了乙個問題,我們在呼叫輸入輸出運算子過載函式的時候,必須這樣來用:假設定義了物件date d1;
d1<>cin;這樣的呼叫方式是不是有些不符合我們日常使用習慣呢。所以我們為了方便使用就必須消除掉預設的this指標,友元函式就是乙個不錯的選擇。
完整**如下:
#includeusing namespace std;
class date;
ostream& operator<<(ostream& out,const date& d)
int main()
;class date
void show()
; void show()
{ //使用非const成員函式輸出年月日
cout<<"year:"<<_year《關鍵字const可用於過載函式進行區分;
const物件不能呼叫非const成員函式,可以呼叫const成員函式。
非const物件可以呼叫非const成員函式和const成員函式。
const成員函式內可以呼叫其他的const成員函式,不可以呼叫非const成員函式。
非const 成員函式內可以呼叫其他的const成員函式和非const成員函式。
C const 內聯 靜態成員 友元
在成員函式後面加const,const修飾this指標所指向的物件,保證這個const成員函式的物件在函式內不會被改變。注意點 operator 可以加const,operator 不可以加const 取位址運算子 無意義 以inline修飾的函式叫做內聯函式,編譯時編譯器會在呼叫內聯函式的地方展開...
靜態資料成員 靜態成員函式 友元
建立靜態成員和友元的目的 建立靜態成員主要是解決資料共享問題,而建立友元的目的是為了讓某些函式訪問類中的私有成員。1 靜態資料成員 思考 為什麼要定義靜態資料成員?答 如果不定義為靜態資料成員,那麼每個物件都分別有乙個i的副本 拷貝 但定義為靜態資料成員之後,所有的物件共享有乙個i的副本,就是說i在...
6 3 1 3 常成員 靜態成員 友元
特殊用途的成員 一 常成員 1.常資料成員 在類中定義的不能修改器值的一些資料成員,類似於變數,但是有自己的位址,一經賦值,不能修改,不同的物件其常資料成員的值可以不同。2.常成員函式 使用const 來保護成員資料不被成員函式改變。常成員函式不能更新物件的資料,也不能呼叫非const修飾的成員函式...