《C++面向對象程序設計》譚浩強版復習總結_第1頁
《C++面向對象程序設計》譚浩強版復習總結_第2頁
《C++面向對象程序設計》譚浩強版復習總結_第3頁
《C++面向對象程序設計》譚浩強版復習總結_第4頁
《C++面向對象程序設計》譚浩強版復習總結_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第1章 C+ 基礎endl 換行并刷新輸出流 setw(n) 設置字段位數為nhex,oct,dec 十六進制,八進制,十進制表示setfill 定義填充字符 setprecision 定義浮點數的精度left,right 左對齊,右對齊showpoint 強制顯示小數點以及全部尾部0C+通過給常量命名的方式定義常量: const<數據類型名><常量名>=<表達式>用const定義的標識符常量時,一定要對其初始化。在說明時進行初始化是對這種常量置值的唯一方法 ,不能用賦值運算符對這種常量進行賦值。函數聲明的一般形式為 函數類型 函數名(參數表)函數模板的定義

2、template<typename 或 class T> 函數定義例子:template<typename T> T max(T a,T b) return(a>b)? a:b; 定義函數模板時可以使用多個類型參數,每個類型參數前面只需加上關鍵字typename或class,用逗號分隔: template <class T1, class T2, class T3>例子:template<class T1, class T2> T1 max(T1 a,T2 b) return (a>b) ? a : (T1)b; 有默認參數的函數:實

3、參與形參的結合是從左至右進行的,因此指定默認值的參數必須放在形參列表中的最右端引用定義 對變量起另外一個名字 (別名alias),這個名字稱為該變量的引用。 <類型> &<引用變量名> = <原變量名>;其中原變量名必須是一個已定義過的變量。如: int max ; int &refmax=max;refmax并沒有重新在內存中開辟單元,只是引用max的單元。max與refmax在內存中占用同一地址,即同一地址兩個名字。 對引用類型的變量,說明以下幾點:1、 引用在定義的時候要初始化 2、 對引用的操作就是對被引用的變量的操作。3、 引用類型

4、變量的初始化值不能是一個常數。4、 一旦引用被聲明,它就不能再指向其它的變量。5、對引用的初始化,可以用一個變量名,也可以用另一個引用。6、引用同變量一樣有地址,可以對其地址進行操作,即將其地址賦給一指針。當&m的前面有類型符時(如int &m),它必然是對引用的聲明;如果前面無類型符(如cout<<&m),則是取變量的地址。7、 對常量(用const聲明)的引用使用如下方式:int i=5;const int &a=i;內聯函數定義的一般格式為:inline <函數值類型> <函數名>(<參數表>) <函數

5、體> 作用域運算符:a表示全局作用域中的變量a。注意:不能用:訪問函數中的局部變量new運算從堆中分配一塊與<類型>相適應的大小為<元素個數>的數組存儲空間,若分配成功,將這塊存儲空間的起始地址存入<指針變量名>,否則置<指針變量名>的值為NULL(空指針值,即0)。new的使用格式為: <指針變量名>=new <類型><元素個數>delete運算符用來釋放<指針變量名>指向的動態存儲空間。使用格式如下: delete <指針變量名> 或 delete <指針變量名>2

6、3第2章 面向對象基本概念面向過程編程與面向對象編程的區別:面向過程編程先確定算法,再確定數據結構;面向對象編程先確定數據結構,再確定運算。類定義:class <類名><訪問控制符>: <成員函數的聲明><訪問控制符>: <數據成員的聲明><成員函數的實現>若在類體外實現,則需要使用作用域運算符“:”,用它來標識某個成員函數是屬于哪個類的,其定義格式如下:<函數值類型> <類名>:<成員函數名>(<參數表>) <函數體>類外訪問對象中的成員可以有3種方法:通過對象

7、名和成員運算符訪問對象中的成員。<對象名>.<公有成員>通過指向對象的指針變量訪問對象中的成員。<對象指針名> -> <公有成員>通過對象的引用訪問對象中的成員。析構函數其定義格式如下:<類名>:<類名>()<函數體>在一般情況下,調用構造函數與聲明對象的順序相同,而調用析構函數的次序正好與創建對象的順序相反。三種構造函數 Box(); /無參構造函數Box(int h,int w ,int len):height(h),width(w),length(len) /帶參構造函數復制構造函數定義<類名

