語言程序設計期末總結_第1頁
語言程序設計期末總結_第2頁
語言程序設計期末總結_第3頁
語言程序設計期末總結_第4頁
語言程序設計期末總結_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C+程序設計總結:1. C與C+的區別:引入類和對象,成為面向對象的程序設計語言一、類 二、引用三、函數的重載四、流操作符五、操作符重載六、繼承,以及虛函數參考(C是一個結構化語言:它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制),而對于C+,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。 所以C與C+的最大區別在于它們的用于解決問題的思想方法不一樣。之所以說C+比C更先進,是因為“ 設計這個概念已經被融入到C+之中 ”

2、,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設計的基礎,好的設計如果沒有好的算法,一樣不行。而且,“C加上好的設計”也能寫出非常好的東西。 對語言本身而言,C是C+的子集,那么是什么樣的一個子集?從上文可以看出, C實現了C+中過程化控制及其它相關功能,而在C+中的C(我稱它為“C+”),相對于原來的C還有所加強,引入了重載、內聯函數、異常處理等等玩藝兒,C+更是拓展了面向對象設計的內容,如類、繼承、虛函數、模板和包容器類等等。 再提高一點,在C+中,數據封裝、類型這些東東已不是什么新鮮事了,需要考慮的是諸如:對象粒度的選擇、對象接口的設計和繼承、組合與

3、繼承的使用等等問題。 所以相對于C,C+包含了更豐富的“設計”的概念,但C是C+的一個自洽子集,也具有強大的功能,同樣值得學習。)l *全面兼容C 它保持了C的簡潔、高效和接近匯編語言等特點 對C的類型系統進行了改革和擴充 C+也支持面向過程的程序設計,不是一個純正的面向對象的語言l 支持面向對象的方法2. 友元函數 友元函數在類中用 friend 修飾的非成員函數,在其函數體中可以通過對象名訪問類的 Private和protected成員。l 作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。l 訪問對象中的成員必須通過對象名。 友元類: 若A類為B類的友元類,則A類的所有成員函數

4、都是B類的友元函數, 都可以訪問B類的私有和保護成員。 語法形式: class B ··· /B類中成員函數聲明 friend class A; /聲明A為B的友元類 ···; 注意:(1. 友元關系是不能傳遞的 2. 友元關系是單向的 3. 友元關系是不被繼承的。)3. 重載 哪些運算符不能重載:類屬關系運算符“.”,成員指針運算符“.*”,作用域分辨符“:”,三目運算符“?:”。運算符重載的兩種形式:重載為類的非靜態成員函數(函數只有一個形參)和重載為非成員函數(函數的形參有兩個)。*運算符重載 成員與非成員 之間的差異:如何實現

5、差異:308至315頁 例8-1、8-2、8-3*4. 繼承(實現代碼重用)與派生類的繼承方式:公有繼承、私有繼承、保護繼承。繼承:公有繼承(public):(1) 基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的private成員不可直接訪問。(2) 派生類中的成員函數可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。(3) 通過派生類的對象只能訪問基類的public成員。私有繼承(private):l 基類的public和protected成員都以private身份出現在派生類中,但基類的private成員不可

6、直接訪問。l 派生類中的成員函數可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。l 通過派生類的對象不能直接訪問基類中的任何成員保護繼承(protected):l 基類的public和protected成員都以protected身份出現在派生類中,但基類的private成員不可直接訪問。l 派生類中的成員函數可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。l 通過派生類的對象不能直接訪問基類中的任何成員5. 拷貝構造函數(無返回類型110113)l 構造函數的作用是在對象被創建時使用特定的值構造

7、對象,或者說將對象初始化為一個特定的狀態。l 在對象創建時由系統自動調用。l 如果程序中未聲明,則系統自動產生出一個隱含的參數列表為空的構造函數l 允許為內聯函數、重載函數、帶默認形參值的函數l 拷貝構造函數是一種特殊的構造函數,其形參為本類的對象引用。拷貝構造函數被調用的情況:l 當用類的一個對象去初始化該類的另一個對象時系統自動調用拷貝構造函數實現拷貝賦值。l 若函數的形參為類對象,調用函數時,實參賦值給形參,系統自動調用拷貝構造函數。l 當函數的返回值是類對象時,系統自動調用拷貝構造函數。方法:class 類名 public: 類名(形參表); /構造函數 類名(類名&對象名);

8、 /復制構造函數 ··· /各成員函數;類名:類名(類名&對象名); /復制構造函數的實現 函數體···例題:class Pointpublic: Point(int xx=0,int yy=0) /構造函數 x=xx; y=yy;Point(Point&p); /復制構造函數int getX( ) return x;int getY( ) return y;private: int x,y;/復制構造函數的實現Point:Point(Point&p) x=p.x; y=p.y; cout<<“”&

