因為程式中各種形式的資料共享,在不同程度上破壞了資料的安全性。引入常型別的目的是,為了保證資料共享又防止資料被改動。
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種使用者定義型別,具體如下 值型別 需要一段單獨的記憶體,用於儲存實際的資料,位於棧中。引用型別 需要兩段記憶體,一段位於堆中用於儲存實際的資料 一段位於棧中儲存引用 引用是用來指向資料在堆中的存放位置 值型別包含預定義型別中的...