韓祥波 張艷華 黃晶晶 張立紅
【摘 要】分析了引用的本質(zhì),探討了引用在函數(shù)參數(shù)、復(fù)制構(gòu)造函數(shù)、運(yùn)算符重載、多態(tài)等方面的案例,通過在實(shí)驗(yàn)班和卓越班的多次教學(xué)使用,更好的調(diào)動(dòng)了學(xué)生的積極性。
【關(guān)鍵詞】引用;運(yùn)算符重載;多態(tài);教學(xué)實(shí)踐
Teaching Practice of Reference in Course of “C++ Object Oriented Programming”
HAN Xiang-Bo ZHANG Yan-hua HUANG Jing-jing ZHANG Li-hong
(College of Computer Science and Technology,Shandong University of Technology,Zibo Shandong 255049,China)
【Abstract】The essence of reference was analyzed.It was discussed in the function parameter,the copy constructor,operator overloading, polymorphism and other aspects.The enthusiasm of students was mobilized through several teaching in the experimental class and excellent class.
【Key words】Reference;Operator overloading;Polymorphism;Teaching practice
0 引言
《面向?qū)ο蟪绦蛟O(shè)計(jì)》是計(jì)算機(jī)及相關(guān)專業(yè)的一門重要專業(yè)基礎(chǔ)課,其中諸多難點(diǎn)更需要學(xué)生體會(huì)掌握。而引用便是涉及抽象、封裝、繼承、多態(tài)這條主線的一個(gè)難點(diǎn)。學(xué)生前期學(xué)的指針作為C語言的精華在很多方面得到了高效使用,但是仍有其缺陷:要明確使用指針本身還是所指變量、無初始化時(shí)出現(xiàn)懸空指針、不合理賦值后出現(xiàn)系統(tǒng)關(guān)鍵地址存放內(nèi)容被改寫、項(xiàng)目后期維護(hù)代價(jià)高等。于是在C++、Java、c#這些主流的開發(fā)平臺(tái)中使用受到諸多限制,而它的代替者—引用出現(xiàn)了。
1 引用概念
在C++中,變量的引用就是變量的別名,故引用又稱別名(alias)??赏ㄟ^下述代碼來理解其本質(zhì)。
#include
void main(){int x=100; int & m=x;
cout<<"x="< CCopyS(const CCopyS & x) {number=x.number;cout<<"CCopy:"< void main() { CCopyS s1,s2;s1.number=12;s2=s1;CCopyS s3=s1;} 在s2=s1中,對(duì)已存在的對(duì)象賦值故不需使用復(fù)制構(gòu)造函數(shù),而在CCopyS s3=s1中按s1標(biāo)準(zhǔn)構(gòu)造出新對(duì)象s3要調(diào)用復(fù)制構(gòu)造函數(shù),出于對(duì)s1對(duì)象保護(hù)目的,對(duì)其加const限制。 4 引用在運(yùn)算符重載中的使用 #include class COpOl {public:int m1; COpOl(int x= 0){m1=x;} friend ostream & operator << (ostream &, const COpOl &);}; ostream& operator << (ostream & output,COpOl & c){output<<" m1="<
void main( ){ COpOl c1,c2(3),c3(5); cout< 兩個(gè)參數(shù)均為引用類型,前者的使用使得復(fù)雜類型得以連續(xù)輸出。從cout< 5 引用在多態(tài)中的使用 #include class CPolyMorphA {public:CPolyMorphA(int n) { a1= n;} virtual void fn( ){cout<<" aaaa"< class CPolyMorphB:public CPolyMorphA {public:float a1;CPolyMorphB(int m,float p):CPolyMorphA(m),a1(p) { } virtual void fn( ) {cout<<" bbbbbb"< void call(CPolyMorphA & p){p.fn();} void main( ){ CPolyMorphA s1(1001);} 通過call函數(shù)使用基類引用形參,保證了基類及其派生類族都可以調(diào)用,接口的統(tǒng)一使得實(shí)參更易使用。由于形參引用類型的定義使得虛函數(shù)fn( )隨著調(diào)用者的不同而實(shí)現(xiàn)動(dòng)態(tài)自動(dòng)查找對(duì)應(yīng)自己版本的功能,而這個(gè)多態(tài)的實(shí)現(xiàn)若是非引用或指針類型,是難以實(shí)現(xiàn)虛函數(shù)如此功能的。 6 總結(jié) 引用使得函數(shù)單一用retrun返值的局面得以改變,從而能訪問函數(shù)臨時(shí)棧意外的變量,突破了函數(shù)一般形參的局限性,可以去改寫批量數(shù)據(jù)。若僅讓引用具有只讀性,可在形參中加const限制,如上文(ostream &,const COpOl&)只能輸出自定義類型而不能改寫。引用不像指針通過尋址間接訪問變量,而是通過與引用變量同址同值即一個(gè)變量?jī)蓚€(gè)名字來使用,得得效率更高,性能更安全可靠,從而在當(dāng)前諸多開發(fā)工具中廣泛使用。以上案例通過課堂教學(xué)和上機(jī)實(shí)踐方式,在實(shí)驗(yàn)班和卓越班的多次教學(xué)中很好提高了學(xué)生的積極性。 【參考文獻(xiàn)】 [1]譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2006. [2]錢能.C++程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,1999. [3]呂鳳翥.C++語言基礎(chǔ)教程[M].北京: 清華大學(xué)出版社,1999. [責(zé)任編輯:田吉捷]