C 常量及常物件 成員彙總

2021-06-25 16:04:23 字數 1927 閱讀 1169

到了做題階段,發現對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.常物件只可以呼叫常成員函式,但是非常物件可以...