韓祥波
摘要:探討了const在常數(shù)組、常對象、指向?qū)ο蟮某V羔?、指向常對象的指針、常引用、常對象調(diào)用常成員函數(shù)等方面的案例,通過在計算機專業(yè)和卓越班的面向?qū)ο蟪绦蛟O(shè)計課程中多次教學(xué)使用,較好的提高了學(xué)生的編程積極性。
關(guān)鍵詞:C++;const;常對象;常成員函數(shù);教學(xué)實踐
中圖分類號: G642.0 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)30-0070-01
1 引言
在教學(xué)過程中經(jīng)常遇到學(xué)生對c++關(guān)鍵詞const困惑的情況:const是什么、為什么用、如何用、在使用時前后有哪些限制?諸如此類的小問題影響了不少對關(guān)鍵知識點的理解,本文將對此探討求解。
2 教學(xué)實踐
2.1 用const 定義常量
最初引入const關(guān)鍵詞 的目的是為了取代預(yù)編譯指令,但只是形式上的替換有不少的缺陷,如:int a=1,b=2; #define x a+b 計算x*x得到結(jié)果是5而不是9。對于程序中經(jīng)常使用的需要共享、又需要防止改變的數(shù)據(jù)const 類型常量。如const int x=9。 定以后任何對x的改寫都是錯誤的。
2.2 const修飾常數(shù)組
void f(const int s[], int x) {for ( int i = 0; i < x; i++) cout << s[i] << " ";}
上述代碼對數(shù)組進(jìn)行const修飾后不可以在循環(huán)體內(nèi)對數(shù)組改寫。若循環(huán)體中添加注釋行s[i]++;則因常數(shù)組不可更改而報錯。
2.3 const修飾常對象及常對象成員
class Cobj {public:Cobj(int x) :m1(x){} int m1; };
int main(){ const Cobj t1(10); t1.m1=12; return 0}
若t1(10) ; 改為const Cobj t1(10);則因常對象成員不可改寫而報錯。
class Cobj {public:
Cobj(int x) :m1(x){}
const int m1;void show() {cout< void show(Cobj t) {cout< int main(){ Cobj t1(10); cout< show(t1); return 0;} 類中的常成員m1可以被類內(nèi)外的同名show()函數(shù)訪問,但在兩個函數(shù)任一個的函數(shù)體內(nèi)修改m1的值,都因m1的const性而報錯。故類的常成員初始化只能在構(gòu)造函數(shù)初始化表中進(jìn)行即Cobj(int x) :m1(x){}語句。 2.4 const修飾指向?qū)ο蟮某V羔?/p> class Cobj {public:Cobj(int x) :m1(x){} int m1; }; int main(){ Cobj t1(10),t2(20); Cobj * const p=&t1;; p->m1=12; return 0;} 上述代碼中使用了指向普通對象的常指針,初始化必須在定義時完成,可以改變對象的成員值,但不能讓該指針再次賦值,如添加p=&t2;則報錯。 2.5指向常對象的指針變量 class Cobj {public:Cobj(int x) :m1(x){} int m1;}; int main(){ const Cobj t1(10); const Cobj * p=&t1;; cout< 上面使用了指向常對象的普通指針,但定義該類型指針時const不能省略,否則因指針類型不對而編譯報錯,即使常對象對成員進(jìn)行了保護。 2.6 const修飾對象的常引用 class Cobj {public:Cobj(int x):m1(x) {}int m1;}; int main(){ Cobj t1(10); const Cobj & r=t1; cout< 上面用到了對普通對象的常引用,實現(xiàn)了只讀不寫保護對象的目的,故添加r.m1=12的代碼會編譯報錯。引用的本質(zhì)是對已知變量的別名,不必建立實參的拷貝,不開辟新的內(nèi)存空間,減少了內(nèi)存開銷,提高了運行效率,但初始化只能在定義時進(jìn)行。 2.7 常對象調(diào)用常成員函數(shù) class Cobj {public:Cobj(int x):m1(x) {}int m1; void f1(const Cobj * p)const{cout< int main(){ const Cobj t1(10); t1.f1(&t1;); return 0;} 上面常對象調(diào)用員函數(shù)時只能調(diào)用常成員函數(shù),若f1函數(shù)的修飾詞const刪掉則變成普通成員函數(shù)而編譯報錯。同時f1的形參表中的const也不可刪掉,即使函數(shù)體無改變對象成員值的意圖也不可。由于成員函數(shù)聲明的是常成員函數(shù),故函數(shù)體中也不可改寫成員值。上述三種情況任一種出現(xiàn)都會編譯出錯。調(diào)用對象或?qū)崊閏onst性質(zhì)時,無論函數(shù)體內(nèi)是否想改寫,形參必須為const修飾。 3 結(jié)論 恰當(dāng)?shù)脑谌趾途植孔兞?、形參和實參、類和對象等,利用const特性可以實現(xiàn)保護和開放的有效平衡,即方便的讀取了數(shù)據(jù),又進(jìn)行了保護,配合引用類型的使用較好的提高了程序的效率。 參考文獻(xiàn): [1] 柴小偉.大數(shù)據(jù)時代下計算機網(wǎng)絡(luò)信息安全[J].計算機與網(wǎng)絡(luò),2016(17):52-53. [2] 宋海玉,李錫祚,王玲芬,等. 面向?qū)ο蟪绦蛟O(shè)計課程建設(shè)的探索與實踐[J].計算機教育,2009(5):91-94. [3] 夏承遺,李文杰,孫世溫. 問題驅(qū)動的“C++ 程序設(shè)計”教學(xué)方法研究[J].計算機教育,2010(1):122-125. [4] 錢能.C++程序設(shè)計教程[M].北京:清華大學(xué)出版社,1999. 【通聯(lián)編輯:王力】1