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