韓祥波 張艷華 黃晶晶 張立紅
【摘 要】分析了引用的本質,探討了引用在函數(shù)參數(shù)、復制構造函數(shù)、運算符重載、多態(tài)等方面的案例,通過在實驗班和卓越班的多次教學使用,更好的調(diào)動了學生的積極性。
【關鍵詞】引用;運算符重載;多態(tài);教學實踐
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 引言
《面向對象程序設計》是計算機及相關專業(yè)的一門重要專業(yè)基礎課,其中諸多難點更需要學生體會掌握。而引用便是涉及抽象、封裝、繼承、多態(tài)這條主線的一個難點。學生前期學的指針作為C語言的精華在很多方面得到了高效使用,但是仍有其缺陷:要明確使用指針本身還是所指變量、無初始化時出現(xiàn)懸空指針、不合理賦值后出現(xiàn)系統(tǒng)關鍵地址存放內(nèi)容被改寫、項目后期維護代價高等。于是在C++、Java、c#這些主流的開發(fā)平臺中使用受到諸多限制,而它的代替者—引用出現(xiàn)了。
1 引用概念
在C++中,變量的引用就是變量的別名,故引用又稱別名(alias)??赏ㄟ^下述代碼來理解其本質。
#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中,對已存在的對象賦值故不需使用復制構造函數(shù),而在CCopyS s3=s1中按s1標準構造出新對象s3要調(diào)用復制構造函數(shù),出于對s1對象保護目的,對其加const限制。 4 引用在運算符重載中的使用 #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< 兩個參數(shù)均為引用類型,前者的使用使得復雜類型得以連續(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ù)fn( )隨著調(diào)用者的不同而實現(xiàn)動態(tài)自動查找對應自己版本的功能,而這個多態(tài)的實現(xiàn)若是非引用或指針類型,是難以實現(xiàn)虛函數(shù)如此功能的。 6 總結 引用使得函數(shù)單一用retrun返值的局面得以改變,從而能訪問函數(shù)臨時棧意外的變量,突破了函數(shù)一般形參的局限性,可以去改寫批量數(shù)據(jù)。若僅讓引用具有只讀性,可在形參中加const限制,如上文(ostream &,const COpOl&)只能輸出自定義類型而不能改寫。引用不像指針通過尋址間接訪問變量,而是通過與引用變量同址同值即一個變量兩個名字來使用,得得效率更高,性能更安全可靠,從而在當前諸多開發(fā)工具中廣泛使用。以上案例通過課堂教學和上機實踐方式,在實驗班和卓越班的多次教學中很好提高了學生的積極性。 【參考文獻】 [1]譚浩強.C++面向對象程序設計[M].北京:清華大學出版社,2006. [2]錢能.C++程序設計教程[M].北京:清華大學出版社,1999. [3]呂鳳翥.C++語言基礎教程[M].北京: 清華大學出版社,1999. [責任編輯:田吉捷]