const成員變數
舉個例子
#include using說明namespace
std;
classa;
private
:
const
intsize;
};int
main()
但是
此時的const變數屬於具體的乙個物件,如何在整個類中都恆定不變呢?
答案是利用列舉,舉例
#include using列舉常量不會佔據物件的儲存空間,在編譯時被全部求值namespace
std;
classa;
public
:
intarray[size];
};int
main()
但是,它隱含的資料物件型別為整形,不能表示其他型別。
問題
如何定義在類中定義非整形常量?(待解決)
話說有幾個地方必須在建構函式的初始化列表中(詳見):
類的const常量
類的引用型別成員
沒有預設建構函式的類型別成員
如果類存在繼承關係,派生類必須在其初始化列表中呼叫基類的建構函式
const成員函式
任何不修改資料成員的函式都應該宣告為const型別。如果在編寫const成員函式時,不慎修改了資料成員,或呼叫了其他非const成員函式,編譯器就會指出錯誤。
示例說明
#include using同乙個類中,可以僅通過是否是const定義兩個函式名字、引數、返回值完全相同的兩個成員函式,例如:namespace
std;
class
stack
;int stack::getcount(void) const
#include using輸出namespace
std;
class
a
void print_val()
void print_val() const
private
:
intval;
};int main(int argc ,char **argv)
結論
同函式名、引數、返回值可以僅通過是否為const來定義為類的兩個成員函式。在呼叫時,const物件呼叫const成員函式,非const物件呼叫非const成員函式。
問題1:
不可以在const函式中改變成員變數的值,那麼有沒有辦法改變?
答案是可以的,把成員變數宣告為mutable型別。看程式
#include結果using
namespace
std;
class
a
void print_val()
void print_val() const
private
: mutable
intval;
};int main(int argc ,char **argv)
問題2:
當類中只有const函式,非const物件是否可以呼叫const函式?
答案是可以的,程式
#include結果using
namespace
std;
classa//
void print_val()
void print_val() const
private
: mutable
intval;
};int main(int argc ,char **argv)
但是:還有非const函式時,非const物件不可以調研那個const函式(否則,類的資料變數就會發生變化)。
問題3:
當類中存在只有 是否為const 不同的兩個函式時,const函式是否可以暫時呼叫那個非const函式?
答案是可以的。用const_cast將轉化掉表示式的const性質
#include using結果namespace
std;
class
a
void print_val()
void
const print_val() const
private
:
intval;
};int main(int argc ,char **argv)
注意
單純用類轉化不行
const a a(45報錯);const_cast
a.print_val();
問題4:返回型別是const是怎麼回事?
const返回型別只有在修飾指標或引用是才有用。單憑const返回型別不可以過載。
C 中類的const成員函式和const物件
2.const成員函式 即普通成員函式後再加const。它可以讀取資料成員的值,但不能修改它們。若要修改 時,資料成員前必須加mutable。以指定其可被任意更改。mutable是ansic 考慮到實際程式設計時,可能一定要修改const物件中的某個資料成員而設的。const成員函式可以被相同參數列...
C 類中const成員變數的賦值
在標頭檔案的類的定義中定義了乙個const成員變數 c 規則 1 類定義中不能進行初始化,因為標頭檔案中類的定義只是乙個宣告,並沒有分配真正空間,因此變數是不存在的,因此是不能賦值的。2 const 定義的變數是不能賦值 這可如何是好,宣告中不能賦值,宣告完還不能賦值。又不能不賦值。解決方案 1 在...
C 之const類成員變數,const成員函式
const修飾類的成員函式 const修飾變數一般有兩種方式 const t a,或者 t const a,這兩者都是一樣的,主要看const位於 的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。類的成員函式後面加 const,表明這個函式不會對這個類物...