2016-10-19 160 views
4

我試圖理解類的getter和setter功能...爲什麼使用const成員函數?

我的問題是: 如果我設計了一個功能,僅僅只是從它的類(一個「吸」功能)獲得的狀態,爲何將其標記作爲「const成員函數」? 我的意思是,如果我的函數被設計爲不改變其類的任何屬性,爲什麼要使用const成員函數呢? 我不明白,請:(

例如:

int GetValue() {return a_private_variable;} 

int GetValue() const {return a_private_variable;} 

是什麼真正的區別

回答

8

當你聲明一個成員函數作爲const,像

int GetValue() const; 

然後你告訴它不會修改對象的任何編譯器。

這也意味着你可以在常量對象上調用成員函數。如果您沒有const修飾符,則無法在已定義爲const的對象上調用它。您仍然可以在非常量對象上調用const成員函數。

另請注意,const修飾符是成員函數簽名的一部分,這意味着您可以使用非const函數對其進行重載。那就是你可以有

int GetValue() const; 
int GetValue(); 

在同一類。

0

一類的常量實例只能調用const函數

讓一個const的ac實例lass對於使你的程序更加穩定很有用,因爲那樣你不能無意中修改這個實例。

在你的情況下,函數完成同樣的事情,但它不一定是這樣。

+0

成員函數可以在非固定的物體被調用。 –

+0

謝謝,我有這個錯誤的方式。你的回答比我的好得多。 –

2

const可以顯示在C++的三個不同的地方。

實施例1:

const Object obj1;

  • OBJ1是const對象。這意味着你不能在這個對象上改變任何東西。該目的只能調用const成員函數像

INT的GetValue()const的{返回a_private_variable;}

實施例2:

int myMethod() const {//do something}

  • 這是一個const方法。如果它是在一個類中聲明的,它將是一個const成員函數。這些是const變量可以調用的方法的類型。

實施例3:

int myMethod(const Object &x) {//do something with x}

  • 這是採用一個const參數的方法。這意味着,內myMethod邏輯是不允許更改任何與x。還要注意參數不是通過引用傳遞的。我喜歡將此視爲只讀類型的方法。

當你正在開發將由其他用戶使用的軟件;不要讓他們破壞他們不知道他們不應該分手的東西是個好主意。在這種情況下,您可以將變量,方法和參數限制爲const以保證合同得到維護。我試圖總結我在大學中學到的主要想法,但在C++中有大量const的資源。如果您想了解更多信息,請查看link。也有可能我錯誤地記住了一些事情,因爲我有一段時間沒有進入C/C++領域。聲明爲`const`

相關問題