欢迎来到天天文库
浏览记录
ID:61960466
大小:122.00 KB
页数:22页
时间:2020-02-25
《第12章 类别继承(class inheritance).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第12章類別繼承(classinheritance)程式碼再利用(Reuse)、C++類別繼承陣列基底類別(baseclass)、列表12-1arraydb.h:ArrayofDouble公有繼承––is-a關係宣告衍生類別朝上(upcast)與朝下轉換(downcast)虛擬成員函數虛擬函數運作方式單純虛擬函數(purevirtualfunction)三種類別繼承方式問題回顧程式設計練習(一)、(二)1程式碼再利用(Reuse)動機:開發新專案時,最好能使用一些經過測試的程式碼,而不需重新設計。節省研發時間。降低程式中的錯誤。讓程式設計師專注於程式架構。傳統程式碼再利用方法:函數庫
2、(functionlibrary)傳統C程式庫提供函數,如strlen()。針對特殊用途開發的程式庫,如資料庫管理函數、螢幕控制函數。缺點:未提供原始碼,無法擴充或修改功能。即使有原始碼,修改的同時,也可能更動了其他函數。2C++類別繼承C++的程式碼再利用方法之一:類別繼承類別由資料和運作方式(成員函數)所組成,整合性高於函數庫。類別通常包含原始碼。從一個基底類別(baseclass),繼承它的全部特性,包含資料和運作方式,改變成一個新的類別。從一個繼承來的類別開始設計,遠比重新設計來得簡單。對繼承來的類別可做以下更動:加入新的資料。加入新的函數。修改原有函數之運作方式。類別繼承v
3、s.修改類別原始碼類別繼承為程式語言中提供之系統化機制,從原有類別調整設計新的類別。直接修改類別原始碼,程式語言及編譯器均無法提供任何協助。3陣列基底類別(baseclass)C++語言已提供陣列型態,為何還需要陣列類別?C++語言陣列型態的缺點:未提供陣列範圍檢查。doublea[4]={1.27,1.98,3.0,2.1};a[129301]=1.0;//accessviolation存取違反a[-3]=1.5;某些程式片斷,使用者很難分辨使用陣列或指標。voidup(double*x,intn);//x是指標或陣列?n為陣列大小?如果將陣列名稱傳入函數引數中,函數無從得知陣列的
4、大小。通常陣列不被視為一個實體,例如,不能以陣列為另一陣列設定初值;也不能將陣列設定給另一陣列。未提供陣列之數學運算。4列表12-1arraydb.h:ArrayofDoubleclassArrayDb{private:unsignedintsize;//numberofarrayelementsprotected:double*arr;//addressoffirstelementpublic:ArrayDb();//defaultconstructorArrayDb(unsignedintn,doubleval=0.0);//settovalArrayDb(constdouble
5、*pn,unsignedintn);//settopnArrayDb(constArrayDb&a);//copyconstructor~ArrayDb();//destructorunsignedintarsize()const{returnsize;}//overloadedoperatorsdouble&operator[](inti);//arrayindexingconstdouble&operator[](inti)const;//indexing(no=)ArrayDb&operator=(constArrayDb&a);friendostream&operator<<
6、(ostream&os,constArrayDb&a);};5列表12-3:使用ArrayDb#include#include"arraydb.h"intmain(void){unsignedintregions;//readnumberofregionscin>>regions;ArrayDbtons(regions);//createan"array"ofthatsizecout<<"Entertheregionaltinselsalesintons:";for(inti=0;i7、":";cin>>tons[i];//usearraynotation}ArrayDbdup;//defaultobjectdup=tons;//arrayassignmentdoublewts[5]={155.2,189.6,174.3,256.9,203.5};ArrayDbbod(wts,5);//initializeanArrayDbtoanarrayreturn0;}6公有繼承––is-a關係C++擁有三種繼承模式:公有(public)、保護(p
7、":";cin>>tons[i];//usearraynotation}ArrayDbdup;//defaultobjectdup=tons;//arrayassignmentdoublewts[5]={155.2,189.6,174.3,256.9,203.5};ArrayDbbod(wts,5);//initializeanArrayDbtoanarrayreturn0;}6公有繼承––is-a關係C++擁有三種繼承模式:公有(public)、保護(p
此文档下载收益归作者所有