久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

《C++面向對象程序設計》譚浩強版復習總結

時間:2019-05-12 13:16:45下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《《C++面向對象程序設計》譚浩強版復習總結》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《《C++面向對象程序設計》譚浩強版復習總結》。

第一篇:《C++面向對象程序設計》譚浩強版復習總結

第一章 C++ 基礎

endl 換行并刷新輸出流

setw(n)設置字段位數為n hex,oct,dec 十六進制,八進制,十進制表示 setfill 定義填充字符

setprecision 定義浮點數的精度 left,right 左對齊,右對齊

showpoint 強制顯示小數點以及全部尾部0 C++通過給常量命名的方式定義常量:

const<數據類型名><常量名>=<表達式> 用const定義的標識符常量時,一定要對其初始化。在說明時進行初始化是對這種常量置值的唯一方法,不能用賦值運算符對這種常量進行賦值。函數聲明的一般形式為

函數類型 函數名(參數表)函數模板的定義

template

函數定義

例子:template T max(T a,T b){ return(a>b)? a:b;} 定義函數模板時可以使用多個類型參數,每個類型參數前面只需加上關鍵字typename或class,用逗號分隔:

template 例子:template T1 max(T1 a,T2 b){ return(a>b)? a :(T1)b;} 有默認參數的函數:實參與形參的結合是從左至右進行的,因此指定默認值的參數必須放在形參列表中的最右端 引用

定義

對變量起另外一個名字(別名alias),這個名字稱為該變量的引用。<類型>&<引用變量名> = <原變量名>;

其中原變量名必須是一個已定義過的變量。如:

int

max;

int &refmax=max;refmax并沒有重新在內存中開辟單元,只是引用max的單元。max與refmax在內存中占用同一地址,即同一地址兩個名字。對引用類型的變量,說明以下幾點:

1、引用在定義的時候要初始化

2、對引用的操作就是對被引用的變量的操作。

3、引用類型變量的初始化值不能是一個常數。

4、一旦引用被聲明,它就不能再指向其它的變量。

5、對引用的初始化,可以用一個變量名,也可以用另一個引用。

6、引用同變量一樣有地址,可以對其地址進行操作,即將其地址賦給一指針。當&m的前面有類型符時(如int &m),它必然是對引用的聲明;如果前面無類型符(如cout<<&m),則是取變量的地址。

7、對常量(用const聲明)的引用使用如下方式: int i=5;const int &a=i;內聯函數定義的一般格式為:

inline <函數值類型><函數名>(<參數表>){ <函數體> } 作用域運算符

::a表示全局作用域中的變量a。注意:不能用::訪問函數中的局部變量

new運算從堆中分配一塊與<類型>相適應的大小為<元素個數>的數組存儲空間,若分配成功,將這塊存儲空間的起始地址存入<指針變量名>,否則置<指針變量名>的值為NULL(空指針值,即0)。new的使用格式為:

<指針變量名>=new <類型>[<元素個數>];delete運算符用來釋放<指針變量名>指向的動態存儲空間。使用格式如下:

delete <指針變量名> 或

delete[] <指針變量名>

第2章 面向對象基本概念

面向過程編程與面向對象編程的區別:

面向過程編程先確定算法,再確定數據結構; 面向對象編程先確定數據結構,再確定運算。類定義:

class <類名> { <訪問控制符>: <成員函數的聲明> <訪問控制符>: <數據成員的聲明> };<成員函數的實現> 若在類體外實現,則需要使用作用域運算符“::”,用它來標識某個成員函數是屬于哪個類的,其定義格式如下:

<函數值類型><類名>::<成員函數名>(<參數表>){ <函數體> } 類外訪問對象中的成員可以有3種方法: 通過對象名和成員運算符訪問對象中的成員。<對象名>.<公有成員> 通過指向對象的指針變量訪問對象中的成員。<對象指針名>-><公有成員> 通過對象的引用訪問對象中的成員。析構函數其定義格式如下: <類名>::~<類名>(){

<函數體> } 在一般情況下,調用構造函數與聲明對象的順序相同,而調用析構函數的次序正好與創建對象的順序相反。三種構造函數

Box();

//無參構造函數 Box(int h,int w ,int len):height(h),width(w),length(len){}

//帶參構造函數 復制構造函數定義

<類名>(<參數表>);

<類名>(const <類名>&<對象名>)Box(const Box& b);//復制構造函數

復制構造函數只有一個參數,并且是對同類對象的引用。

靜態成員是類的所有對象共享的成員,而不是某個對象的成員,它在對象中不占存儲空間,是屬于整個類的成員。靜態成員定義格式如下: static <靜態成員的定義>;不能用參數初始化表對靜態數據成員初始化,也不能在構造函數體內初始化,靜態數據成員只能在類體外進行初始化。靜態數據成員初始化格式如下:

