版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+與C北航軟件所孫自安北航如心樓606電話:82316284Email: 1 第四章 面向?qū)ο蟮某绦蛟O(shè)計(jì)(續(xù))2class Person public:protected:char * name;int age;classStudent : public Person public:private:char * school;char *class;intid;class Employee: public Person public:private:char * company;char *job;doublesalary;如何定義代培生?是一名職員是一名學(xué)生4.7 多繼承3多繼承:一個(gè)派生
2、類有兩個(gè)或者兩個(gè)以上的直接基類class EmployStud : public Student, public Employee public:private:bool way;逗號(hào) , 隔開的多個(gè)基類4EmployStudliming;wayschoolnamecompanyname多個(gè)基類對(duì)象,二義性:有兩個(gè)name/agePersonnameageEmployeecompanyjobsalaryStudentschoolclassidEmployStudway存儲(chǔ)空間浪費(fèi)不便于維護(hù)5虛擬繼承:無(wú)論基類在派生層次中出現(xiàn)多少次,只有一個(gè)共享的基類子對(duì)象被繼承。class Student :
3、 virtual public Person ;class Employee: public virtual Person ;class EmployStud : public Student, public Employee ;EmployStudliming;wayschoolcompanynamevirtual可在繼承關(guān)鍵字之前或之后6IBM庫(kù)的頭文件:stringliststackMicrosoft庫(kù)的頭文件:vectorqueuestackvoid main( )/使用數(shù)據(jù)類型list和queue/包含IBM庫(kù)的頭文件/包含Microsoft庫(kù)的頭文件造成stack定義沖突4.8 名
4、字空間7名字空間定義格式:namespace 空間名 /成員定義所有可以出現(xiàn)在全局域中的聲明都可以放在用戶聲明的名字空間中:類定義、變量聲明或定義、函數(shù)聲明或定義。名字空間括起來(lái)的區(qū)域稱為名字空間域,出現(xiàn)在名字空間域中的各種聲明或定義只能在該域中直接使用8cstring.hnamespaceMyString class CString ;CString & operator + ( const char *, CString & );cstring.cppnamespaceMyString CString:CString ( ) CString & operator + ( const cha
5、r *str1, CString & str2 )注意:名字空間的定義不一定是連續(xù)的,可以放在不同文件中。對(duì)外接口實(shí)現(xiàn)9注意:名字空間可以嵌套定義mylib.hnamespaceMyLib class CString ;namespaceMathLib class Complex ;namespaceGraphicLib classCircle ;10名字空間的使用(1):空間名:成員名域操作符#include “mylib.h”void main ()CString str ( “hello”);MyLib:CString str (“hello”);MyLib:GraphicLib:Cir
6、cle cir;11名字空間的使用(2):定義名字空間別名#include “mylib.h”namespacegraph = MyLib:GraphicLib;void main ()graph:Circle cir;12名字空間的使用(3):using 空間名:成員名;#include “mylib.h”using MyLib:GraphicLib:Circle;using MyLib:CString;void main ()CString str;Circle cir;13名字空間的使用(4):using 空間名;#include “mylib.h”using MyLib;void ma
7、in ()CString str;Circle cir;Complex cp;14class iStack public:bool pop( int &top_value );bool push( int value );bool full();bool empty();int value;iStack st;if(!st.push(value)cout“Empty”;if(!st.push(value)錯(cuò)誤處理和正常操作混在一起4.9 異常(Exception)處理15異常是程序可以檢測(cè)到的、運(yùn)行時(shí)刻不正常的情況異常處理定義:定義異常類型拋出異常捕獲異常處理異常16異常類型:用來(lái)定義出錯(cuò)信息
8、,可以是用戶自定義類型或者內(nèi)置數(shù)據(jù)類型。statckError.hclassStackError public:StackError ( int i = 0, int v = 0): state (i), value(v) int value ( ) return value; int state ( ) return state; private:int state;/0:ok, 1:full, 2:emptyint value;/試圖將value壓入堆棧; 17拋出異常:throw 異常對(duì)象;異常類型的一個(gè)實(shí)例class iStack public:/ 不再返回一個(gè)值void pop( i
9、nt &value );void push( int value );#include “stackError.h”void iStack:push( int value )if ( full() )StackError error (1, value);throw error;throw StackError(1,value);執(zhí)行throw語(yǔ)句后,便拋出一個(gè)異常,程序?qū)膾伋霎惓N恢猛顺?8捕獲和處理異常:try /包含throw語(yǔ)句catch ( 異常類型1 對(duì)象 ) /處理一種異常catch ( 異常類型2 對(duì)象 ) /處理另一種異常throw語(yǔ)句必須在try塊中。如果throw拋出的
10、異常對(duì)象類型與catch后括號(hào)內(nèi)的異常類型一致,則程序執(zhí)行該catch后的子句19try int value;iStack st;st.push(value);st.pop(value);st.push(value);catch ( StackError err ) int st = err.state();if (st = 1)else if ( st = 2 )else正常操作與錯(cuò)誤處理操作的分離20異常處理步驟:try塊中如果沒有異常拋出,則正常執(zhí)行,并忽略后面的catch子句。若try塊中有異常拋出,則程序從拋出位置退出;若拋出的異常對(duì)象類型與try塊后的某個(gè)catch聲明類型匹配,則
11、執(zhí)行該catch子句處理異常;處理完異常后,程序?qū)腸atch子句列表后的語(yǔ)句繼續(xù)執(zhí)行。若找不到匹配項(xiàng),則該函數(shù)帶著一個(gè)異常退出,繼續(xù)檢查函數(shù)調(diào)用點(diǎn)是否有try/catch子句。bool buidStack ( )try /push操作catch (StackError err )return 1;return 0;void clearStack ( )/pop操作void main ()try buildStack();clearStack();catch (StackError err ) 21重新拋出異常:在異常處理過(guò)程中也可能存在單個(gè)catch 子句不能完全處理異常的情況,必須由函數(shù)調(diào)
12、用鏈中更上級(jí)的函數(shù)來(lái)處理,那么catch子句可以通過(guò)重新拋出該異常,把異常傳遞給函數(shù)調(diào)用鏈中更上級(jí)的另一個(gè)catch子句。格式:throw;bool buidStack ( )try /push操作catch (StackError err )throw;return 1;void main ()try buildStack();catch (StackError err ) 拋出的仍然是接受到的err22捕獲所有異常:catch ( ) char * str = new char100;delete str;有可能出現(xiàn)各種各樣的異常try catch ( ) delete str;throw
13、;23#include void main() cout str;4.10 輸入、輸出流24庫(kù)中提供了以下類的定義:istream類 (輸入流)ostream類(輸出流)iostream類(派生自istream和ostream,輸入/輸出流)同時(shí)該庫(kù)定義了如下對(duì)象:cin : istream類對(duì)象,代表標(biāo)準(zhǔn)輸入;cout :ostream類對(duì)象,代表標(biāo)準(zhǔn)輸出;cerr :ostream類對(duì)象,代表標(biāo)準(zhǔn)錯(cuò)誤輸出。25輸出:重載的左移操作符 輸出操作符可以接受任何內(nèi)置數(shù)據(jù)類型的實(shí)參;可以連續(xù)輸出多個(gè)數(shù)據(jù)。能否輸出類對(duì)象的信息?class Person public:private:char * n
14、ame;int age;ostream & operator ( ostream & out );friend ostream & operator (ostream &out, Person & one );26ostream & operator (ostream &out, Person & one )out “t” one.age;return out;Person li, wang, zhang;cout li wang 注意:當(dāng)右操作數(shù)與實(shí)際輸入數(shù)據(jù)類型不一致時(shí),讀入失敗,返回false。比輸出更容易出錯(cuò)。缺省情況下,以空格、換行、制表符作為分隔符,并丟棄掉。in
15、t ivalue;cin ivalue;/當(dāng)輸入小數(shù)或字符串時(shí)便出錯(cuò)if ( cinivalue )28char ch;while ( cin ch );a b cd/忽略空格和換行符/讀入四個(gè)字符操作符noskipws 使輸入操作符不跳過(guò)空白字符:char ch;cin noskipws;while ( cin ch );cin skipws;/讀入七個(gè)字符29303132其它的輸入/輸出操作:istream成員函數(shù):get ( )getline ( )read ( )peek ( )ostream成員函數(shù):put ( )write ( )33下列三種類類型提供了文件支持ifstream 從
16、istream派生,把一個(gè)文件綁到程序上,用來(lái)輸入ofstream 從ostream派生,把一個(gè)文件綁到程序上,用來(lái)輸出fstream 從iostream派生,把一個(gè)文件綁到程序上用來(lái)輸入和輸出。為了使用文件流組件,我們必須包含相關(guān)的頭文件#include 由于在fstream 頭文件中也包含了iostream 頭文件,所以我們不需要同時(shí)包含這兩個(gè)文件4.11 文件操作34為了打開一個(gè)僅被用于輸出的文件,我們可以定義一個(gè)ofstream 類對(duì)象,例如ofstream outfile( copy.out, ios_base:out );注意:輸出模式ios_base:out 或附加模式ios_b
17、ase:app,缺省為輸出模式;ofstream從ostrearn 類派生,所以所有ostream 操作都可以應(yīng)用到一個(gè)ofstream 類對(duì)象上。outfile“hello, world”endl;為了打開一個(gè)僅用于輸入的文件,我們可以使用ifstream 類對(duì)象,例如:ifstream infile ( “input.txt”);35在定義ifstream 和ofstream 類對(duì)象時(shí),我們也可以不指定文件,以后可以通過(guò)成員函數(shù)open()顯式地把一個(gè)文件連接到一個(gè)類對(duì)象上,例如ifstream curFile;cur( “input.txt” );我們可以通過(guò)成員函數(shù)close()斷開一個(gè)文件與程序的連接,例如cur();36fstream類對(duì)象可以打開一個(gè)被用于輸出或者輸入的文件,例如:fstream io( word.out, ios_base:in|ios_base:app );seekg()或seekp()成員函數(shù)分別用于定位讀、寫位置。37作業(yè)1(必作,6月28日前交):C+標(biāo)準(zhǔn)庫(kù)中提供了支持各種字符串操作的string類,使用前要包含頭文件:#include 要求:通過(guò)查閱資料或幫助文件自學(xué)string類,包括該類提供的各種操作。定義一個(gè)類Uppe
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)審核審批崗位分工制度
- 試論我國(guó)股東提案權(quán)制度
- 數(shù)學(xué)核心素養(yǎng)培訓(xùn)
- 行政處罰類案指導(dǎo)制度
- 2025年國(guó)開法律文書筆試及答案
- 2025年電視臺(tái)專業(yè)筆試真題及答案
- 2025年稅務(wù)公務(wù)員筆試題目及答案
- 2025年范縣中醫(yī)院護(hù)士招聘筆試及答案
- 2025年事業(yè)單位公務(wù)員考試答案
- 2025年濰坊濰城區(qū)公開招聘筆試及答案
- 變壓器借用合同范本
- 東海藥業(yè)校招測(cè)評(píng)題庫(kù)
- 精準(zhǔn)定位式漏水檢測(cè)方案
- 2023氣管插管意外拔管的不良事件分析及改進(jìn)措施
- 2023自動(dòng)啟閉噴水滅火系統(tǒng)技術(shù)規(guī)程
- 架線弧垂計(jì)算表(應(yīng)力弧垂插值計(jì)算)
- 工廠驗(yàn)收測(cè)試(FAT)
- 市醫(yī)療保險(xiǎn)高值藥品使用申請(qǐng)表
- 認(rèn)知障礙患者進(jìn)食問(wèn)題評(píng)估與護(hù)理
- 高職單招數(shù)學(xué)試題及答案
- 基礎(chǔ)化學(xué)(本科)PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論