8、>(<參數表>); <類名>(const <類名>& <對象名>)Box(const Box& b);/復制構造函數復制構造函數只有一個參數,并且是對同類對象的引用。靜態成員是類的所有對象共享的成員,而不是某個對象的成員,它在對象中不占存儲空間,是屬于整個類的成員。靜態成員定義格式如下:static<靜態成員的定義>不能用參數初始化表對靜態數據成員初始化,也不能在構造函數體內初始化,靜態數據成員只能在類體外進行初始化。靜態數據成員初始化格式如下:<數據類型> <類名>:<靜態數據成員

9、名>=<值>在類的成員函數中可以直接訪問該類的靜態數據成員,而不必使用成員訪問運算符或類名限定修飾符。在類外必須使用成員訪問運算符或類名限定修飾符訪問公共靜態數據成員。<對象名>.<靜態成員><類名>:<靜態成員>靜態成員函數就是使用static關鍵字聲明的成員函數。 靜態成員函數可以直接訪問該類的靜態成員,但不能直接訪問類中的非靜態成員。第3章 詳解對象對象指針就是用于存放對象數據起始地址的變量。聲明對象指針的一般格式為:<類名> *<對象指針名>對象指針的初始化一般格式為:<數據類型> *

10、<對象指針名>=&<對象名><對象指針名>=&<對象名>通過指針訪問對象成員一般格式如下:<對象指針名> -> <公有成員> boxp->volumn();(*<對象指針名>).<公有成員> (*boxp).volumn();this指針是一個特殊的隱含指針,它隱含于每一個成員函數(靜態成員函數除外)中,也就是說,每個成員函數都有一個this指針參數。this指針指向調用該函數的對象,即this指針的值是當前被調用的成員函數所在的對象的起始地址。復制構造函數中隱含使用th

11、is指針:TAdd(const TAdd& p) this->x=p.x; this->y=p.y; cout<<"copy constructor."<<endl;同樣也可以使用*this來標識調用該成員函數的當前對象。 x this->x (*this).xthis指針是一個const指針,成員函數不能對其進行賦值。靜態成員中不能訪問this指針,因為靜態成員函數不從屬于任何對象。指向非靜態數據成員的指針一般形式為: 數據類型名 *指針變量名;定義指向公有成員函數的指針變量的一般形式為: 數據類型名 (類名: *指針變量

12、名)(參數列表); 使指針變量指向一個公有成員函數的一般形式為: 指針變量名=&類名:成員函數名常量定義格式如下:const <數據類型名> <常量名>=<表達式>常對象是其數據成員值在對象的整個生存期間內不能被改變的對象。const <類名><對象名>(<初始化值>);<類名> const <對象名>(<初始化值>);常成員函數通過常成員函數來引用本類中的常數據成員。 <數據類型><函數名>(<參數表>)const;聲明一維對象數組的一般格式

13、為: <類名> <數組名><下標表達式>第4章 運算符重載重載為類的成員函數格式如下:<類名> operator <運算符>(<參數表>)函數體A operator + (A &);+為前置運算符時,它的運算符重載函數的一般格式為:<type> operator +( )+為后置運算符時,它的運算符重載函數的一般格式為:<type> operator +(int)運算符重載函數不能定義為靜態的成員函數,因為靜態的成員函數中沒有this指針。友元聲明以關鍵字friend開始,只能出現在被訪問類

14、的定義中。具體格式如下: friend <函數值類型> <函數名>(<參數表>);friend class <類名> 友元函數可以訪問該類中的所有成員(公有的、私有的和保護的)通常使用友元函數來取對象中的數據成員值,而不修改對象中的成員值,保證數據安全。重載為類的友元函數語法形式friend <函數值類型> operator <運算符>(<參數表>) <函數體>; +為前置運算符時,它的運算符重載函數的一般格式為:A operator +(A &a)+為后置運算符時,它的運算符重載函數的一般

15、格式為:A operator +(A &a, int)重載提取運算符的一般格式為:friend istream & operater >>(istream &, ClassName &);istream & operater >>(istream &is, ClassName &f)重載輸出(插入)運算符的一般格式為:friend ostream & operater >>(ostream &, ClassName &);ostream & operater >&g

16、t;(ostream &is, ClassName &f)重載類型轉換運算符函數格式:operator返回基本類型名() return 基本類型值類類型轉換函數只能是成員函數,不能是友元函數。轉換函數的操作數是對象。第5章 繼承與派生派生是指由基類創建新類的過程。class A int i; /基類成員 ;class B:public A /A派生了B,B繼承了A, /B自動擁有A的成員 int j; /定義派生類的新成員 ;派生類的定義格式如下:class <派生類名>:<繼承方式> <基類名> <派生類新定義成員> ;派生類繼