<數據類型><類名>::<靜態數據成員名>=<值>;在類的成員函數中可以直接訪問該類的靜態數據成員,而不必使用成員訪問運算符或類名限定修飾符。

在類外必須使用成員訪問運算符或類名限定修飾符訪問公共靜態數據成員。<對象名>.<靜態成員> <類名>::<靜態成員> 靜態成員函數就是使用static關鍵字聲明的成員函數。

靜態成員函數可以直接訪問該類的靜態成員,但不能直接訪問類中的非靜態成員。

第3章 詳解對象

對象指針就是用于存放對象數據起始地址的變量。聲明對象指針的一般格式為: <類名> *<對象指針名>;對象指針的初始化一般格式為: <數據類型> *<對象指針名>=&<對象名>;<對象指針名>=&<對象名>;通過指針訪問對象成員一般格式如下: <對象指針名>-><公有成員>

boxp->volumn();(*<對象指針名>).<公有成員>

(*boxp).volumn();this指針是一個特殊的隱含指針,它隱含于每一個成員函數(靜態成員函數除外)中,也就是說,每個成員函數都有一個this指針參數。

this指針指向調用該函數的對象,即this指針的值是當前被調用的成員函數所在的對象的起始地址。

復制構造函數中隱含使用this指針: TAdd(const TAdd& p){

this->x=p.x;this->y=p.y;

cout<<“copy constructor.”<

x

this->x

(*this).x this指針是一個const指針,成員函數不能對其進行賦值。

靜態成員中不能訪問this指針,因為靜態成員函數不從屬于任何對象。指向非靜態數據成員的指針一般形式為:

數據類型名

*指針變量名;

定義指向公有成員函數的指針變量的一般形式為: 數據類型名(類名:: *指針變量名)(參數列表);

使指針變量指向一個公有成員函數的一般形式為:

指針變量名=&類名::成員函數名 常量定義格式如下: const <數據類型名><常量名>=<表達式>;常對象是其數據成員值在對象的整個生存期間內不能被改變的對象。const <類名> <對象名>(<初始化值>);<類名> const <對象名>(<初始化值>);常成員函數

通過常成員函數來引用本類中的常數據成員。<數據類型><函數名>(<參數表>)const;

聲明一維對象數組的一般格式為: <類名><數組名>[<下標表達式>] 6 第4章 運算符重載

重載為類的成員函數格式如下: <類名> operator <運算符>(<參數表>){ 函數體 } A operator +(A &);++為前置運算符時,它的運算符重載函數的一般格式為: operator ++()++為后置運算符時,它的運算符重載函數的一般格式為: operator ++(int)

運算符重載函數不能定義為靜態的成員函數,因為靜態的成員函數中沒有this指針。

友元聲明以關鍵字friend開始,只能出現在被訪問類的定義中。具體格式如下:

friend <函數值類型><函數名>(<參數表>);friend class <類名>;

友元函數可以訪問該類中的所有成員(公有的、私有的和保護的)

通常使用友元函數來取對象中的數據成員值,而不修改對象中的成員值,保證數據安全。

重載為類的友元函數語法形式

friend <函數值類型> operator <運算符>(<參數表>){<函數體>;} ++為前置運算符時,它的運算符重載函數的一般格式為: A operator ++(A &a)++為后置運算符時,它的運算符重載函數的一般格式為: A operator ++(A &a, int)

重載提取運算符的一般格式為:

friend istream & operater >>(istream &, ClassName &);istream & operater >>(istream &is, ClassName &f){?} 重載輸出(插入)運算符的一般格式為:

friend ostream & operater >>(ostream &, ClassName &);ostream & operater >>(ostream &is, ClassName &f){?} 重載類型轉換運算符函數格式: operator〈返回基本類型名〉(){

??

return 〈基本類型值〉 } 類類型轉換函數只能是成員函數,不能是友元函數。轉換函數的操作數是對象。8 第5章 繼承與派生

派生是指由基類創建新類的過程。class A { int i;//基類成員};class B:public A //A派生了B,B繼承了A,//B自動擁有A的成員 {int j;//定義派生類的新成員};派生類的定義格式如下:

class <派生類名>:<繼承方式><基類名> { <派生類新定義成員>};派生類繼承了基類的全部數據成員和除了構造、析構函數之外的全部成員函數,它們在派生類中的訪問屬性由繼承方式控制。三種繼承方式下派生類中基類成員的訪問控制權限

無論是哪種繼承方式,基類的私有成員在派生類中都是不可被訪問的。只能通過基類的成員函數訪問基類的私有數據成員。

解決的辦法是通過成員初始化表來完成,在成員初始化表中可以顯式調用基類構造函數。

<派生類名>(<總參數表>):<基類名>(<參數表1>),<對象成員名>(<參數表2>){ <派生類數據成員的初始化> };構造函數調用順序為:基類的構造函數→對象成員構造函數→派生類的構造函數。

析構函數調用順序剛好相反。當基類中沒有顯式定義構造函數,或定義了無參構造函數時,派生類構造函數的初始化表可以省略對基類構造函數的調用,而采用隱含調用。當基類的構造函數使用一個或多個參數時,派生類必須定義構造函數,提供將參數傳遞給基類構造函數的途徑。這時,派生類構造函數的函數體可能為空,僅起到參數傳遞作用。

如果在基類中既定義了無參構造函數,又定義了帶參構造函數,則在定義派生類構造函數時,既可以包含基類構造函數和參數,也可以不包含基類構造函數。如果在一個派生類中要訪問基類中的私有成員,可以將這個派生類聲明為基類的友元。

友元關系是不能繼承的。B類是A類的友元,C類是B類的派生類,則C類和A類之間沒有任何友元關系,除非C類聲明A類是友元。多繼承派生類的定義

class <派生類名>:<繼承方式><基類名1>,?,<繼承方式><基類名n> {<派生類新定義成員>};多繼承派生類的構造函數

<派生類名>(<總參數表>):<基類名1>(<參數表1>),?,< 基類名n>(<參數表n>){ <派生類數據成員的初始化> };<總參數表>必須包含完成所有基類初始化所需的參數 構造函數調用順序是:先調用所有基類的構造函數,再調用對象成員類構造函數,最后調用派生類的構造函數。

處于同一層次的各基類構造函數的調用順序取決于定義派生類時所指定的基類順序,與派生類構造函數中所定義的成員初始化列表順序無關。如果有多個成員類對象,則構造函數的調用順序是對象在類中被聲明的順序,而不是它們出現在成員初始化表中的順序。

析構函數的調用順序與構造函數的調用順序相反。虛基類

虛基類的定義格式為:

class <派生類名>:virtual <繼承方式><共同基類名>;【說明】引進虛基類后,派生類對象中只存在一個虛基類成員的副本。虛基類的初始化與一般多繼承的初始化在語法上相同,但構造函數的調用順序有所不同,規則如下:

先調用虛基類的構造函數,再調用非虛基類的構造函數。若同一層次中包含多個虛基類,其調用順序為定義時的順序。若虛基類由非虛基類派生而來,則仍按先調用基類構造函數,再調用派生類構造函數的順序。

如果在虛基類中定義了帶參數的構造函數,則要在其所有派生類(包括直接派生類或間接派生類)中,通過構造函數的初始化表對虛基類進行初始化。

第6章 多態性與虛函數

類型兼容規則

類型兼容規則是指在需要基類對象的任何地方,都可以使用公有派生類的對象來替代。

類型兼容規則中所指的替代包括以下情況: 派生類的對象可以賦值給基類的對象。派生類的對象可以初始化基類的引用。

派生類的對象的地址可以賦值給基類的指針變量。在替代之后,派生類對象就可以作為基類的對象使用,但只能訪問從基類繼承的成員。

只能用派生類對象對其基類對象賦值,而不能用基類對象對其派生類對象賦值。同一基類的不同派生類對象之間也不能賦值。虛函數

虛函數就是在基類中被關鍵字virtual說明、并在一個或多個派生類中被重新定義的成員函數。

聲明虛函數的格式如下:

virtual <函數值類型><函數名>(<參數表>);在派生類中重新定義虛函數時,其函數原型包括返回類型、函數名、參數個數、類型和順序,都必須與基類中的原型相同。一個函數一旦被聲明為虛函數,則無論聲明它的類被繼承了多少層,在每一層派生類中該函數都保持虛函數特性。因此,在派生類中重新定義該函數時,可以省略關鍵字virtual。實現動態的多態性時,必須使用基類類型的指針變量或對象引用,并使其指向不同的派生類對象,并通過調用指針或引用所指向的虛函數才能實現動態的多態性。可將類簇中具有共性的成員函數聲明為虛函數,而具有個性的函數沒有必要聲明為虛函數。但是下面的情況例外: 靜態成員函數不能聲明為虛函數。構造函數不能是虛函數。

內聯成員函數不能聲明為虛函數。析構函數可以是虛函數。虛析構函數

虛析構函數的聲明格式如下:

virtual ~<類名>();如果一個類的析構函數是虛函數,那么,由它派生的所有子類的析構函數也是虛函數。

純虛函數用virtual聲明,沒有任何實現、必須由派生類覆蓋該函數提供實現 純虛函數的聲明格式為:

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時應包含此頭文件。

用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::<狀態標志>)cout.setf(ios::showpos);cout.setf(ios::scientific);cout.setf(ios::showpos| ios::scientific);設置輸出寬度函數有兩種形式,其格式分別如下:

int ios::width(int len)

int ios::width()第一種形式是設置輸出寬度,并返回原來的輸出寬度;

第二種形式是返回當前輸出寬度,默認輸出寬度為0。只對其后的第一個輸出項有效。

填充字符的作用是當輸出值不滿輸出寬度時用填充字符來填充,默認填充字符為空格。它與width()函數配合使用,否則沒有意義。設置填充字符函數有兩種形式,其格式分別如下:

char ios::fill(char ch)

char ios::fill()第一種形式是重新設置填充字符,并返回設置前的填充字符; 第二種形式是返回當前的填充字符。

設置浮點數輸出精度有兩種形式,其格式分別如下:

int ios::precision(int p)

int ios::precision()第一種形式是重新設置輸出精度,并返回設置前的輸出精度; 第二種形式是返回當前的輸出精度。默認輸出精度為6 用get函數讀入一個字符(1)不帶參數的get函數

cin.get()用來從指定的輸入流中提取一個字符(包括空白字符),函數的返回值就是讀入的字符。

若遇到輸入流中的文件結束符,則函數返回文件結束標志EOF。(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函數

無參函數,表示“觀察”,觀測下一個字符。

返回值是當前指針指向的當前字符,但只是觀測,指針仍停留在當前位置,并不后移。

如果要訪問的字符是文件結束符,則函數值是EOF。

c=cin.peek(); putback函數

將前面用get或getline函數從輸入流中讀取的字符ch返回到輸入流,插入到當前指針位置,以供后面讀取。

控制符不屬于任何類成員,定義在iomanip頭文件中 設置輸入/輸出寬度setw(int)用整型參數來制定輸入/輸出域的寬度。使用時只對其后一項輸入/輸出有效。當用于輸出時,若實際寬度小于設置寬度時,數據向右對齊,反之則按數據的實際寬度輸出。

當用于輸入時,若輸入的數據寬度超過設置寬度時,超出的數據部分被截斷而被作為下一項輸入內容。

設置輸出填充字符setfill(char)與ios::fill相同,常與setw(int)聯合使用,從而向不滿設置輸出寬度的空間填入指定的字符,不設置則填空格。設置后直至下一次設置前一直有效。參數可以是字符常量或字符變量。

設置輸出精度setprecision(int)指明輸出實數的有效位數。

參數為0時,按默認有效位數6輸出。

在以fixed形式和scientific形式輸出時參數為小數位數。

setiosflags(ios::fixed)用定點方式表示實數。

setiosflags(ios::scientific)用科學記數法方式表示實數。

如果setprecision(n)與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。

如果setprecision(n)與setiosflags(ios::scientific)合用,可以控制科學記數法中尾數的小數位數。

setiosflags(ios::left)輸出數據左對齊 setiosflags(ios::right)輸出數據右對齊

設置輸入/輸出整型數數制dec、hex和oct。控制換行的控制符endl

代表輸出單字符“

主站蜘蛛池模板: 国产人妖视频一区二区| 欧美国产成人精品一区二区三区| 青草草97久热精品视频| 亚洲小说春色综合另类| 97色偷偷色噜噜狠狠爱网站97| 久久久综合九色综合鬼色| 亚洲欧洲无码av不卡在线| 国产精品原创av片国产日韩| www午夜精品男人的天堂| 波多野结衣中文字幕一区二区三区| 国产精品一区二区手机在线观看| 天堂中文а√在线| 一个添下面两个吃奶把腿扒开| 人人莫人人擦人人看| 大香大香伊人在钱线久久| 亚洲男人av香蕉爽爽爽爽| 国产成人高清精品免费软件| 色狠狠色噜噜av一区| 一本大道大臿蕉无码视频| 精品无码国产一区二区三区51安| 天天狠天天添日日拍捆绑调教| 成人免费无遮挡无码黄漫视频| 免费做a爰片久久毛片a片| 亚洲超碰97无码中文字幕| 老司机久久99久久精品播放| 亚洲第一无码精品立川理惠| 高清精品一区二区三区| 国产精品原创av片国产日韩| 成人毛片无码一区二区| 999精品无码a片在线1级| 亚洲国产成人va在线观看天堂| 青青青青久久精品国产av| 又硬又粗进去好爽免费| 国产sm调教视频在线观看| 国产亚洲一区二区在线观看| 乱色欧美激惰| 欧美激情肉欲高潮视频| 久久亚洲精品国产精品| 十八禁网站在线观看| 无码专区狠狠躁躁天天躁| 又大又爽又黄无码a片|