Const 成員函式

2022-07-03 16:57:09 字數 1302 閱讀 7712

首先,我們知道: 每個成員函式都有乙個額外的、隱含的形參this。在呼叫成員函式時,形參this初始化為呼叫函式的物件的位址。成員函式的函式體可以顯示的使用this,但是不是必須這樣做。在普通的非const成員函式中,this的型別是一指向類型別的const指標,可以改變this所指向的值,但是不能改變this所儲存的位址。

在這種情況下,我們引入了const成員函式,它的作用是:改變了this形參的型別。this指標變成了乙個指向const類型別物件的const指標。它既不能改變this所指向的物件,也不能改變this所儲存的位址。

那我們加入const的目的是什麼呢?這樣做有什麼好處呢?

我們知道,類的成員函式,一些改變物件,另一些不改變物件,對於不改變物件的那些,我們就在函式後面加上const宣告。

例如:假設num為class point的私有成員

int point::getvalue ()

該函式的作用只是返回num的值,並未改變物件的值。因此,我們可以在函式後面加上const(若在前面加上,表示返回值為const型別).

而有些函式,則改變了物件的值,例如:

int point::setvalue(int &m)

那麼宣告為const就是錯誤的。

我們為了看起來更舒服,看下面的**:

class point

int setvalue(int &m)

private:

int num;

};

需要注意的是,const成員函式需要在函式宣告和函式定義時都宣告const(對於類外定義的函式來講).

非常量成員函式不能被常量物件呼叫:

const point p;

p.getvalue();//

okp.setvalue(2);//

error

但是建構函式和析構函式除外,因為他們從不定義為const函式,但是可以被const物件所呼叫,

總結一句:const物件,指向const物件的指標和引用只能用於呼叫其const成員,如果嘗試呼叫非const成員,則是錯誤的,而非const物件則可以呼叫任意成員,當然非const成員最佳。

什麼情況都有例外——看下面這段程式:

class point

private:

mutable int num;

};

也宣告為const函式,但是我們卻改變了物件的值,原因就是我們在num前加了mutable表示num為可變資料成員,在此情況下,任意成員函式,包括const成員函式,都可以改變num的值。

const成員函式

prime c 在類sales item中,same isbn函式定義如下 bool sales item same isbn const sales item rhs const const 成員函式的引入 跟在 sales item 成員函式宣告的形參表後面的 const 所起的作用了 cons...

const成員函式

我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,cpp view plain copy const char blank blank n 錯誤 物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函...

const成員函式

一.關於const成員函式的呼叫 const物件只能呼叫const成員函式 cpp view plain copy include using namespace std class a void fun intmain 輸出 const 成員函式 但是如果把第以1個fun注釋掉就會出錯 error...