17、承了基類的全部數據成員和除了構造、析構函數之外的全部成員函數,它們在派生類中的訪問屬性由繼承方式控制。三種繼承方式下派生類中基類成員的訪問控制權限無論是哪種繼承方式,基類的私有成員在派生類中都是不可被訪問的。只能通過基類的成員函數訪問基類的私有數據成員。 解決的辦法是通過成員初始化表來完成,在成員初始化表中可以顯式調用基類構造函數。<派生類名>(<總參數表>):<基類名>(<參數表1>),<對象成員名>(<參數表2>)<派生類數據成員的初始化>構造函數調用順序為:基類的構造函數對象成員構造函數派生類的構造函數。

18、析構函數調用順序剛好相反。當基類中沒有顯式定義構造函數,或定義了無參構造函數時,派生類構造函數的初始化表可以省略對基類構造函數的調用,而采用隱含調用。當基類的構造函數使用一個或多個參數時,派生類必須定義構造函數,提供將參數傳遞給基類構造函數的途徑。這時,派生類構造函數的函數體可能為空,僅起到參數傳遞作用。如果在基類中既定義了無參構造函數,又定義了帶參構造函數,則在定義派生類構造函數時,既可以包含基類構造函數和參數,也可以不包含基類構造函數。如果在一個派生類中要訪問基類中的私有成員,可以將這個派生類聲明為基類的友元。友元關系是不能繼承的。B類是A類的友元,C類是B類的派生類,則C類和A類之間沒有

19、任何友元關系,除非C類聲明A類是友元。多繼承派生類的定義class <派生類名>:<繼承方式> <基類名1>,<繼承方式> <基類名n> <派生類新定義成員> ;多繼承派生類的構造函數<派生類名>(<總參數表>):<基類名1>(<參數表1>),< 基類名n> (<參數表n>) <派生類數據成員的初始化><總參數表>必須包含完成所有基類初始化所需的參數構造函數調用順序是:先調用所有基類的構造函數,再調用對象成員類構造函數,最后調用

20、派生類的構造函數。處于同一層次的各基類構造函數的調用順序取決于定義派生類時所指定的基類順序,與派生類構造函數中所定義的成員初始化列表順序無關。如果有多個成員類對象,則構造函數的調用順序是對象在類中被聲明的順序,而不是它們出現在成員初始化表中的順序。 析構函數的調用順序與構造函數的調用順序相反。虛基類虛基類的定義格式為: class <派生類名>:virtual <繼承方式><共同基類名>【說明】引進虛基類后,派生類對象中只存在一個虛基類成員的副本。虛基類的初始化與一般多繼承的初始化在語法上相同,但構造函數的調用順序有所不同,規則如下:先調用虛基類的構造函數,

21、再調用非虛基類的構造函數。若同一層次中包含多個虛基類,其調用順序為定義時的順序。若虛基類由非虛基類派生而來,則仍按先調用基類構造函數,再調用派生類構造函數的順序。如果在虛基類中定義了帶參數的構造函數,則要在其所有派生類(包括直接派生類或間接派生類)中,通過構造函數的初始化表對虛基類進行初始化。第6章 多態性與虛函數類型兼容規則類型兼容規則是指在需要基類對象的任何地方,都可以使用公有派生類的對象來替代。類型兼容規則中所指的替代包括以下情況:派生類的對象可以賦值給基類的對象。派生類的對象可以初始化基類的引用。派生類的對象的地址可以賦值給基類的指針變量。在替代之后,派生類對象就可以作為基類的對象使用

22、,但只能訪問從基類繼承的成員。只能用派生類對象對其基類對象賦值,而不能用基類對象對其派生類對象賦值。同一基類的不同派生類對象之間也不能賦值。虛函數虛函數就是在基類中被關鍵字virtual說明、并在一個或多個派生類中被重新定義的成員函數。聲明虛函數的格式如下:virtual <函數值類型> <函數名>(<參數表>);在派生類中重新定義虛函數時,其函數原型包括返回類型、函數名、參數個數、類型和順序,都必須與基類中的原型相同。一個函數一旦被聲明為虛函數,則無論聲明它的類被繼承了多少層,在每一層派生類中該函數都保持虛函數特性。因此,在派生類中重新定義該函數時,可以省

