資源描述:
《華為C++中級(jí)培訓(xùn)膠片》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、C++中級(jí)培訓(xùn)員工培訓(xùn)中心2005年7月1日蔡利元課程內(nèi)容第一章:類第二章:接口第三章:運(yùn)算符重載第四章:模板第一章:類基本概念類的基本特性類的應(yīng)用的特例基本概念namespaceClassnamesClassmembersMemberFunctionsStaticMemberFunctionsUnionsC++BitFieldsNestedClassDeclarationsTypeNamesinClassScopeMultipleBaseClassesVirtualFunctionsAbstractClassesControllingA
2、ccesstoClassMembersprivateMembersprotectedMemberspublicMembersAccessSpecifiersforBaseClasses,priavte,public、protectedFriendsConstructorsDestructorsConversionFunctionsthenewoperatorandthedeleteoperatorCopyingConstructorFunctionsInterface類的基本特性構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)靜態(tài)成員與友元組合與繼承構(gòu)造函數(shù)與拷貝
3、構(gòu)造函數(shù)C++規(guī)定與類同名的函數(shù)就是拷貝構(gòu)造函數(shù)默認(rèn)拷貝構(gòu)造函數(shù)在類定義中如果沒有提供自己的拷貝構(gòu)造函數(shù),則C++提供一個(gè)默認(rèn)的構(gòu)造函數(shù),其拷貝策略是逐個(gè)成員依次拷貝。深拷貝和淺拷貝默認(rèn)拷貝構(gòu)造函數(shù)均是淺拷貝但是一個(gè)類可能擁有其它資源,如其構(gòu)造函數(shù)分配了一個(gè)堆內(nèi)存,析構(gòu)函數(shù)釋放了這個(gè)內(nèi)存,則此時(shí)就需要進(jìn)行深拷貝了深拷貝不能依賴編譯器實(shí)現(xiàn)靜態(tài)成員與友元靜態(tài)成員使用static申明,在內(nèi)存中永遠(yuǎn)只有一份實(shí)例是類的對象所共有的靜態(tài)成員變量可以被成員函數(shù)訪問,但靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量友元是為了一個(gè)普通函數(shù)直接訪問一個(gè)類的保護(hù)甚至是私有成
4、員的機(jī)制組合與繼承C++最重要的性能之一是代碼重用簡單地創(chuàng)建一個(gè)包含已存在的類對象的新類,這稱為組合,has-a關(guān)系創(chuàng)建一個(gè)新類作為一個(gè)已存在類的類型,采取這個(gè)已存在類的形式,對它增加代碼,但不修改它。稱為繼承,具有is-a關(guān)系,繼承具有單一繼承和多繼承類的應(yīng)用的特例繼承中的向上映射與切片問題多繼承中發(fā)生的菱形缺陷this跳轉(zhuǎn)繼承中的向上映射與切片問題如果有classB:publicA;Bb;Aa=b;這就是切片現(xiàn)象而B*pb=newB;A*pa=pb;則不會(huì)發(fā)生切片,因?yàn)檫@只是指針的賦值而不涉及到切片現(xiàn)象多繼承中發(fā)生的菱形缺陷菱形缺陷導(dǎo)
5、致的原因:發(fā)生了菱形繼承,如右圖兩個(gè)缺陷:子對象重疊向上映射的二義性解決辦法:修改多繼承關(guān)系為單一繼承關(guān)系或者是組合關(guān)系進(jìn)行虛繼承this跳轉(zhuǎn)如右圖繼承關(guān)系對于一個(gè)已經(jīng)實(shí)例化B類的對象bObject,永遠(yuǎn)有(B*)&bObject==(A*)&bObject成立但是在多繼承的世界內(nèi),上面的等式就不能恒成立,對象的同一性受到了挑戰(zhàn).特別的是,在多繼承世界內(nèi)如果左下的菱形關(guān)系存在情況下,如果對于已經(jīng)實(shí)例化B類的對象bObject;(Base*)(A1*)&bObject!=(Base*)(A2*)&bObject成立,當(dāng)這種事情發(fā)生的時(shí)候我們
6、就只能特殊處理了。這種情況在COM應(yīng)用中處處都會(huì)發(fā)生。第二章:接口基本知識(shí)基本特性接口應(yīng)用的特例應(yīng)用舉例基本概念ClassVirtualfunctionsPurevirtualfunctionsAbstractclassStruct&Interface基本特性虛函數(shù)純虛函數(shù)抽象類接口虛函數(shù)語法特性虛析構(gòu)函數(shù)語法在普通成員函數(shù)前面加virtual關(guān)鍵字一個(gè)函數(shù)在基類申明一個(gè)virtual,那么在所有的派生類都是是virtual的一個(gè)函數(shù)在基類為普通函數(shù),在派生類定義為virtual的函數(shù)稱為越位特性實(shí)施晚期綁定(即運(yùn)行時(shí)刻綁定),實(shí)施多態(tài)的
7、一種方法具有虛函數(shù)類的虛函數(shù)表的布局如下:classvtprclass::m1class::m2純虛函數(shù)語法:成員函數(shù)前面加virtual關(guān)鍵在,在函數(shù)申明的”)”后標(biāo)注“=0”關(guān)鍵字在申明純虛函數(shù)類中不能實(shí)現(xiàn)該函數(shù)抽象類具有純虛函數(shù)的類就是抽象類抽象類不能被實(shí)例化,所以抽象類只能以指針方式被應(yīng)用抽象類可以防止切片的發(fā)生抽象類不產(chǎn)生虛表。用戶接口接口的演化與接口的必要性接口應(yīng)用特例接口應(yīng)用示例接口的演化與接口的必要性Handle-Body模式抽象接口classHandlem_pThisclassclassvtprclass::m1clas
8、s::m2接口應(yīng)用特例多重接口與方法名沖突問題(Siamesetwins)提出問題:假設(shè)汽車最大速度的接口為ICar,潛艇最大速度的接口為IBoat,有一個(gè)兩棲類的交通工具它可以奔跑在馬路上,