面向对象程序中的常量
一、常數(shù)據(jù)成員?
????使用constkeyword進(jìn)行說(shuō)明的數(shù)據(jù)成員,稱(chēng)為常數(shù)據(jù)成員。其作用和使用方法與一般常變量(const變量)相似,但常數(shù)據(jù)成員的值是不能改變的。
注意:僅僅能通過(guò)構(gòu)造函數(shù)的參數(shù)初始化表對(duì)常數(shù)據(jù)成員進(jìn)行初始化,不能採(cǎi)用在構(gòu)造函數(shù)中對(duì)常數(shù)據(jù)成員賦初值的方法。
比如:
????如在類(lèi)體中定義了常數(shù)據(jù)成員age:
?????????const?int?age;????//聲明age為常數(shù)據(jù)成員
????在類(lèi)外定義構(gòu)造函數(shù),應(yīng)寫(xiě)成下面形式:?
??????????CStudent∷Cstudent(int?a):age?(a){……}//通過(guò)參數(shù)初始化表對(duì)常數(shù)據(jù)成員age初始化。
??????????CStudent∷Cstudent(int?a){age=a;}?????//錯(cuò)誤,不能在函數(shù)體中初始化常數(shù)據(jù)成員。
注:為了與長(zhǎng)對(duì)象進(jìn)行差別,特別強(qiáng)調(diào)常數(shù)據(jù)成員能夠被非const和const類(lèi)型函數(shù)僅僅讀。
二、常對(duì)象
1、定義
常對(duì)象:對(duì)象的全部成員在程序中不能被改動(dòng),數(shù)據(jù)初始化后即為僅僅讀模式。???
?
2、定義常對(duì)象的一般形式為
??????類(lèi)名?const?對(duì)象名[(實(shí)參列表)];???
??????const?類(lèi)名?對(duì)象名[(實(shí)參列表)];??
比如:一個(gè)日期對(duì)象始終表示2000年5月1號(hào),能夠定義為:
??????Cdate?const?d1(2000,5,1);????????//d1是常對(duì)象
3、注意
以Cdate類(lèi)為例,該類(lèi)的定義例如以下:
<pre name="code" class="cpp">#include "stdafx.h" #include <iostream> #include <string> #include <stdio.h> using namespace std;//日期類(lèi)聲明 class Cdate { public:Cdate(int y=1985, int m=1,int d=1) //日期類(lèi)的構(gòu)造函數(shù){ year=y;month=m;day=d;cout<<"調(diào)用日期類(lèi)的構(gòu)造函數(shù)"<<endl;}Cdate(Cdate &s) //日期類(lèi)的拷貝構(gòu)造函數(shù){ year=s.year;month=s.month;day=s.day;cout<<"調(diào)獺用日期類(lèi)的拷貝構(gòu)造函數(shù)"<<endl;}~ Cdate(){ cout<<"調(diào)用日期類(lèi)的析構(gòu)函數(shù)"<<endl;}void Print(){cout<<"調(diào)用Print()函數(shù):"<<endl;cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;} private:int year,month ,day; //定義3個(gè)整型變量,分別表括示日期的年月日 };int _tmain(int argc, _TCHAR* argv[]) {Cdate d1(2001,5,1); d1.Print();system("pause");return 0; }1)常對(duì)象在定義時(shí)必需要有初值,通過(guò)帶參數(shù)的構(gòu)造函數(shù)或構(gòu)造函數(shù)的參數(shù)初始化表進(jìn)行初始化。
????Cdate?d1(2000,5,1);??????????//一般對(duì)象
????Cdate?const?d2?;?????????????//?d2是常對(duì)象
?d2=d1;???????????//錯(cuò)誤,常對(duì)象必須在定義的時(shí)候賦初值
2)常對(duì)象僅僅能以?xún)H僅讀的方式訪問(wèn)常成員函數(shù),而不能訪問(wèn)很成員函數(shù)。
假設(shè)希望成員函數(shù)可引用常對(duì)象中的數(shù)據(jù)成員,僅僅需將該成員函數(shù)聲明為const就可以。
聲明格式:返回值類(lèi)型?函數(shù)名()?const?
注意const修飾符的位置在最后面,且構(gòu)造析構(gòu)函數(shù)不用const修飾!
???比如:
? const?Cdate?d1(2000,5,1);??????????//一般對(duì)象
d1.Print();
則會(huì)報(bào)出例如以下錯(cuò)誤:error?C2662:?“°Cdate::Print”:?不能將“this”指針從“const?Cdate”轉(zhuǎn)換為“Cdate?&”;
????改為:void?print()?const;???????//將函數(shù)聲明為const,即常成員函數(shù)。
常成員函數(shù)能夠訪問(wèn)常對(duì)象中的數(shù)據(jù)成員,但仍然不同意改動(dòng)常對(duì)象中數(shù)據(jù)成員的值。
三、常成員函數(shù)
使用constkeyword進(jìn)行說(shuō)明的成員函數(shù),稱(chēng)為常成員函數(shù)。常成員函數(shù)僅僅能讀取本類(lèi)中的數(shù)據(jù)成員(非const數(shù)據(jù)成員和const數(shù)據(jù)成員),而不能改動(dòng)它們的值。非const成員函數(shù)能夠引用?const數(shù)據(jù)成員。
常成員函數(shù)說(shuō)明格式例如以下:
類(lèi)型標(biāo)識(shí)符??函數(shù)名??(?參數(shù)表?)?const;
常量的應(yīng)用:
1)?假設(shè)在一個(gè)類(lèi)中,有些數(shù)據(jù)成員的值同意改變,還有一些數(shù)據(jù)成員的值不同意改變,則能夠?qū)⒁徊糠謹(jǐn)?shù)據(jù)成員聲明為const,以保證其值不被改變,能夠用非const的成員函數(shù)引用這些數(shù)據(jù)成員的值,并改動(dòng)非const數(shù)據(jù)成員的值。
2)?假設(shè)要求全部的數(shù)據(jù)成員的值都不同意改變,則能夠?qū)⑷康臄?shù)據(jù)成員聲明為const,或?qū)?duì)象聲明為const(常對(duì)象),然后用const成員函數(shù)引用數(shù)據(jù)成員,這樣起到“雙保險(xiǎn)”的作用,切實(shí)保證了數(shù)據(jù)成員不被改動(dòng)。
3)?假設(shè)已定義了一個(gè)常對(duì)象,僅僅能調(diào)用當(dāng)中的const成員函數(shù),而不能調(diào)用非const成員函數(shù)(不論這些函數(shù)是否會(huì)改動(dòng)對(duì)象中的數(shù)據(jù))。這是為了保證數(shù)據(jù)的安全。假設(shè)須要訪問(wèn)對(duì)象中的數(shù)據(jù)成員,可將常對(duì)象中全部成員函數(shù)都聲明為const成員函數(shù),但應(yīng)確保在函數(shù)中不改動(dòng)對(duì)象中的數(shù)據(jù)成員。
轉(zhuǎn)載于:https://www.cnblogs.com/gcczhongduan/p/4307941.html
總結(jié)
以上是生活随笔為你收集整理的面向对象程序中的常量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【POJ】【2975】Nim
- 下一篇: View 绘制流程