23、略關鍵字virtual。實現動態的多態性時,必須使用基類類型的指針變量或對象引用,并使其指向不同的派生類對象,并通過調用指針或引用所指向的虛函數才能實現動態的多態性。可將類簇中具有共性的成員函數聲明為虛函數,而具有個性的函數沒有必要聲明為虛函數。但是下面的情況例外:靜態成員函數不能聲明為虛函數。構造函數不能是虛函數。內聯成員函數不能聲明為虛函數。析構函數可以是虛函數。虛析構函數虛析構函數的聲明格式如下: virtual <類名>();如果一個類的析構函數是虛函數,那么,由它派生的所有子類的析構函數也是虛函數。純虛函數用virtual聲明,沒有任何實現、必須由派生類覆蓋該函數提供實現

24、純虛函數的聲明格式為: virtual <函數值類型> <函數名>(<參數表>)=0;包含一個或多個純虛函數的類稱為抽象類。如果派生類沒有實現基類中的所有純虛函數,派生類也是抽象類。抽象類無法實例化,即不能創建抽象類的對象。第7章 輸入輸出iostream:I/O流類庫的最主要的頭文件,包含了對輸入輸出流進行操作所需的基本信息,還包括cin、cout、cerr和clog共4個流對象。fstream:用于用戶管理的文件的I/O操作。strstream:用于字符串流I/O。stdiostream:用于混合使用C和C+的I/O操作。iomanip:使用格式化I/O

25、時應包含此頭文件。用setf函數設置狀態標志, 其一般格式如下:long ios:setf(long flags)清除狀態標志用unsetf函數清除狀態標志,其一般格式如下:long ios:unsetf(long flags)用函數flags取狀態標志有兩種形式,其格式分別如下:long ios:flags()/返回與流相關的當前狀態標志值long ios:flags(long flag)/將流的狀態標志值設置為flag,并返回設置前的狀態標志值。以上三組函數必須用流類對象(cin或cout)來調用,其格式如下:<流對象名>.<函數名>(ios:<狀態標志>

26、;)cout.setf(ios:showpos);cout.setf(ios:scientific);cout.setf(ios:showpos| ios:scientific);設置輸出寬度函數有兩種形式,其格式分別如下: int ios:width(int len) int ios:width()第一種形式是設置輸出寬度,并返回原來的輸出寬度;第二種形式是返回當前輸出寬度,默認輸出寬度為0。只對其后的第一個輸出項有效。填充字符的作用是當輸出值不滿輸出寬度時用填充字符來填充,默認填充字符為空格。它與width()函數配合使用,否則沒有意義。設置填充字符函數有兩種形式,其格式分別如下: cha

27、r ios:fill(char ch) char ios:fill()第一種形式是重新設置填充字符,并返回設置前的填充字符;第二種形式是返回當前的填充字符。設置浮點數輸出精度有兩種形式,其格式分別如下: int ios:precision(int p) int ios:precision()第一種形式是重新設置輸出精度,并返回設置前的輸出精度;第二種形式是返回當前的輸出精度。默認輸出精度為6 用get函數讀入一個字符(1)不帶參數的get函數cin.get()用來從指定的輸入流中提取一個字符(包括空白字符),函數的返回值就是讀入的字符。若遇到輸入流中的文件結束符,則函數返回文件結束標志EOF。

28、(2)有一個參數的get函數cin.get(ch)用來從輸入流中讀取一個字符,賦給字符變量ch。讀取成功返回非0值(真),如失敗(遇文件結束符)則函數返回0值(假)。3)有三個參數的get函數cin.get(字符數組/字符指針,字符個數n,終止字符)從輸入流中讀取n-1個字符,賦給指定的字符數組(或字符指針指向的數組)。如果在讀取n-1個字符之前遇到指定的終止字符,則提前讀取結束。如果讀取成功返回非0值(真),如失敗(遇文件結束符)則函數返回0值(假)。用getline函數讀入一行字符cin.getline(字符數組(或字符指針),字符個數n,終止字符)從輸入流中讀取一行字符,其用法與帶3個參數的get函數類似。eof函數無參函數,表示文件結束。從輸入流讀取數據,如果到達文件末尾(遇文件結束符),返回非零值(真),否則為0(假)。 while(!cin.eof()peek函數無參函數,表示“觀察”,觀測下一個字符。返回值是當前指針指向的當前字符,但只是觀測,指針仍停留在當前位置,并不后

溫馨提示

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

評論

0/150

提交評論