類很好地實現了數據的封裝,經過隱藏保證了安全性。但上一節的友元函數及靜態數據成員、靜態函數則是在共享的過程當中增長了數據改變的風險。那怎麼能在共享時有效地保護數據。ios
而由C語言的知識咱們知道每每設定常量來防止數據被更改,在C++中也一樣有常量的概念。安全
常對象的數據成員在對象的整個生存期間內都不能改變,且必需要初始化。函數
語法聲明: const 類型說明符 對象名;spa
class A { public: A(int i,int j):x(i),y(j){} private: int x,y; }; const A a(3,4)
Const修飾的函數爲常成員函數。 語法聲明:類型說明符 函數名(參數表)constorm
注:1.經過常對象只能調用它的常成員函數,這就是常對象惟一的對外接口方式。對象
2.常成員函數不能更新目的對象的數據成員,與第一點也是相互照應。blog
3.const關鍵字還能夠進行重載函數的區分。接口
#include <iostream> using namespace std; class R { public: R(int r1,int r2):r1(r1),r2(r2){} void print(); void print() const; private: int r1, r2; }; void R::print() { cout << r1 << ":" << r2 << endl; } void R::print()const { cout << r1 << ";" << r2 << endl; //爲下文伏筆 } int main() { R a(5, 4); a.print(); const R b(20, 52); b.print(); //此處調用的是帶const的函數 return 0; //結果爲5:4 20;52 system("pause"); }
若類中說明了常數據成員,那函數不能在經過調用改變它的值。ci
#include <iostream> using namespace std; class A { public: A(int i); void print(); private: const int a; //常數據成員的說明 static const int b; //說明一個類的靜態常量 }; const int A::b = 10; //靜態常量如果整數或枚舉類型,則如此直接聲明 A::A(int i) :a(i) {} void A;; print() { cout << a << ":" << b << endl; } int main() { A a1(100), a2(0); a1.print(); a2.print(); return 0; }
const 類型說明符 &引用名;函數聲明時用const修飾則不會對實參修改。io
實參爲常對象或普通對象時,只能把對象視爲常對象。