到了做題階段,發現對c++中一些常量和常物件、函式等這些東西還是區分的很不好,各種亂,所以有必要好好整理一下了。
這裡我畫了一張圖,從這張圖入手來分析結構應該會更清晰一些:
首先來看左上部分的常量:包括文字、符號常量和常變數。
文字常量就是乙個具體的數字,如s(圓的面積)=r*r*3.14,3.14就是乙個文字常量。
他有兩個很明顯的缺陷:可讀性差和可維護性差。
為什麼?乙個沒學過s(圓)的人,哪知道3.14是常量?而且,如果程式需要反覆出現一萬次這個公式,我們難道要寫一萬次3.14?這個還好,如果是3.1415926的話,呵呵,那就只剩下」呵呵"了。
符號常量
就是乙個符號化的數值(可以理解為符號化的文字常量~),來看定義形式:#define pi 3.14
在定義時候要注意:1、不能用=;2、不能用分號結尾,因為#define是預處理指令。
另外,他彌補了文字常量的不足,具有良好的可讀性和可維護性,這裡就不多說了,很好理解。
常變數又是什麼?當然就是常(變數)啦。從定義格式來看:const 資料型別 符號常量名 = 數值;也就是const+變數定義,所以它就是用const修飾的變數。
注意:在定義時,一定要給它初始化,以保證其不被修改。
對比三者之間的聯絡:符號常量=符號化(文字常量);常變數=用const定義的(符號常量)
接著說常變數。我們在程式中,通常都是使用常變數而不是符號常量,為什麼?
這也是它獨特的優點:1、格式良好,與我們常見的變數定義格式類似;
2、型別明確,我們可以按需要選擇明確的型別,以節省空間。
再提乙個問題:為什麼前兩個常量型別沒有資料型別?因為它們不佔記憶體!只有常變數才佔,所以要考慮資料型別的問題。
下面說另一大部分——常物件與常成員,包括常物件、成員函式及常資料成員。
常物件,其實就是不允許修改的物件。來看定義格式:型別 const 物件名 或 const 型別 物件名,這是兩種形式。
它的初始化同常資料成員一樣,都要通過建構函式來進行。如:
int main()
class a{
private:
const int& r;//定義常引用資料成員
const int a;//常資料成員
public:
a(int i):a(i),r(a) //常資料成員初始化
{cont能且只能互相訪問。
常資料成員就是const修飾的資料成員。顯然,它是乙個資料成員,那麼它與上面談到的常變數有什麼關係?
他們的相同點是定義形式一樣;區別就是前者(常資料成員)必須在類體內定義。
常成員函式
上面我們也提到了它和常物件的情意綿綿,實際上,它就是為了訪問類的常物件而生的!
它的定義形式和以上幾個有些不同:返回型別 成員函式名 (參數列) const;const要在最後邊。
下面有一張成員函式和物件的操作關係圖,清晰地呈現了二者的恩怨糾葛:
最後就是一般函式和常函式的過載問題,總結起來就一句話:常物件呼叫常成員函式,一般物件呼叫一般成員函式。
總結:無論是常物件、成員還是常量,都要遵循「常」的原則,打死都不變!
本文的重點就是思維導圖展示的關係和常變數、常成員及物件的區分。其實這些關係無非也就是平日裡「常常聯合」,過載時「各回各家」。只要理清他們的關係,做到心中有圖就可以了。
C 之常物件,常物件成員
一.常物件 1.常物件定義 time const t1 1,2,3 或者const time t1 2.常物件不能呼叫該物件的非const型的成員函式 系統主動呼叫的構造析構函式除外 3.常成員函式的宣告方法,後面加個const即可 void get time const 4.常物件不能修改物件內的...
C 之常物件,常成員物件,常成員函式,常指標
一 常物件 time const t1 12,23,23 其中所有的值不能被修改。通過該物件只能呼叫它的常成員函式,而不能呼叫它的普通成員函式。以防普通成員函式會修改資料成員的值。但如果一定要修改常物件資料成員的值,可以將該資料成員宣告為mutable,如 mutable int count 把co...
C 中常物件 常成員函式 常成員變數
用const修飾的類物件叫做常物件,用const修飾的成員函式叫常成員函式,用const修飾的成員變數叫常成員變數,常物件 型如 const 類名 物件名 類名 const 物件名 說明 1.常物件內的成員變數值不可修改,所以一定要在定義物件時初始化。2.常物件只可以呼叫常成員函式,但是非常物件可以...