常量對象與常量成員函數
常量對象與常量成員函數來防止修改對象,實現最低權限原則。
可以用關鍵字const來指定對象是不可修改的,任何修改該對象的企圖,都會導致編譯錯誤。
例如:const Time noon(12,0,0); 聲明一個Time 類的常量對象noon,並將它初始化爲中午12點。
C++不允許在常量對象上調用成員函數,除非成員函數本身也被聲明爲常量。甚至對不會修改對象的成員函數,也是如此,此外,編譯器不允許聲明常量的成員函數修改對象。
對一般情況下,通常修改對象的構造函數和析構函數而言,它們不允許被聲明成const。
關於常量對象和常量成員函數的使用方法如下:
(1)非常量對象調用非常量成員函數 (正確)
(2)非常量對象調用常量成員函數 (正確)
(3)常量對象調用常量成員函數 (正確)
(4)常量對象調用非常量成員函數 (錯誤)
儘管構造函數必須是非常量成員函數,但它仍然可用於初始化常量對象。
常量對象的“常量性”是在構造函數完成了對象的初始化之後生效的,持續到調用了對象的析構函數。
成員函數沒有修改對象的事實,並不足以表明它就是常量函數,常量函數必須顯式地用const聲明。
常量成員函數的初始化必須用初始化列表。
例如:Increment::Increment(int c,int i) : count(c),increment(i);{}
初始化列表出現在構造函數的參數表 和 表示構造函數函數體開始的左大括號之間。成員初始化列表用冒號和參數表隔開。
常量數據成員(常量對象和常量變量)以及被聲明爲引用的數據成員,都必須用成員初始化列表初始化,在構造函數中對這些類型的數據賦值是不允許的。
參考資料:《c++程序員教程》 電子工業出版社 張良華等譯 P273-P280
轉自:http://blog.csdn.net/feitianxuxue/article/details/7311055