const型別的成員函式內部如何改變成員變數

2021-09-30 07:53:03 字數 1034 閱讀 5327

**:

通過指標也能實現。

在c++中,由const修飾的成員函式的函式體內部,是不能夠對成員變數進行修改的。這個特性被用來保證某些成員函式在實現過程中,避免由於程式設計師大意而對資料進行了錯誤的修改;同時也說明此成員函式是非修改性的。如只需要返回成員變數的成員函式就被宣告為const型別(const的位置在函式定義引數列表之後)

推廣開來,在const成員函式中也不能夠呼叫非const的成員函式。這是因為非const成員函式可能會改變成員變數的值,這與const成員函式的定義相違背。

但是在某些情況下,需要在const函式中改變成員變數。這就需要把成員變數設定成mutable型別。如

class c

public:

void func(const int& p) const

i = p;

private:

mutable int i;

如果變數i不宣告為mutable型別,則編譯不會通過。

如果成員變數是乙個類型別或者結構型別,而在const函式中呼叫這些變數的成員函式,除了用mutable宣告外,還可以用一種變通的方法:

class d

public:

void op(){}

class c

public:

void func(const int& p, d& d) const

i = p;

d.op();

private:

mutable int i;

d                cd;

然後在呼叫時,引數d& d以*this作為輸入,也可以達到呼叫非const函式的作用。

p.s 最近閱讀相關的文章,又學到了一種方法,能夠使得在const成員函式中呼叫非const成員函式。就是使用const_cast<>運算子。它能夠使得const去掉const的屬性,使得violate屬性去掉violate屬性。上面的例子就可以寫成。

void func() const

const_cast(&cd)->op();

同樣能夠編譯通過。

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...