常型別(C 學習筆記 30)

2021-09-01 20:53:19 字數 2479 閱讀 7786

因為程式中各種形式的資料共享,在不同程度上破壞了資料的安全性。引入常型別的目的是,為了保證資料共享又防止資料被改動。

int a=5;

const

int&b=a;

其中,b 是乙個常引用,它所引用的物件不允許更改。如果出現:b=22;則非法。

例 1:常引用作函式引數。

在實際應用中,常引用往往用來作函式的形參,這樣的引數稱為常引數

用常引用作形參,能夠避免對實參的更改,保證資料的安全。

#include

using

namespace std;

intadd

(const

int&i,

const

int&j)

;//函式 add 的形參是常引用

intmain()

intadd

(const

int&i,

const

int&j)

例 2:常物件 和 非 常物件 的比較
#include

using

namespace std;

class

sample

void

setvalue

(int i)

void

display()

private

:int n;};

intmain()

在例 2 中,物件 a 是乙個普通的物件,而不是常物件,執行結果為:

若將上述的物件 a 定義為常物件,主函式修改一下:

int

main()

則會出現三處錯誤(要格外注意,第三處錯誤,不允許常物件呼叫普通的成員函式)。

例 4:常資料成員的使用。

#include

using

namespace std;

class

date

;date::

date

(int y,

int m,

int d)

:year

(y),

month

(m),

day(d)

void date::

showdate()

intmain()

例 5:常成員函式的使用(仔細看**)。
#include

using

namespace std;

class

date

;date::

date

(int y,

int m,

int d)

:year

(y),

month

(m),

day(d)

void date::

showdate()

void date::

showdate()

const

intmain()

執行結果:

在例 5中類 date 說明了兩個同名的成員函式 showdate,乙個是普通的成員函式,另乙個是常成員函式,它們是過載的(關鍵字 const 可以被用於區分過載函式)。

在主函式中說明了兩個物件 date1 和 date2,其中物件 date2 是常物件。通過物件 date1 呼叫的是沒有用 const 修飾的成員函式 showdate,而通過物件 date2 呼叫的是用 const 修飾的常成員函式 showdate。

說明注意:

(1)常成員函式可以訪問常資料成員,也可以訪問普通資料成員。

資料成員

普通成員函式

常成員函式

普通資料成員

可以訪問,也可以改變值

可以訪問,但不可以改變

常資料成員

可以訪問,但不可以改變值

可以訪問,但不可以改變

常物件的資料成員

不允許訪問和改變值

可以訪問,但不可以改變

(2)如果將乙個物件說明為常物件,則通過該物件只能呼叫它的常成員函式,而不能呼叫普通的成員函式。所以說,常成員函式是常物件唯一的對外介面,這是c++從語法機制上對常物件的保護。

(3)常成員函式不能更新物件的資料成員,也不能呼叫該類中的普通成員函式,這就保證了在常成員函式中絕對不會更新資料成員的值。

c 學習筆記(30)

常用集合演算法 演算法簡介 set intersection 求兩個容器的交集 set union 求兩個容器的並集 set difference 求兩個容器的差集 set intersection 函式原型 set intersection iterator beg1,iterator end1,...

C 3 0 新特性學習筆記 3 匿名型別

有些時候我們需要臨時儲存一些運算的中間結果,特別是當這些中間結果是由多個部份組成時,我們常常會去宣告乙個新的型別,以方便儲存這些中間結果。表面上看起來這很正常,而細想之後就會發現,這個新型別只服務於這個函式,其它地方都不會再使用它了,就為這乙個函式而去定義乙個新的型別,確實有些麻煩。現在,c 3.0...

C 學習筆記 型別

型別由以下元素定義 c 提供了16中預定義型別,及使用者可以建立自己的6種使用者定義型別,具體如下 值型別 需要一段單獨的記憶體,用於儲存實際的資料,位於棧中。引用型別 需要兩段記憶體,一段位於堆中用於儲存實際的資料 一段位於棧中儲存引用 引用是用來指向資料在堆中的存放位置 值型別包含預定義型別中的...