国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

const類對象和const成員函數的用法及編程技巧

2019-11-11 05:25:16
字體:
來源:轉載
供稿:網友

一些成員函數改變對象的數據成員值,一些成員函數不改變對象得數據成員值。 例如: int Point::GetY() { return yVal; } 這個函數被調用時,不改變Point對象數據成員值,而下面的成員函數改變Point對象的數據成員值: 例如: void Point:: SetPt (int x, int y) { xVal=x; yVal=y; }

為了使成員函數的意義更加清楚,我們可在不改變對象的成員函數的函數原型中加上const說明,(實際上,任何任何不修改成員數據的函數都應該聲明為const函數,這樣有助于提高程序的可讀性和可靠性。

class Point { public: int GetX() const; int GetY() const; void SetPt (int, int); void OffsetPt (int, int); PRivate: int xVal, yVal; }; const成員函數應該在函數原型說明和函數定義中都增加const限定: int Point::GetY() const { return yVal; }

class Set { public: Set (void){ card = 0; } bool Member(const int) const; void AddElem(const int); //… }; bool Set::Member (const int elem) const { //… }

  非常量成員函數不能被常量成員對象調用,因為它可能企圖修改常量的數據成員: const Set s; s.AddElem(10); // 非法: AddElem不是常量成員函數 s.Member(10); // 正確

但構造函數和析構函數對這個規則例外,它們從不定義為常量成員,但可被常量對象調用(被自動調用)。它們也能給常量的數據成員賦值,除非數據成員本身是常量。

為什么需要const成員函數? 我們定義的類的成員函數中,常常有一些成員函數不改變類的數據成員,也就是說,這些函數是”只讀”函數,而有一些函數要修改類數據成員的值。如果把不改 變數據成員的函數都加上const關鍵字進行標識,顯然,可提高程序的可讀性。其實,它還能提高程序的可靠性,已定義成const的成員函數,一旦企圖修 改數據成員的值,則編譯器按錯誤處理。

const成員函數和const對象 實際上,const成員函數還有另外一項作用,即常量對象相關。對于內置的數據類型,我們可以定義它們的常量,用戶自定義的類也一樣,可以定義它們的常量對象。例如,定義一個整型常量的方法為:

const int i=1 ; 同樣,也可以定義常量對象,假定有一個類classA,定義該類的常量對象的方法為: const classA a(2); 這里,a是類classA的一個const對象,”2”傳給它的構造函數參數。const對象的數據成員在對象壽命期內不能改變。但是,如何保證該類的數據成員不被改變呢? 為了確保const對象的數據成員不會被改變,在C++中,const對象只能調用const成員函數。如果一個成員函數實際上沒有對數據成員作任何形式的修改,但是它沒有被const關鍵字限定的,也不能被常量對象調用。下面通過一個例子來說明這個問題:

class C { int X; public: int GetX() { return X; } void SetX(int X) { this->X = X; } }; void main() { const C constC; cout<


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平陆县| 襄垣县| 东乌珠穆沁旗| 浑源县| 安乡县| 米泉市| 杭锦旗| 安阳市| 长武县| 蛟河市| 樟树市| 东方市| 叙永县| 涟源市| 上林县| 潮州市| 昌黎县| 孟连| 宕昌县| 基隆市| 凤庆县| 阳山县| 华宁县| 迁西县| 琼中| 本溪| 甘谷县| 鲜城| 五大连池市| 石嘴山市| 乌审旗| 荃湾区| 富民县| 钟山县| 老河口市| 麻城市| 台中县| 香河县| 海阳市| 宜宾市| 绵竹市|