9、lt;<endl;6. 引用 引用傳遞:l 引用(&)是標識符的別名,例如:int i, j;int &ri = i; /建立一個int型的引用ri,并將其 /初始化為變量i的一個別名j = 10;ri = j;/相當于 i = j;l 聲明一個引用時,必須同時對它進行初始化,使它指向一個已存在的對象。l 一旦一個引用被初始化后,就不能改為指向其它對象。l 引用可以作為形參void swap(int &a, int &b) .?/函數參數的引用7. 內聯函數的使用 內聯函數的引用和聲明:l 聲明時使用關鍵字 inline。l 編譯時在調用處用函數體進行替換

10、,節省了參數傳遞、控制轉移等開銷。l 注意: 內聯函數體內不能有循環語句和switch語句。 內聯函數的聲明必須出現在內聯函數第一次被調用之前。 對內聯函數不能進行異常接口聲明8. 派生類的構造函數初始化如何實現? 派生類構造函數語法形式:(265頁)* (166例 7-4)* (268269例 7-5)*派生類與基類的構造函數:l 當基類中聲明有缺省構造函數或未聲明構造函數時,派生類構造函數可以不向基類構造函數傳遞參數,也可以不聲明,構造派生類的對象時,基類的缺省構造函數將被調用。l 當需要執行基類中帶形參的構造函數來初始化基類數據時,派生類構造函數應在初始化列表中為基類構造函數提供參數。有

11、內嵌對象時的構造函數:派生類名:派生類名(形參表):基類名1(參數), 基類名2(參數), .基類名n(參數),新增成員對象的初始化 本類成員初始化賦值語句;構造函數的執行順序:1 調用基類構造函數,調用順序按照它們被繼承時聲明的順序(從左向右)。2 對成員對象進行初始化,初始化順序按照它們在類中聲明的順序。3執行派生類的構造函數體中的內容。9. 純虛函數和抽象類,應用場合 特點 使用限制(321323) 純虛函數(沒有函數體)聲明格式: virtual 函數類型 函數名(參數表)=0; 聲明為純虛函數之后,基類中就可以不再給出函數的實現部分。 純虛函數的函數體由派生類給出。 抽象類:(*例

12、8-4 323) (抽象類不能產生對象)抽象類不能實例化。 抽象類:帶有純虛函數的類。10. 不聲明public、private、protected 會被默認為私有成員。11. 對象數組初始化l 數組中每一個元素對象被創建時,系統都會調用類構造函數初始化該對象。l 通過初始化列表賦值。例:Point a2=Point(1,2),Point(3,4);l 如果沒有為數組元素指定顯式初始值,數組元素便使用默認值初始化(調用缺省構造函數)。對象數組元素所屬類的構造函數:l 不聲明構造函數,則采用缺省構造函數。l 各元素對象的初值要求為相同的值時,可以聲明具有默認形參值的構造函數。l 各元素對象的初值

13、要求為不同的值時,需要聲明帶形參的構造函數。l 當數組中每一個對象被刪除時,系統都要調用一次析構函數。 12. this 指針This 指針是一個隱含于每一個類的非靜態成員函數中的特殊指針(包括構造函數和析構函數),它用于指向正在被成員函數操作的對象。l 隱含于每一個類的成員函數中的特殊指針。l 明確地指出了成員函數當前所操作的數據所屬的對象。 當通過一個對象調用成員函數時,系統先將該對象的地址賦給this指針,然后調用成員函數,成員函數對對象的數據成員進行操作時,就隱含使用了this指針。13. 文件與流的關系 ?14. 派生類中包含內嵌對象的構造函數執行順序: 構造函數的執行順序:(1)用

14、基類構造函數,調用順序按照它們被繼承時聲明的順序(從左向右)。(2)員對象進行初始化,初始化順序按照它們在類中聲明的順序。(3)派生類的構造函數體中的內容。15. 派生類中包含內嵌對象的析構函數執行順序:(與構造函數完全相反)16. c+特點:(4個)· C+語言具有以下特點:(1) C+是C語言的超集。它既保持了C語言的簡潔、高效和接近匯編語言等特點,又克服了C語言的缺點,其編譯系統能檢查更多的語法錯誤,因此,C+比C語言更安全。(2) C+保持了與C語言的兼容。絕大多數C語言程序可以不經修改直接在C+環境中運行,用C語言編寫的眾多庫函數可以用于C+程序中。(3) 支持面向對象程序

15、設計的特征。C+既支持面向過程的程序設計,又支持面向對象的程序設計。(4) C+程序在可重用性、可擴充性、可維護性和可靠性等方面都較C語言得到了提高,使其更適合開發大中型的系統軟件和應用程序。17. 二異性的概念和特點二義性問題:l 在多繼承時,基類與派生類之間,或基類之間出現同名成員時,將出現訪問時的二義性(不確定性)采用虛函數(參見第8章)或同名隱藏規則來解決。l 當派生類從多個基類派生,而這些基類又從同一個基類派生,則在訪問此共同基類中的成員時,將產生二義性采用虛基類來解決。如何解決:l 解決方法:解決方法一:用類名來限定c1.A:f() 或 c1.B:f()l 解決方法二:同名隱藏在C

