1. static成員變量
類的static成員變量,當在頭檔案中聲明後,應該再在類的源檔案中定義一下:
如在Test.h中有如下代碼:
#pragma once
class Test
{
private:
static int data;
};
應該在Test.cpp中定義其成員變量data:
#include "Test.h"
int Test::data = 10;
注意定義data的代碼不應該寫在類的構造函數中,因為構造函數會被執行多次,同理也不應放在類的頭檔案中,因為頭檔案可能會被包含多次
2.static成員函數
類的static成員函數,是可以通過類名直接來調用的,這在很多情況下是比較友善的。但是類的static成員函數隻能通路類的static成員變量和static成員函數,因為其沒有this指針
3.const成員變量
類的const成員變量,隻能在構造函數的成員初始化清單中進行初始化,而且在之後不能被修改。可以把類的一些隻讀變量設定為const
Test.h檔案:
#pragma once
class Test
{
private:
const int data;
};
Test.cpp檔案:
#include "Test.h"
Test::Test(void) :
data(10)
{
}
4.const成員函數
類的const成員函數,具有const this的指針,是以也就不能更改類中的成員變量。不過這個有個特例,就是當成員變量聲明為mutable時,它是可以被類的const成員函數更改的。
如果類的成員函數不對類的資料進行更改,則應該把此函數定義為const成員函數,首先它使類的接口更容易被了解,告訴調用者,這個函數不會對類的資料進行更改,其次,它可以擴大此函數的有效使用範圍:
例如在Test類中有一個列印類的基本資訊的函數,此函數對類的資料是隻讀的,如果沒有把它設定為const,則const Test的執行個體就不能調用此函數,這在邏輯上不太合理。是以應該把它設定為const的成員函數,這樣的話,Test的執行個體和const Test的執行個體都可以調用此函數了
5.static const成員變量
static const成員變量,在類的頭檔案中聲明後,也類似于static成員變量,應該在類的源檔案中再定義一下:
Test.h檔案:
#pragma once
class Test
{
private:
static const int data;
};
應該在Test.cpp中定義其成員變量data:
#include "Test.h"
const int Test::data = 10;
不過,對于int型的static const成員變量,可以在聲明時直接定義它,如下:
#pragma once
class Test
{
private:
static const int data = 10;
};
這樣在Test.cpp中就不必再定義data了。但這僅僅是對int型才行得通。如果在上面把int換成float或是其他的,編譯是通不過的。不知道為什麼這樣設計