張玉軍
(遼寧科技大學(xué) 軟件學(xué)院,遼寧 鞍山 114051)
目前C++語言的教學(xué)資料一般集中在對(duì)語法的講授上,使用的案例也是為了配合語法的講解。但是C++語言內(nèi)容多、知識(shí)點(diǎn)分散、語法靈活,依靠死記硬背肯定得不到好的學(xué)習(xí)效果??梢越o學(xué)生提供合理的綜合案例,將孤立枯燥的C++語法融入到綜合案例中,從而將各章節(jié)的內(nèi)容銜接起來。
講解完類的定義以后,設(shè)計(jì)一個(gè)處理一維整型數(shù)組的順序表類List,實(shí)現(xiàn)數(shù)組元素的插入,刪除,查找,輸出等功能。在主函數(shù)創(chuàng)建List類的對(duì)象,調(diào)用各成員函數(shù)驗(yàn)證代碼的正確性。
List類設(shè)計(jì)如下:
數(shù)據(jù)成員:
int data[MaxSize];//存儲(chǔ)元素
int length;//順序表實(shí)際長(zhǎng)度,即數(shù)組中實(shí)際元素個(gè)數(shù)
成員函數(shù):
(1)初始化void Init()
功能:設(shè)置數(shù)據(jù)成員length的值為0。
(2)獲取順序表實(shí)際長(zhǎng)度int Length()
功能:獲取順序表實(shí)際長(zhǎng)度,即返回length的值。
(3)查找int Get(int i)
功能:查找下標(biāo)為i的元素的值,即如果i的值有效,則返回元素data[i]。
(4)插入void Insert(int i,int x)
功能:在下標(biāo)i處插入x,即如果i的值有效,將i后面的元素后移,然后data[i]賦值為x,線性表實(shí)際長(zhǎng)度加1。
(5)刪除int Delete(int i)
功能:在下標(biāo)i有效的前提下,刪除該元素,返回被刪除元素的值,被刪除元素后面各元素前移,線性表實(shí)際長(zhǎng)度減1。
(6)輸出void Display()
功能:輸出線性表,包括線性表實(shí)際長(zhǎng)度和各元素。
講解完構(gòu)造函數(shù)后,為順序表類List增加構(gòu)造函數(shù)、析構(gòu)函數(shù)和拷貝構(gòu)造函數(shù),將靜態(tài)數(shù)組改為動(dòng)態(tài)數(shù)組,在主函數(shù)中增加菜單功能進(jìn)行測(cè)試。
List類設(shè)計(jì)如下:
數(shù)據(jù)成員:
int MaxSize;//順序表的最大長(zhǎng)度
int*data;//存儲(chǔ)元素
int length;//順序表實(shí)際長(zhǎng)度
新增或修改的成員函數(shù)
(1)構(gòu)造函數(shù)List(int size=100)
功能:動(dòng)態(tài)申請(qǐng)長(zhǎng)度為size的數(shù)組,將size賦給MaxSize,length賦值為0。
(2)拷貝構(gòu)造函數(shù)List(const List&r)
功能:實(shí)現(xiàn)深拷貝,當(dāng)前對(duì)象的data指針先申請(qǐng)空間,然后再將順序表r中的數(shù)據(jù)復(fù)制到當(dāng)前對(duì)象。
(3)析構(gòu)函數(shù)~List()
功能:釋放由構(gòu)造函數(shù)動(dòng)態(tài)申請(qǐng)的內(nèi)存空間,delete[]data。
講解完友元函數(shù)后,增加友元函數(shù)Merge,實(shí)現(xiàn)兩個(gè)順序表的合并。List類新增的成員函數(shù)如下:friend void Merge(List&La,List&Lb)。
講解完類模板后,將順序表類List改為類模板。為更好地體現(xiàn)模板,在案例中添加學(xué)生類Student,體現(xiàn)出List改為模板后不但可以處理基本數(shù)據(jù)類型,還可以處理自定義數(shù)據(jù)類型。
講解完繼承與派生后,以順序表類List為基類,派生棧類SeqStack,實(shí)現(xiàn)壓棧、彈棧、取棧頂元素,判斷棧空等功能,由順序表類派生出棧類。順序表類List保持不變,棧類SeqStack的成員函數(shù)為:
(1)壓棧成員函數(shù)void Push(int x)
功能:在棧不滿的前提下,即Length()!=Maxsize(),調(diào)用類List的成員函數(shù)Insert(Length(),x),在位置Length()處插入x。
(2)彈棧成員函數(shù)int Pop()
功能:在棧非空的前提下,即Length()!=0,調(diào)用List的成員函數(shù)。Delete(Length()-1),刪除棧頂即位置為L(zhǎng)ength ()-1的元素。返回被刪元素。
(3)取棧頂元素成員函數(shù)int Gettop()
功能:在棧非空的前提下,即Length()!=0,調(diào)用List的成員函數(shù)。Get(Length()-1),獲取位置為L(zhǎng)ength()-1的元素的值。
講解完多態(tài)后,為學(xué)生類Student類增加<和<<運(yùn)算符重載,擴(kuò)充順序表類模板功能。
通過引入綜合案例貫穿各個(gè)章節(jié),每章對(duì)案例逐步完善,使得各章的知識(shí)點(diǎn)都融合在綜合案例中,更加有利于學(xué)生理解和掌握,有利于知識(shí)的融會(huì)貫通,收到很好的效果。
[1]張軍,婁偉.實(shí)踐教學(xué)改革與培養(yǎng)創(chuàng)新人才的研究與探討[J].實(shí)驗(yàn)技術(shù)與管理,2006,23(6):108-109.
[2]李學(xué)會(huì).C程序設(shè)計(jì)教學(xué)改革與實(shí)踐[J].實(shí)驗(yàn)室科學(xué),2010(2):33-34.
[3]張錦祥.高級(jí)程序設(shè)計(jì)語言課程教學(xué)改革與實(shí)踐[J].浙江教育學(xué)院學(xué)報(bào),2007(7):71-76.