16、 中聲明一個同名成員函數f(),f()再根據需要調用 A:f() 或 B:f()18. 多態性的四類 運算符重載、函數重載、虛函數、純虛函數和抽象類19. 流的設置 特點 、 cout 寬度? 輸出寬度:為了調整輸出,可過在流中放入setw操縱符(manipulator)或調用width成員函數為每個項指定輸出寬度。20.對象指針對象指針:l 聲明形式類名 *對象指針名;l 例Point a(5,10);Piont *ptr;ptr=&a;l 通過指針訪問對象成員對象指針名->成員名ptr->getx() 相當于 (*ptr).getx();21. 常引用(166167)

17、常引用:聲明時用const修飾的引用。 常引用所引用的對象不能被更新。22. 指向對象的常指針常類型:常類型的對象必須進行初始化,而且不能被更新。l 常對象:必須進行初始化,不能被更新。const 類名 對象名l 常引用:被引用的對象不能被更新。const 類型說明符 &引用名l 常數組:數組元素不能被更新類型說明符 const 數組名大小.l 常指針:指向常量的指針關于指針類型,應注意:(1) 指向常量的指針,不能通過指針來改變所指對象的值,但指針本身可以改變,可以指向另外的對象。int a;const int *p1=&a; /p1是指向常量的指針int b;p1=&

18、;b; /正確。 P1本身的值可以改變*p1=1; /出錯。 不能通過p1改變所指的對象(2) 指針類型的常量,指針本身的值不能被改變。int * const p2=&a;p2=&b; /錯誤。P2是指針常量,值不能改變。 23. const的用法 通過指針是哪些值不能修改的用法:const 的使用const經常用來修飾一個值不能改變的量,安全,并且能消除存儲操作const的幾種用法:(1)說明值常量(2)說明指針(3)說明函數參數及其返回值(4)說明類的常量和成員函數const 說明值常量值常量的說明一般放在頭文件或者文件的開始部分,也可以放在類中進行說明(1)說明符號常量,

19、表明符號代表的是一個常量,語法:<類型>const<常量名>=<表達式>,<常量名>=<表達式>例如:double const PI=3.14; const double PI=3.14;(2)說明數組常量,語法格式:<類型>const<數組名>大小=初值表;const類型> <數組名>大小=初值表;(3)說明對象常量,語法格式:<類名>const<對象名>const <類名> <對象名>(4)說明引用常量(5)const與C語言中的#defin

20、e的差別無參宏不是符號常量,沒有數據類型,沒有值,在內存中不分配地址。它在預處理時做宏替換,不可能做類型檢查。const定義的常量是符號常量,有數據類型,也有值,且其值不可改變,在內存中有地址,編譯時做類型檢查。Const和指針Const和指針的三種經典組合(1)指向常量的指針const int *p;(2)常指針char *const pc=a;(3)指向常量的常指針const char *const pc=a指向常量的指針(指針指向一個不可變量)指針在指向有一個常量后,不能通過指針修改這個常量,但是可以指向一個新的常量,例如:Const char *pc=”ABCD”;Pc3=a;不合法,

21、企圖修改原來指向的常量Pc=“WERT”;合法指向另外一個常量常指針要把指針變量中的值(也就是地址)聲明為常量,采用以下語法:<類那些>*const<指針名>=<初值>;這樣定義的指針變量中存放的指針是個常量,稱為常指針。定義后,該指針指向固定的內存單元,不能再指向其他內存單元,通過它可以修改所指單元里存放的內容。例如:Char *const pc=”ABCD”;Pc3=a;合法,指針指向的對象可以修改Pc=”QWER”;不可以,指針的指向不可以修改指向常量的常指針指針變量中存放的指針本身和指針所指向的對象都是不可以改變的。例如:Const char *co

22、nst pc=”ASDF”;Pc3=a;不合法,不能改變指針所指對象的值Pc=”QWER”;不合法,不能改變指針的指向Const說明函數參數和返回值用const限定函數參數和返回值,是const最重要的用法。用const修飾函數參數意味著傳過來的實參在函數中是不能被修改的。一般情況下不需要,但是在用指針和引用傳值的場合,為避免實參被修改,就用const修飾,更安全。修飾函數的返回值,意味著該返回值不能被修改。如果傳值并返回地址,const將保證該地址上的內容不會被改變。這就意味著該函數不能作為左值使用,在這種情況下,const通常也是與引用和指針一起使用的。類中的const1.常成員的函數2.

23、常數據成員3.常對象通過指針是哪些值不能修改的?24. 函數模版:函數模板:l 函數模板可以用來創建一個通用功能的函數,以支持多種不同形參,進一步簡化重載函數的函數體設計。l 定義方法:template <模板參數表> 函數定義l 模板參數表的內容 類型參數:class(或typename) 標識符 常量參數:類型說明符 標識符 模板參數:template <參數表> class 標識符25. 作用域:(146149)作用域:(若全局變量與局部變量同名,則局部變量起作用)函數原型作用域:函數原型中的參數,其作用域始于"(",結束于")"局部作用域:函數的形參,在塊中聲明的標識符,其作用域自聲明處起,限于塊中,類作用域:l 類作用域作用于特定的成員名。l 類X的成員m具有類作用域,對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論