c const 共用資料成員保護

2021-10-24 05:04:09 字數 1910 閱讀 7212

const

int pi=

46;

保證資料成員不被改變的物件,可以宣告為常物件
class

time

private

:int hour;

int minute;

int sec;};

intmain()

類名 const 物件名(實參表列)

const 類名 物件名(實參表列)

常成員可以訪問常物件的資料成員;
class

time

;void time::

set_time

(int h,

int m,

int s)

const

//定義

intmain()

class

time

1.只能通過建構函式的引數初始化表進行對常資料成員的初始化
time (int h):hour(h){}          //類內定義

time::time(int h):hour(h){} //類外定義

2.不能通過建構函式中的賦值方法對資料成員的初始化
time:

:time

(int h)

//非法

3.不能通過其他函式中的賦值方法對資料成員的初始化
time::

settime

(int h)

//非法

設計策略:

修改常物件中的某個資料成員,該資料成員的宣告是mutable

mutable

int a;

類名 *const 變數名

time t1(10

,12,15

),t2;

time *

const pt=

&t1;

pt=*t2;

//錯誤,pt只能指向乙個位址

ps:指向的值可以改變的,只要指向的物件不是const

const 類名 *變數名  /  型別名 const

*變數名;

const

char c=

"hello"

;//指向常變數的指標指向常變數

char

*pt=c;

//錯誤,只有指向常變數的指標才能指向變數

char c1=

'a';

const

char

*p1;

p=&c1;

//合法。指向長變數的指標可以指向非const變數

*p='b'

;//不合法,不能用指向常變數的指標改變變數的值

c1='b1'

;//合法,c1又不是常變數

const 類名 *變數名  /  型別名 const *變數名;
const time t1(10

,12,10

);

int a;

int&b=a;宣告b是a的引用,a=b

a=20

;

函式的形參是物件的應用
void fun(time &t)

;

共用資料的保護

一 常物件 類名 const 物件名 實參表列 const 類名 物件名 實參表列 如果乙個物件被宣告為常物件,則不能呼叫該物件的非const型成員函式,目的是為了防止這些函式會修改常物件中資料成員的值。常成員函式的宣告 void get const 如果一定要修改常物件中的某乙個資料成員的值,則應...

C const保護陣列

使用普通函式時,由於實際使用的是函式所用資料的副本,所以在函式中修改副本的值並不能改變其原本資料的值。但是在以陣列為引數的函式中,由於引數傳遞的是位址的副本,因此可以根據位址的副本去改原陣列的值。而在很多時候我們僅僅需要獲取陣列的值,不願意讓函式有改變原陣列的權利,這時我們可以用const保護陣列。...

c const成員函式

一些成員函式改變物件,一些成員函式不改變物件。例如 int point gety 這個函式被呼叫時,不改變point物件,而下面的函式改變point物件 void point setpt int x,int y 為了使成員函式的意義更加清楚,我們可在不改變物件的成員函式的函式原型中加上const說明...