C程序設(shè)計(jì)劉振安實(shí)用_第1頁
C程序設(shè)計(jì)劉振安實(shí)用_第2頁
C程序設(shè)計(jì)劉振安實(shí)用_第3頁
C程序設(shè)計(jì)劉振安實(shí)用_第4頁
C程序設(shè)計(jì)劉振安實(shí)用_第5頁
已閱讀5頁,還剩354頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

會(huì)計(jì)學(xué)1C程序設(shè)計(jì)劉振安實(shí)用2需要了解的C語言知識(shí)C語言基本語法Ifelse語句For語句While語句數(shù)組定義函數(shù)定義指針結(jié)構(gòu)體運(yùn)算符第1頁/共359頁3第一章認(rèn)識(shí)C++的對象本節(jié)要點(diǎn):C與C++的關(guān)系(領(lǐng)會(huì))掌握函數(shù)原型和命名空間的使用方法(綜合應(yīng)用)對象和預(yù)處理基本概念(領(lǐng)會(huì))掌握C++程序的基本結(jié)構(gòu)(綜合應(yīng)用)1.1初識(shí)C++的函數(shù)和對象第2頁/共359頁4第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象C語言回顧intx;該語句在C語言和C++中均可使用,x在C語言中稱為變量,在C++中稱為對象。C語言與C++的不同點(diǎn):稱呼不同第3頁/共359頁5第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象C語言回顧結(jié)構(gòu)體的定義structpoint{floatx;

floaty;};表示定義一種點(diǎn)數(shù)據(jù)類型,包含坐標(biāo)x,y.定義完成后,point成為一種類型,使用方式類似int類型如:定義p1變量為點(diǎn)類型,寫作:structpointp1;或pointp1;定義x變量為整型:intx;第4頁/共359頁6第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象C語言回顧結(jié)構(gòu)體的定義structstudent{intnum;charname[10];

floatgrade;};若定義一種結(jié)構(gòu)體記錄學(xué)生信息包含學(xué)號(hào),姓名,成績,如何定義?定義s1變量為學(xué)生類型,寫作:structstudents1;第5頁/共359頁7第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象例1.1輸入一個(gè)點(diǎn)的信息,求該點(diǎn)到原點(diǎn)的距離預(yù)處理命令,使用命名空間,聲明函數(shù),聲明常量,定義結(jié)構(gòu)體,主函數(shù)main求距離函數(shù)result第6頁/共359頁8例1.1第7頁/共359頁9例1.1主函數(shù)第8頁/共359頁10例1.1第9頁/共359頁11第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:1,混合型語言C語言程序包含main函數(shù)面向?qū)ο笳Z言沒有main函數(shù)C++是混合型語言第10頁/共359頁12第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:2,注釋方式/*。。。。*///。。。。第11頁/共359頁13第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:3,輸入輸出流cin和cout是C++語言中進(jìn)行輸入輸出操作的函數(shù)。其定義在isstream頭文件中。類似:C語言中printf函數(shù)scanf函數(shù)putchar函數(shù)getchar函數(shù),使用時(shí)要包含“stdio.h”第12頁/共359頁14第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:3,輸入輸出流cin和cout函數(shù)的簡單使用cout<<后加要輸出的內(nèi)容,可以是對象或字符串,行末加分號(hào),可用多個(gè)<<來分隔多個(gè)輸出對象,<<endl;表示輸出后換行。cout<<endl;等價(jià)于cout<<“\n”;第13頁/共359頁15第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:3,輸入輸出流cin和cout函數(shù)的簡單使用cin>>后加存放數(shù)據(jù)的對象,即變量,行末加分號(hào),可用多個(gè)>>來分隔多個(gè)輸入對象。cin>>x>>y;等價(jià)于cin>>x;cin>>y;第14頁/共359頁16第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:4,使用命名空間是C++語言中封裝程序庫名稱的一種機(jī)制記憶:C++標(biāo)準(zhǔn)類庫中的對象和函數(shù)都屬于std命名空間使用這些對象和函數(shù)時(shí)要usingnamespacestd第15頁/共359頁17第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:4,使用命名空間使用std命名空間時(shí)注意:使用C語言中的頭文件時(shí),要寫成“xxx.h”形式使用C++中的頭文件則不能加上“.h”第16頁/共359頁18第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:5,對象定義及初始化intx;x=0;等價(jià)于intx=0;C語言intx(0);C++語言等價(jià)于上兩條語句。此種初始化語法在C++中稱為構(gòu)造函數(shù)語法第17頁/共359頁19第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:6,函數(shù)原型及其返回值函數(shù)要有類型,若要得到處理結(jié)果則要使用return語句。第18頁/共359頁20第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:6,函數(shù)原型及其返回值函數(shù)原型聲明函數(shù)調(diào)用在函數(shù)定義之前時(shí)要對函數(shù)進(jìn)行聲明第19頁/共359頁21第20頁/共359頁22第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:7,const修飾符和預(yù)處理程序常量定義:#definePI3.1415(c語言)在變量定義之前加上const關(guān)鍵字,表示定義的變量值不可改變。constintPI=3.1415;constintPI(3.1415);第21頁/共359頁23第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:7,const修飾符和預(yù)處理程序常量定義:#definePI3.1415#define命令的特點(diǎn):原樣替換掉程序中出現(xiàn)的預(yù)定義宏名符號(hào)如:#defineBUFFER100若程序出現(xiàn):x=BUFFER/3;x=?盡量選擇const定義常量第22頁/共359頁24第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:7,const修飾符和預(yù)處理程序const關(guān)鍵字的特點(diǎn):利用const定義常量時(shí)必須給出常量的值,除非該常量是extern的。如:constintd;

externconst;作業(yè):1,extern變量是什么樣的變量?第23頁/共359頁25第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:7,const修飾符和預(yù)處理程序C++預(yù)處理命令以#開始,分為宏定義,文件包含和條件編譯作業(yè):2,寫出C語言中預(yù)處理命令有哪些,舉例說明每個(gè)命令含義及作用。3,寫出C語言和C++語言中#include命令的不同處第24頁/共359頁26第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:8,程序運(yùn)行結(jié)果第25頁/共359頁27第一章認(rèn)識(shí)C++的對象1.1初識(shí)C++的函數(shù)和對象對程序的說明:9,程序書寫規(guī)則注意縮進(jìn)對齊,使程序清晰明了第26頁/共359頁281.2認(rèn)識(shí)C++語言面向過程編程的特點(diǎn)本節(jié)要點(diǎn):函數(shù)重載(領(lǐng)會(huì))掌握C++的新數(shù)據(jù)類型(簡單應(yīng)用)動(dòng)態(tài)分配內(nèi)存(綜合應(yīng)用)熟練掌握引用的使用方法(綜合應(yīng)用)了解對指針使用const限定符的目的,方法(識(shí)記)了解泛型算法應(yīng)用于普通數(shù)組的方法(識(shí)記)掌握數(shù)據(jù)的簡單輸入輸出(簡單應(yīng)用)第27頁/共359頁29第一章認(rèn)識(shí)C++的對象1.2認(rèn)識(shí)C++語言面向過程編程的特點(diǎn)本節(jié)要點(diǎn):1.2.1函數(shù)重載(領(lǐng)會(huì))C++允許一個(gè)函數(shù)定義多個(gè)版本。使得一個(gè)函數(shù)完成多種功能。即:同一個(gè)函數(shù)名定義多次。第28頁/共359頁301.2.1函數(shù)重載(領(lǐng)會(huì))重載函數(shù)max的調(diào)用形式:第29頁/共359頁311.2.1函數(shù)重載(領(lǐng)會(huì))重載函數(shù)max的定義形式:第30頁/共359頁321.2.1函數(shù)重載(領(lǐng)會(huì))重載函數(shù)max的聲明形式:可否不聲明??重載函數(shù)的要點(diǎn):函數(shù)名相同,參數(shù)個(gè)數(shù)不同,參數(shù)類型不同第31頁/共359頁331.2.2C++的新數(shù)據(jù)類型(簡單應(yīng)用)1,void類型void表示無類型,或空類型。不能聲明變量,只能聲明函數(shù)返回值。表示函數(shù)無返回值。第32頁/共359頁342,bool型(邏輯型,布爾型)占1個(gè)字節(jié)。表示邏輯運(yùn)算中的”真”

”假”3,整型(intlongshort)int、short至少16位long至少32位short不得比int長int不得比long長第33頁/共359頁354,char型(字符型)占1個(gè)字節(jié)。5,實(shí)型(float/double/longdouble)第34頁/共359頁365,&取地址符intx;&x表示????什么樣的變量可以存放&x?????int*p;p是指針變量,指針變量能存放變量的地址。P=&x;第35頁/共359頁376,常量表示整型:0前綴表示8進(jìn)制數(shù),0x前綴表示16進(jìn)制加L、l后綴表示長整型常量實(shí)型:F、f后綴表示浮點(diǎn)型常量(float)實(shí)數(shù)加L、l后綴表示longdouble型無前綴,無后綴的為double型第36頁/共359頁386,常量表示0L123l0550x50xaf017,轉(zhuǎn)義字符‘\101’‘\t’‘\r’‘\n’‘\0’‘\x41’第37頁/共359頁391.2.3動(dòng)態(tài)分配內(nèi)存(綜合應(yīng)用)new動(dòng)態(tài)分配內(nèi)存一般格式:指針變量=new類型[size];new運(yùn)算符得到新分配空間的首地址,賦值給指針變量后,可根據(jù)指針變量的加減運(yùn)算來使用這些空間。delete釋放內(nèi)存使用完畢后要釋放內(nèi)存deletep;pP+3P+1第38頁/共359頁401.2.4引用的使用方法(綜合應(yīng)用)C++中新的表示形式。引用即使用變量的別名。定義形式:數(shù)據(jù)類型&別名=對象名;作用:別名與對象名對應(yīng)同一個(gè)對象,共用同一段內(nèi)存。對別名的修改會(huì)造成原對象的修改。例如:intx;int&a=x;表示a是變量x的別名。一旦定義別名后則a和x完全等價(jià)。第39頁/共359頁411.2.4引用的使用方法(綜合應(yīng)用)C++中新的表示形式。引用即使用變量的別名。定義形式:數(shù)據(jù)類型&別名=對象名;作用:別名與對象名對應(yīng)同一個(gè)對象,共用同一段內(nèi)存。對別名的修改會(huì)造成原對象的修改。例如:intx;int&a=x;表示a是變量x的別名。一旦定義別名后則a和x完全等價(jià)。第40頁/共359頁421.2.4引用的使用方法(綜合應(yīng)用)C++中新的表示形式。引用即使用變量的別名。定義形式:數(shù)據(jù)類型&別名=對象名;第41頁/共359頁43使用引用時(shí)注意:1,不能定義引用的引用int&&r=x;2,不能直接定義數(shù)據(jù)組的引用第42頁/共359頁441.2.4引用的使用方法(綜合應(yīng)用)一般格式:typedef類型類型別名使用typedef定義某類型別名后,可使用該別名來定義相關(guān)對象。例如:typedeflongintlint;則longinti;等價(jià)于linti;用法總結(jié):建立一個(gè)類型別名的方法很簡單,在傳統(tǒng)的變量聲明表達(dá)式里用類型名替代變量名,然后把關(guān)鍵字typedef加在該語句的開頭第43頁/共359頁45引用數(shù)組名作參數(shù)一般格式:typedef類型類型別名使用typedef定義某類型別名后,可使用該別名來定義相關(guān)對象。例如:typedeflongintlint;則longinti;等價(jià)于linti;第44頁/共359頁46Typedef使用說明typedef用法總結(jié):建立一個(gè)類型別名的方法很簡單,在傳統(tǒng)的變量聲明表達(dá)式里用類型名替代變量名,然后把關(guān)鍵字typedef加在該語句的開頭等價(jià)于第45頁/共359頁471.2.5對指針使用const限定符(識(shí)記)1,左值和右值表達(dá)式:E1=E2

E1是左值,是可被修改的int*p,x=1;*p=2;&p表示什么?第46頁/共359頁481.2.5對指針使用const限定符(識(shí)記)2,指向常量的指針const常量定義,表示const后的表達(dá)式不可改變,定義時(shí)必須給出表達(dá)式的值。intx=11;constint*P;constint*P=&x;表示*P是不可改變的。*P不能在=左側(cè)。P=&y;x=12;第47頁/共359頁491.2.5對指針使用const限定符(識(shí)記)3,常量指針const常量定義,表示const后的表達(dá)式不可改變,定義時(shí)必須給出表達(dá)式的值。intx=11;int*constP;錯(cuò)!必須初始化int*constP=&x;表示P是不可改變的。P不能在=左側(cè)。*p可改變。第48頁/共359頁501.2.5對指針使用const限定符(識(shí)記)4,指向常量的常量指針const常量定義,表示const后的表達(dá)式不可改變,定義時(shí)必須給出表達(dá)式的值。intx=11;constint*constP=&x;表示P是不可改變的。*p不可改變。第49頁/共359頁511.2.6泛型算法應(yīng)用于普通數(shù)組(識(shí)記)掌握數(shù)據(jù)的簡單輸入輸出(簡單應(yīng)用)泛型算法是C++標(biāo)準(zhǔn)模板庫(StandardTemplateLibrary)提供的一組操作。利用這些操作可以簡化數(shù)組操作。要使用這些操作必須包含頭文件<algorithm>第50頁/共359頁521.2.6泛型算法應(yīng)用于普通數(shù)組(識(shí)記)假定a,b是兩個(gè)數(shù)組名,其長度為len操作示例:1,reverse(a,a+len)將數(shù)組a中的元素順序反轉(zhuǎn)。(逆向)2,copy(a,a+len,b)將a數(shù)組的內(nèi)容原樣復(fù)制給b數(shù)組reverse_copy(a,a+len,b)將a數(shù)組的內(nèi)容反轉(zhuǎn)后復(fù)制給b數(shù)組第51頁/共359頁531.2.6泛型算法應(yīng)用于普通數(shù)組(識(shí)記)假定a,b是兩個(gè)數(shù)組名,其長度為len操作示例:3,sort(a,a+len)將數(shù)組a中的元素按升序排序4,sort(a,a+len,greater<type>())將數(shù)組a中的元素按降序排序第52頁/共359頁541.2.6泛型算法應(yīng)用于普通數(shù)組(識(shí)記)假定a,b是兩個(gè)數(shù)組名,其長度為len操作示例:5,find(a,a+len,value)在數(shù)組a中查找值為value的元素,并返回位置指針第53頁/共359頁551.2.6泛型算法應(yīng)用于普通數(shù)組(識(shí)記)假定a,b是兩個(gè)數(shù)組名,其長度為len操作示例:6,輸出數(shù)組中的內(nèi)容Copy(a,a+len,Ostream_iterator<type>(cout,”字符串”))Ostream_iterator表示輸出流操作符<type>:表示要輸出的數(shù)組類型Cout表示流輸出操作“字符串”:表示分隔字符串第54頁/共359頁56第一章認(rèn)識(shí)C++的對象1.2認(rèn)識(shí)C++語言面向過程編程的特點(diǎn)本節(jié)要點(diǎn):1.2.7數(shù)據(jù)的簡單輸入輸出(簡單應(yīng)用)第55頁/共359頁57第一章認(rèn)識(shí)C++的對象1.3程序的編輯、編譯、運(yùn)行第56頁/共359頁58第一章認(rèn)識(shí)C++的對象課后題:P26三、改錯(cuò)題寫作業(yè)本上第57頁/共359頁59第二章從結(jié)構(gòu)到類的演變2.1結(jié)構(gòu)的演化2.1.1結(jié)構(gòu)發(fā)生質(zhì)的演變1.函數(shù)與數(shù)據(jù)共存C++允許結(jié)構(gòu)中定義函數(shù),成為成員函數(shù)在結(jié)構(gòu)中同時(shí)定義成員變量與成員函數(shù)使用格式:結(jié)構(gòu)對象.成員變量結(jié)構(gòu)對象.成員函數(shù)第58頁/共359頁60第二章從結(jié)構(gòu)到類的演變1.函數(shù)與數(shù)據(jù)共存—結(jié)構(gòu)的定義structpoint{doublex,y;voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};第59頁/共359頁61第二章從結(jié)構(gòu)到類的演變1.函數(shù)與數(shù)據(jù)共存—結(jié)構(gòu)的定義structpoint{doublex,y;voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};數(shù)據(jù)成員成員函數(shù)第60頁/共359頁62第二章從結(jié)構(gòu)到類的演變1.函數(shù)與數(shù)據(jù)共存—結(jié)構(gòu)的定義第61頁/共359頁63第二章從結(jié)構(gòu)到類的演變運(yùn)行結(jié)果第62頁/共359頁64第二章從結(jié)構(gòu)到類的演變主函數(shù)第63頁/共359頁65完整程序第64頁/共359頁66修改后的程序第65頁/共359頁67第二章從結(jié)構(gòu)到類的演變2封裝若定義結(jié)構(gòu)體時(shí),使用了private關(guān)鍵字,則產(chǎn)生封裝性第66頁/共359頁68使用了private關(guān)鍵字,則產(chǎn)生封裝性第67頁/共359頁69第二章從結(jié)構(gòu)到類的演變2封裝在定義結(jié)構(gòu)時(shí),若使用了private則產(chǎn)生封裝性,表示成員為私有的,只能在結(jié)構(gòu)體內(nèi)部通過公有成員函數(shù)使用。若未添加private則表示默認(rèn)為public。類定義時(shí)默認(rèn)為private。第68頁/共359頁70第二章從結(jié)構(gòu)到類的演變2.1.2使用構(gòu)造函數(shù)初始化結(jié)構(gòu)的對象在定義結(jié)構(gòu)時(shí),與結(jié)構(gòu)同名的函數(shù)稱為構(gòu)造函數(shù)。若定義的函數(shù)與某個(gè)已定義函數(shù)重名而參數(shù)類型或個(gè)數(shù)不同,則稱為函數(shù)重載。第69頁/共359頁712.1.2使用構(gòu)造函數(shù)初始化結(jié)構(gòu)的對象問題:那個(gè)函數(shù)是構(gòu)造函數(shù)?那個(gè)函數(shù)被重載了?結(jié)構(gòu)體的定義第70頁/共359頁722.1.2使用構(gòu)造函數(shù)初始化結(jié)構(gòu)的對象注:構(gòu)造函數(shù)在定義結(jié)構(gòu)體對象時(shí)自動(dòng)執(zhí)行,并根據(jù)是否初始化來自動(dòng)選擇所調(diào)用的構(gòu)造函數(shù)第71頁/共359頁732.1.2使用構(gòu)造函數(shù)初始化結(jié)構(gòu)的對象調(diào)用無參構(gòu)造函數(shù)調(diào)用有參構(gòu)造函數(shù)為xy設(shè)置值顯示p1,p2的xy值第72頁/共359頁742.1.2使用構(gòu)造函數(shù)初始化結(jié)構(gòu)的對象第73頁/共359頁75第二章從結(jié)構(gòu)到類的演變2.2從結(jié)構(gòu)演化成一個(gè)簡單的類將程序中struct替換為class即變?yōu)轭惖臉?biāo)準(zhǔn)定義形式第74頁/共359頁76第二章從結(jié)構(gòu)到類的演變2.2從結(jié)構(gòu)演化成一個(gè)簡單的類產(chǎn)生類對象p1,p2為對象的屬性賦值顯示對象屬性值第75頁/共359頁77第二章從結(jié)構(gòu)到類的演變2.2從結(jié)構(gòu)演化成一個(gè)簡單的類類圖的表示類名類屬性/成員變量類操作/成員函數(shù)第76頁/共359頁78第二章從結(jié)構(gòu)到類的演變2.3面向過程和面向?qū)ο蠛唵瘟私鈱ο蟮暮x第77頁/共359頁79第二章從結(jié)構(gòu)到類的演變2.3面向過程和面向?qū)ο蠛唵瘟私鈱ο蟮暮x第78頁/共359頁80第二章從結(jié)構(gòu)到類的演變2.3面向過程和面向?qū)ο蠛唵瘟私鈱ο蟮暮x第79頁/共359頁81第二章從結(jié)構(gòu)到類的演變面向過程的求解步驟給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長,并輸出步驟:輸入x1,y1,x2,y2,x3,y3六個(gè)數(shù)據(jù)計(jì)算(x1,y1)和(x2,y2)距離計(jì)算(x1,y1)和(x3,y3)距離計(jì)算(x2,y2)和(x3,y3)距離輸出三個(gè)距離第80頁/共359頁82第二章從結(jié)構(gòu)到類的演變面向?qū)ο蟮那蠼獠襟E給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長,并輸出設(shè)計(jì)類將點(diǎn)設(shè)計(jì)為一個(gè)類,并提供相關(guān)的屬性和操作第81頁/共359頁83第二章從結(jié)構(gòu)到類的演變面向?qū)ο蟮那蠼獠襟E給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長,并輸出定義對象同時(shí)給出坐標(biāo)pointA(x1,y1)pointB(x2,y2)pointC(x3,y3)第82頁/共359頁84第二章從結(jié)構(gòu)到類的演變面向?qū)ο蟮那蠼獠襟E給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長,并輸出定義對象,然后獲取坐標(biāo)pointA;pointB;pointC;A.Getx();A.Gety();B.Getx();B.Gety();C.Getx();C.Gety();第83頁/共359頁85第二章從結(jié)構(gòu)到類的演變面向?qū)ο蟮那蠼獠襟E給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長,并輸出計(jì)算距離并輸出AB=A.GetLength(B);AC=A.GetLength(C);BC=B.GetLength(C);第84頁/共359頁86第二章從結(jié)構(gòu)到類的演變2.4C++面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn)2.4.1對象三要素:對象名,屬性,操作第85頁/共359頁87第二章從結(jié)構(gòu)到類的演變2.4C++面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn)2.4.1對象三要素:對象名,屬性,操作第86頁/共359頁88第二章從結(jié)構(gòu)到類的演變2.5使用類和對象2.5.1使用string對象類名類的屬性用于存放字符串類的操作/方法/成員函數(shù)第87頁/共359頁89第二章從結(jié)構(gòu)到類的演變2.5使用類和對象2.5.1使用string對象該類是C++語言中的內(nèi)部預(yù)定義類,要在程序中使用該類時(shí)必須添加頭文件#inculude<string>第88頁/共359頁90第二章從結(jié)構(gòu)到類的演變2.5使用類和對象2.5.1使用string對象類的初始化:stringstr1=“A”;

stringstr1=‘A’;

stringstr1=‘AB’;

stringstr1=“AB”;可以以數(shù)組的形式使用str1對象中的字符串str1[0]的值是???str1[1]的值是???第89頁/共359頁912.5.1使用string對象類的初始化:stringstr1(“hello,”);

stringstr2=“world”;可以以數(shù)組的形式使用str1對象中的字符串str1[0]的值是???str2[0]的值是???第90頁/共359頁922.5.1使用string對象第91頁/共359頁932.5.1使用string對象運(yùn)行結(jié)果第92頁/共359頁942.5.1使用string對象string對象允許使用+運(yùn)算第93頁/共359頁952.5.1使用string對象對象的方法(操作/成員函數(shù)):對象名.成員函數(shù)str1.size()String對象可使用+運(yùn)算Str1=str2+str3若str2=“hello,”

str3=“everyone”則str1的結(jié)果是???第94頁/共359頁962.5.2使用string對象的成員函數(shù)成員函數(shù)使用格式:對象名.成員函數(shù)例如:str1.size()若Str1=“everyone!”Str1.size()值為:9第95頁/共359頁972.5.2使用string對象的成員函數(shù)成員函數(shù)使用格式:對象名.成員函數(shù)例如:str1.substr()若Str1=“everyone”Str1.substr(5,3)值為:“one”C++中字符串中字符位置計(jì)數(shù)從0開始第96頁/共359頁982.5.2使用string對象的成員函數(shù)成員函數(shù)使用格式:對象名.成員函數(shù)例如:str1.substr()C++中字符串中字符位置計(jì)數(shù)從0開始第97頁/共359頁992.5.2使用string對象的成員函數(shù)成員函數(shù)使用格式:對象名.成員函數(shù)例如:str1.find(要查找的字符串,開始位置)結(jié)果為子串的位置C++中字符串中字符位置計(jì)數(shù)從0開始第98頁/共359頁1002.5.2使用string對象的成員函數(shù)getline函數(shù)的使用功能:利用cin函數(shù)輸入一行字符串存入對象例如:getline(cin,str1,’\n’)第99頁/共359頁1012.5.2使用string對象的成員函數(shù)getline函數(shù)的使用功能:利用cin函數(shù)輸入一行字符串存入對象例如:getline(cin,str1,’\n’)第100頁/共359頁102簡單應(yīng)用:日期格式轉(zhuǎn)換第101頁/共359頁1032.5.3使用complex對象complex類用于定義一個(gè)復(fù)數(shù)對象使用時(shí)添加頭文件#include<complex>定義格式:complex<int>num1(1,2);第102頁/共359頁1042.5.4使用對象小結(jié)使用標(biāo)準(zhǔn)類庫中的類時(shí),須添加頭文件。使用string對象添加???頭文件?添加頭文件#include<string>并使用標(biāo)準(zhǔn)命名空間usingnamespacestd;第103頁/共359頁1052.5.4使用對象小結(jié)使用標(biāo)準(zhǔn)類庫中的類時(shí),須添加頭文件。定義對象方式同變量定義方式。定義對象時(shí)可對對象進(jìn)行初始化。inti;stringstr1;定義時(shí)初始化:inti=1;或inti(1);stringstr1=“hello”;或stringstr1(“hello”);第104頁/共359頁1062.5.4使用對象小結(jié)使用標(biāo)準(zhǔn)類庫中的類時(shí),須添加頭文件。定義對象方式同變量定義方式。同類的不同對象由對象名和屬性來區(qū)分。具有相同的成員函數(shù)。stringstr1=“hello”;stringstr2(“everyone”);Cout<<str1.size()<<endl;Cout<<str2.size()<<endl;第105頁/共359頁1072.5.4使用對象小結(jié)不同類對象具有不同的成員函數(shù)可實(shí)現(xiàn)不同操作。Complexnum1(1,2);Stringstr1(“hello”);Cout<<num1.real()<<endl;Cout<<str1.size<<endl;Cout<<str1<<endl;cout<<num1<<endl;第106頁/共359頁1082.5.4使用對象小結(jié)使用標(biāo)準(zhǔn)類庫中的類時(shí),須添加頭文件。定義對象方式同變量定義方式。定義對象時(shí)可對對象進(jìn)行初始化。同類的不同對象由對象屬性來區(qū)分。不同類對象具有不同的成員函數(shù)可實(shí)現(xiàn)不同操作。類是具有相同特征和操作的對象的抽象。第107頁/共359頁1092.6string對象數(shù)組與泛型算法第108頁/共359頁110第三章函數(shù)和函數(shù)模版3.1函數(shù)的參數(shù)及其傳遞方式C語言中參數(shù)傳遞方式只有一種:值傳遞值傳遞分為:變量值傳遞和變量地址值傳遞C++中分為:值傳遞和地址傳遞(引用傳遞)第109頁/共359頁1113.1函數(shù)的參數(shù)及其傳遞方式12ba

xy12

t12

xy第110頁/共359頁1123.1函數(shù)的參數(shù)及其傳遞方式12ba20002002

xy

t20002002第111頁/共359頁1133.1函數(shù)的參數(shù)及其傳遞方式要注意區(qū)分:參數(shù)傳遞中傳地址和傳地址值不同。設(shè)計(jì)函數(shù)時(shí)要注意:對象作參數(shù),對象指針作參數(shù),對象引用作參數(shù)第112頁/共359頁1143.1函數(shù)的參數(shù)及其傳遞方式3.1.1對象作函數(shù)參數(shù)作用同C語言中普通變量作參數(shù)第113頁/共359頁1153.1函數(shù)的參數(shù)及其傳遞方式3.1.2對象指針作函數(shù)參數(shù)作用同C語言中變量指針作參數(shù)第114頁/共359頁1163.1函數(shù)的參數(shù)及其傳遞方式3.1.3引用作為函數(shù)參數(shù)引用的聲明形式:數(shù)據(jù)類型&別名=對象名;intx=56;int&a=x;int&b=a;則a為x變量(對象)的引用,a和x對應(yīng)同一個(gè)內(nèi)存空間。a未單獨(dú)分配內(nèi)存。b為a的引用。第115頁/共359頁1173.1函數(shù)的參數(shù)及其傳遞方式3.1.3引用作為函數(shù)參數(shù)引用的聲明形式:數(shù)據(jù)類型&別名=對象名;intx=56;int&a=x;int&b=a;b=10;則a為x變量(對象)的引用,a和x對應(yīng)同一個(gè)內(nèi)存空間。a未單獨(dú)分配內(nèi)存。b為a的引用。程序中引用對象的改變會(huì)使得被引用對象發(fā)生改變。第116頁/共359頁1183.1函數(shù)的參數(shù)及其傳遞方式3.1.3引用作為函數(shù)參數(shù)引用作函數(shù)參數(shù):類型函數(shù)名(類型&參數(shù),……)函數(shù)調(diào)用時(shí),實(shí)參對象名傳遞給形參對象名,形參對象名成為實(shí)參的別名,函數(shù)中對形參的改變就會(huì)導(dǎo)致實(shí)參值的改變。第117頁/共359頁1193.1函數(shù)的參數(shù)及其傳遞方式3.1.3引用作為函數(shù)參數(shù)引用作函數(shù)參數(shù):類型函數(shù)名(類型&參數(shù),……)函數(shù)調(diào)用時(shí),實(shí)參對象名傳遞給形參對象名,形參對象名成為實(shí)參的別名,函數(shù)中對形參的改變就會(huì)導(dǎo)致實(shí)參值的改變。第118頁/共359頁1203.1函數(shù)的參數(shù)及其傳遞方式3.1.3引用作為函數(shù)參數(shù)引用作函數(shù)參數(shù):類型函數(shù)名(類型&參數(shù),……)第119頁/共359頁1213.1函數(shù)的參數(shù)及其傳遞方式3.1.3引用作為函數(shù)參數(shù)引用作函數(shù)參數(shù)說明:1,引用對象不是一個(gè)獨(dú)立對象,不占用內(nèi)存。2,對象的指針作參數(shù)時(shí),指針變量中存放實(shí)參對象的地址。3,引用對象作參數(shù)時(shí),函數(shù)調(diào)用時(shí)形參對象和實(shí)參對象共用一個(gè)內(nèi)存單元。第120頁/共359頁122引用數(shù)組名作參數(shù)第121頁/共359頁123引用數(shù)組名作參數(shù)一般格式:typedef類型類型別名使用typedef定義某類型別名后,可使用該別名來定義相關(guān)對象。例如:typedeflongintlint;則longinti;等價(jià)于linti;第122頁/共359頁124Typedef使用說明typedef用法總結(jié):建立一個(gè)類型別名的方法很簡單,在傳統(tǒng)的變量聲明表達(dá)式里用類型名替代變量名,然后把關(guān)鍵字typedef加在該語句的開頭等價(jià)于第123頁/共359頁1253.1函數(shù)的參數(shù)及其傳遞方式3.1.4默認(rèn)參數(shù)函數(shù)調(diào)用時(shí),可以為函數(shù)指定實(shí)參,也可不指定實(shí)參,未指定實(shí)參時(shí),函數(shù)自動(dòng)取默認(rèn)值。第124頁/共359頁1263.1函數(shù)的參數(shù)及其傳遞方式3.1.4默認(rèn)參數(shù)函數(shù)調(diào)用時(shí),可以為函數(shù)指定實(shí)參,也可不指定實(shí)參,未指定實(shí)參時(shí),函數(shù)自動(dòng)取默認(rèn)值。注意:若函數(shù)第n個(gè)參數(shù)是默認(rèn)參數(shù),當(dāng)調(diào)用函數(shù)需要指定該參數(shù)值時(shí),則該參數(shù)前的所有參數(shù)都必須指定。第125頁/共359頁1273.1函數(shù)的參數(shù)及其傳遞方式3.1.5使用const保護(hù)數(shù)據(jù)const限定參數(shù)值不可修改。第126頁/共359頁1283.2深入討論函數(shù)的返回值第127頁/共359頁1293.2深入討論函數(shù)的返回值3.2.1返回引用的函數(shù)第128頁/共359頁1303.2深入討論函數(shù)的返回值3.2.2返回指針的函數(shù)定義數(shù)據(jù)個(gè)數(shù)定義指向數(shù)據(jù)的指針利用input函數(shù)輸入數(shù)據(jù)若指向數(shù)據(jù)的指針非空則輸出數(shù)據(jù)第129頁/共359頁1313.2深入討論函數(shù)的返回值3.2.2返回指針的函數(shù)輸入數(shù)據(jù)個(gè)數(shù)存入n第130頁/共359頁1323.2深入討論函數(shù)的返回值3.2.3返回對象的函數(shù)第131頁/共359頁1333.2深入討論函數(shù)的返回值3.2.2返回指針的函數(shù)—補(bǔ)充說明:new語句

delete語句

NULLNew格式:指針變量=new類型[n]Delete格式:delete指針變量NULL表示空第132頁/共359頁1343.2深入討論函數(shù)的返回值第133頁/共359頁1353.2深入討論函數(shù)的返回值3.2.3返回對象的函數(shù)第134頁/共359頁1363.2深入討論函數(shù)的返回值3.2.4返回值作為函數(shù)參數(shù)第135頁/共359頁1373.3內(nèi)聯(lián)函數(shù)第136頁/共359頁138定義函數(shù)時(shí),加inline關(guān)鍵字表示該函數(shù)為內(nèi)聯(lián)函數(shù)。3.3內(nèi)聯(lián)函數(shù)第137頁/共359頁139定義函數(shù)時(shí),加inline關(guān)鍵字表示該函數(shù)為內(nèi)聯(lián)函數(shù)。程序中的內(nèi)聯(lián)函數(shù)在程序編譯時(shí),將函數(shù)體替換至程序中函數(shù)調(diào)用位置,造成程序變長,效率提高。注意:內(nèi)聯(lián)函數(shù)中不能出現(xiàn)循環(huán)、switch語句內(nèi)聯(lián)函數(shù)一般短小,不宜過長應(yīng)在調(diào)用之前聲明或定義3.3內(nèi)聯(lián)函數(shù)第138頁/共359頁1403.4函數(shù)重載和默認(rèn)參數(shù)同一個(gè)函數(shù)名實(shí)現(xiàn)多種功能,在C++中稱為多態(tài),可利用函數(shù)重載和默認(rèn)參數(shù)兩種方式實(shí)現(xiàn)第139頁/共359頁1413.4函數(shù)重載和默認(rèn)參數(shù)同一個(gè)函數(shù)名實(shí)現(xiàn)多種功能,在C++中稱為多態(tài),可利用函數(shù)重載和默認(rèn)參數(shù)兩種方式實(shí)現(xiàn)定義或聲明函數(shù)時(shí),給出參數(shù)初始化值,則函數(shù)調(diào)用時(shí)若省略參數(shù),則參數(shù)取該初始化值。稱為默認(rèn)參數(shù)。第140頁/共359頁1423.4函數(shù)重載和默認(rèn)參數(shù)同一個(gè)函數(shù)名實(shí)現(xiàn)多種功能,在C++中稱為多態(tài),可利用函數(shù)重載和默認(rèn)參數(shù)兩種方式實(shí)現(xiàn)注意:函數(shù)重載和默認(rèn)參數(shù)可同時(shí)使用。若已定義默認(rèn)參數(shù)函數(shù),則不能重載參數(shù)類型相同,參數(shù)個(gè)數(shù)少于默認(rèn)參數(shù)個(gè)數(shù)的函數(shù)。第141頁/共359頁1433.4函數(shù)重載和默認(rèn)參數(shù)同一個(gè)函數(shù)名實(shí)現(xiàn)多種功能,在C++中稱為多態(tài),可利用函數(shù)重載和默認(rèn)參數(shù)兩種方式實(shí)現(xiàn)注意:函數(shù)重載和默認(rèn)參數(shù)可同時(shí)使用。若已定義默認(rèn)參數(shù)函數(shù),則不能重載參數(shù)類型相同,參數(shù)個(gè)數(shù)少于默認(rèn)參數(shù)個(gè)數(shù)的函數(shù)。參數(shù)類型不同時(shí),可以重載。第142頁/共359頁1443.5函數(shù)模板有些函數(shù)重載時(shí)參數(shù)個(gè)數(shù)相同,只是類型不同,此時(shí)重載函數(shù)比較繁瑣,可利用函數(shù)模板實(shí)現(xiàn)。第143頁/共359頁1453.5函數(shù)模板有些函數(shù)重載時(shí)參數(shù)個(gè)數(shù)相同,只是類型不同,此時(shí)重載函數(shù)比較繁瑣,可利用函數(shù)模板實(shí)現(xiàn)。第144頁/共359頁1463.5函數(shù)模板有些函數(shù)重載時(shí)參數(shù)個(gè)數(shù)相同,只是類型不同,此時(shí)重載函數(shù)比較繁瑣,可利用函數(shù)模板實(shí)現(xiàn)。第145頁/共359頁1473.5函數(shù)模板函數(shù)模板定義格式:定義函數(shù)模板后,函數(shù)調(diào)用時(shí)根據(jù)函數(shù)參數(shù)來類型來確定調(diào)用哪個(gè)版本的函數(shù)。函數(shù)執(zhí)行時(shí)確定參數(shù)類型的函數(shù)稱為模板函數(shù)。第146頁/共359頁1483.5函數(shù)模板此種形式調(diào)用中<int>稱為函數(shù)模板的參數(shù)一般可省略。Typename可替代class第147頁/共359頁1493.5函數(shù)模板若某函數(shù)參數(shù)類型不一致時(shí),也可定義函數(shù)模板。第148頁/共359頁150第四章類和對象4.1類及其實(shí)例化4.1.1類的定義第149頁/共359頁151第150頁/共359頁152::稱為域限定符,表示函數(shù)是類的成員函數(shù)。此時(shí)函數(shù)若要定義為內(nèi)聯(lián),則加inline關(guān)鍵字,類內(nèi)定義的函數(shù)默認(rèn)為內(nèi)聯(lián)函數(shù)。第151頁/共359頁153注意:類定義時(shí),數(shù)據(jù)成員的賦值必須寫在某個(gè)函數(shù)的內(nèi)部。一般使用類似set的函數(shù)進(jìn)行賦值。S1.set(1001,"張三",22,99.5)類student的set函數(shù)應(yīng)該怎么定義????第152頁/共359頁1544.1類及其實(shí)例化4.1.2使用類的對象類的對象的使用類似變量的使用。聲明/定義對象,直接利用對象名使用通過對對象的引用使用對象通過指向?qū)ο蟮闹羔樖褂脤ο蟮?53頁/共359頁1554.1.2使用類的對象類的對象的使用類似變量的使用。在main函數(shù)中是否可按如下方式使用?第154頁/共359頁1564.1.2使用類的對象數(shù)據(jù)成員使用規(guī)律:1,類的成員函數(shù)可以直接使用類的數(shù)據(jù)成員2,類外的函數(shù)不能使用類的私有成員3,類外的函數(shù)可以訪問類的公有成員函數(shù)4,對象間的區(qū)別在于其屬性值不同第155頁/共359頁1574.1.3數(shù)據(jù)封裝對象間利用公有成員函數(shù)進(jìn)行通信。公用成員函數(shù)是對象的接口。第156頁/共359頁1584.2構(gòu)造函數(shù)4.2.1默認(rèn)構(gòu)造函數(shù)若類的定義中未定義構(gòu)造函數(shù),則C++編譯器會(huì)自動(dòng)產(chǎn)生一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造函數(shù),類似于:point(){},此時(shí)不對對象進(jìn)行初始化。若類中定義了構(gòu)造函數(shù),則不再產(chǎn)生默認(rèn)構(gòu)造函數(shù)。第157頁/共359頁1594.2.2定義構(gòu)造函數(shù) 構(gòu)造函數(shù)無返回值,這樣可以減少編譯器的工作,提高效率。構(gòu)造函數(shù)與類同名。構(gòu)造函數(shù)可以重載。構(gòu)造函數(shù)系統(tǒng)自動(dòng)調(diào)用。

第158頁/共359頁1604.2.2定義構(gòu)造函數(shù)初始化列表初始化列表第159頁/共359頁1614.2.3構(gòu)造函數(shù)和運(yùn)算符newNew和構(gòu)造函數(shù)一同起作用,即new首先給對象分配內(nèi)存,然后自動(dòng)調(diào)用構(gòu)造函數(shù)來初始化這塊內(nèi)存。

注意:new建立的動(dòng)態(tài)對象只能用delete刪除,一邊釋放空間。第160頁/共359頁1624.2.4構(gòu)造函數(shù)的默認(rèn)參數(shù)這是錯(cuò)誤的,因?yàn)镻oint()比有默認(rèn)參數(shù)的函數(shù)少。第161頁/共359頁1634.2.5復(fù)制構(gòu)造函數(shù)

<類名>::<復(fù)制初始化構(gòu)造函數(shù)>(const

<類名>&<引用名>);

Point(Point&p)比有默認(rèn)參數(shù)的函數(shù)少,為什么它是對的。第162頁/共359頁1644.3析構(gòu)函數(shù)析構(gòu)函數(shù)的調(diào)用由編譯器自動(dòng)調(diào)用析構(gòu)函數(shù)名在類名前加~

析構(gòu)函數(shù)無返回值析構(gòu)函數(shù)無參數(shù),可以顯示說明為void

析構(gòu)函數(shù)不可以重載析構(gòu)函數(shù)在對象生命期結(jié)束的時(shí)候由系統(tǒng)自動(dòng)調(diào)用。第163頁/共359頁1654.3.1定義析構(gòu)函數(shù)

類的對象數(shù)組的每個(gè)元素調(diào)用一次構(gòu)造函數(shù),調(diào)用一次析構(gòu)函數(shù)。全局對象數(shù)組的析構(gòu)函數(shù)在程序結(jié)束之前被調(diào)用。

第164頁/共359頁1664.3.2析構(gòu)函數(shù)和運(yùn)算符deletedelete后自動(dòng)調(diào)用析構(gòu)函數(shù)。與new相反。

p81[例4.8]4.3.3默認(rèn)析構(gòu)函數(shù)編譯器為沒有析構(gòu)函數(shù)的類自動(dòng)產(chǎn)生一個(gè)空體析構(gòu)函數(shù),與構(gòu)造函數(shù)類似??偨Y(jié):分配幾次內(nèi)存調(diào)用幾次構(gòu)造函數(shù),反之調(diào)用析構(gòu)函數(shù)第165頁/共359頁1674.4調(diào)用復(fù)制構(gòu)造函數(shù)的綜合實(shí)例

p82【例4.9】第166頁/共359頁1684.5成員函數(shù)重載及默認(rèn)參數(shù)

p85【例4.10】第167頁/共359頁1694.6this指針

this指針是c++實(shí)現(xiàn)粉狀的一種機(jī)制,它將對象和該對象調(diào)用的成員函數(shù)連接在一起。

this指針保證了每個(gè)對象可以擁有自己的數(shù)據(jù)成員。第168頁/共359頁1704.7一個(gè)類的對象作為另一個(gè)類的成員

p87【例4.11】第169頁/共359頁1714.8類和對象的性質(zhì)4.8.1對象的性質(zhì)同一類的對象之間可以相互賦值;可以使用對象數(shù)組;可以使用指向?qū)ο蟮闹羔?;對象可以用作函?shù)參數(shù);對象作為函數(shù)參數(shù)時(shí),可以使用對象、對象引用和對象指針;一個(gè)對象可以用作另一個(gè)類的成員。第170頁/共359頁1724.8.1類的性質(zhì)使用類的權(quán)限不完全的類聲明只用當(dāng)使用類產(chǎn)生對象時(shí),才進(jìn)行內(nèi)存分配;類沒有完全定義之前就引用該類不完全聲明僅用于類和結(jié)構(gòu)空類類作用域類中默認(rèn)控制權(quán)限時(shí)private

第171頁/共359頁1734.9面向?qū)ο蟮臉?biāo)記圖

UML(UnifiedModelingLanguage)時(shí)1992年面向?qū)ο蠊芾斫M(OMG)制定的面向?qū)ο蠓治龊驮O(shè)計(jì)的國際標(biāo)準(zhǔn)。

UML時(shí)一種可視化建模語言,主要用于面向?qū)ο蠓治龊徒!5?72頁/共359頁1744.9.1類和對象的UML標(biāo)記圖(識(shí)記)

Car+registrationnumber:String-data:CarData+speed:Integer+direction:Direction+drive(speed:Integer,direction:Direction)+getData():CarDataCar+registrationnumber:String-data:CarData+speed:Integer+direction:DirectionCar第173頁/共359頁175類名類名{約束}屬性[:類型[=初始值]]操作(參數(shù)列表):返回類型對象名:類名屬性=值第174頁/共359頁1764.9.2對象的結(jié)構(gòu)與連接(識(shí)記)第175頁/共359頁1774.10面向?qū)ο缶幊痰奈募?guī)范4.10.1編譯指令(識(shí)記)4.10.2在頭文件中使用條件編譯(領(lǐng)會(huì))

第176頁/共359頁178第五章特殊函數(shù)和成員5.1對象成員的初始化類的定義:第177頁/共359頁1795.1對象成員的初始化第178頁/共359頁1805.1對象成員的初始化第179頁/共359頁1815.1對象成員的初始化示例【5.1】double變成了其他類第180頁/共359頁1825.2靜態(tài)成員成員定義時(shí)使用了static關(guān)鍵字1,靜態(tài)成員變量的初始化只能在類外進(jìn)行。2,類中的任何成員函數(shù)都可訪問靜態(tài)成員變量3,訪問靜態(tài)成員時(shí),一般加上類名限定。4,靜態(tài)成員變量是類的成員,不是對象的成員.5,對象未建立之前靜態(tài)成員已經(jīng)存在。6,靜態(tài)成員沒有this指針,除非使用引用方式否則不能存取類的成員。第181頁/共359頁1835.2靜態(tài)成員---靜態(tài)對象第182頁/共359頁1845.3友元函數(shù)可以實(shí)現(xiàn)兩個(gè)類之間無限制的存取另一個(gè)類的成員。友元函數(shù)可以訪問私有成員,公有成員和保護(hù)成員。友元函數(shù)可以是一個(gè)類或函數(shù)。友元需通過對象來使用類的成員。友元的三種形式:1,普通函數(shù)作一個(gè)類的友元2,a類的成員函數(shù)作b類的友元3,a類作為b類的友元第183頁/共359頁1855.3友元函數(shù)1,普通函數(shù)作一個(gè)類的友元例5.4第184頁/共359頁1865.3友元函數(shù)2,a類的成員函數(shù)作b類的友元第185頁/共359頁1875.3友元函數(shù)2,a類的成員函數(shù)作b類的友元第186頁/共359頁1885.3友元函數(shù)2,a類的成員函數(shù)作b類的友元第187頁/共359頁1895.3友元函數(shù)3,a類作b類的友元第188頁/共359頁190總結(jié):友元函數(shù)可以實(shí)現(xiàn)兩個(gè)類之間無限制的存取另一個(gè)類的成員。友元函數(shù)可以訪問私有成員,公有成員和保護(hù)成員。友元函數(shù)可以是一個(gè)類或函數(shù)。友元需通過對象來使用類的成員。友元的三種形式:1,普通函數(shù)作一個(gè)類的友元2,a類的成員函數(shù)作b類的友元3,a類作為b類的友元第189頁/共359頁1915.4const對象const可限定變量、指針、對象、函數(shù)、數(shù)據(jù)成員、成員函數(shù)。表示不可改變。1,const成員2,const對象3,const函數(shù)1,const成員區(qū)別于const變量const變量定義時(shí)需要初始化。const成員在構(gòu)造函數(shù)中初始化(初始化列表形式)第190頁/共359頁1925.4const對象1,const成員區(qū)別于const變量第191頁/共359頁1935.4const對象1,const成員區(qū)別于const變量第192頁/共359頁1945.4const對象2,const引用作參數(shù)第193頁/共359頁1955.4const對象2,const對象和const函數(shù)const對象只能調(diào)用const成員函數(shù)const函數(shù)中不允許使用改變變量或成員值的語句第194頁/共359頁196復(fù)習(xí)上節(jié)對象初始化:構(gòu)造函數(shù)兩種定義形式。

const限定的數(shù)據(jù)成員引用數(shù)據(jù)成員靜態(tài)成員:靜態(tài)數(shù)據(jù)成員,靜態(tài)成員函數(shù)友元:普通函數(shù)做友元類的成員函數(shù)做友元類做友元const成員:const數(shù)據(jù)成員(const引用)

const成員函數(shù)

const對象第195頁/共359頁197復(fù)習(xí)上節(jié)類的對象數(shù)組:對象數(shù)組中的每個(gè)元素都是一個(gè)對象。對象數(shù)組元素的使用同普通對象使用。對象的指針:指向?qū)ο蟮闹羔樖褂脤ο蟮某蓡T函數(shù)和數(shù)據(jù)成員。對象指針數(shù)組:數(shù)組中每個(gè)元素都是一個(gè)指向?qū)ο蟮闹羔?。指向函?shù)的指針:函數(shù)有地址,指針能存地址,指針可以指向函數(shù)。第196頁/共359頁1985.5數(shù)組和類類可定義對象數(shù)組。inta[5];inta[5]={1,2,3,4,5};pointp[3];pointp[3]={point(1,2),point(3,4),point(5,6)}定義數(shù)組時(shí)未初始化調(diào)用point()形式構(gòu)造函數(shù)定義數(shù)組并初始化調(diào)用point(a,b)形式構(gòu)造函數(shù)使用數(shù)組中的元素時(shí)利用:point[i]形式Point[i]的使用同普通對象使用方式相同第197頁/共359頁1995.5數(shù)組和類類可定義對象數(shù)組,可定義指向?qū)ο蟮闹羔様?shù)組名是數(shù)組在內(nèi)存中的首地址指針可以存放地址可用指針指向數(shù)組通過指針可以使用對象成員p->show()通過指針可以使用對象數(shù)組元素的成員P=a;a[0].show();p->show();第198頁/共359頁2005.5數(shù)組和類定義對象的指針數(shù)組int*p;表示定義一個(gè)指針變量intp[5];表示定義一個(gè)數(shù)組。int*p[5]表示定義一個(gè)數(shù)組中有5個(gè)元素,每個(gè)元素是一個(gè)指針。此類數(shù)組稱為指針數(shù)組。point*p;p=newpoint;p=newpoint(1,2);第199頁/共359頁2015.5數(shù)組和類定義對象的指針數(shù)組point*p[3];p[0]=newpoint(1,2);p[1]=newpoint(3,4);p[2]=newpoint(5,6);通過p[0]使用p[0]指向的對象。p[0]->show();可通過循環(huán)使用p[i]指向的對象。第200頁/共359頁2025.5數(shù)組和類定義指向?qū)ο蟮闹羔様?shù)組,并初始化。point*p[3]={newpoint(1,2),newpoint(3,4),newpoint(5,6)};第201頁/共359頁2035.6指向成員函數(shù)的指針函數(shù)被調(diào)用時(shí)需要調(diào)入內(nèi)存函數(shù)有地址:存放函數(shù)的內(nèi)存單元的首地址指針可以存放地址存放函數(shù)地址的指針稱為指向函數(shù)的指針定義形式:類型(*指針名)(參數(shù)類型);第202頁/共359頁2045.6指向成員函數(shù)的指針intmax(inta,intb){returna>b?a:b;}voidmain(){ int(*p)(int,int); p=max; (*p)(1,2);}第203頁/共359頁2055.6指向成員函數(shù)的指針若max函數(shù)是某類A的成員函數(shù)則:intA::max(inta,intb){returna>b?a:b;}voidmain(){ int(A::*p)(int,int);Aa; p=A::max; a.(*p)(1,2);}第204頁/共359頁2065.7求解一元二次方程利用C++實(shí)現(xiàn)設(shè)計(jì)類,定義類,定義main函數(shù)定義對象,利用對象調(diào)用成員函數(shù)執(zhí)行第205頁/共359頁207設(shè)計(jì)類類的對象中應(yīng)能存放相關(guān)數(shù)據(jù):具有數(shù)據(jù)成員a,b,c一元二次方程的三個(gè)系數(shù)x1,x2存放求得的方程解delta存放b*b-4*a*c類的對象應(yīng)能完成計(jì)算功能:具有成員函數(shù)1,將數(shù)據(jù)存入數(shù)據(jù)成員的函數(shù)2,顯示結(jié)果的函數(shù)3,計(jì)算x1,x2的函數(shù)第206頁/共359頁208定義類第207頁/共359頁209設(shè)計(jì)類定義類的成員函數(shù)第208頁/共359頁210main函數(shù)第209頁/共359頁211main函數(shù)第210頁/共359頁212main函數(shù)第211頁/共359頁213main函數(shù)第212頁/共359頁214main函數(shù)第213頁/共359頁215第五章復(fù)習(xí)構(gòu)造函數(shù)定義:classA{intapublic:

A(intx):a(x){}A(intx){a=x;}}const限定的數(shù)據(jù)成員初始化必須用?形式?還有什么數(shù)據(jù)成員必須用此種形式初始化??const限定的數(shù)據(jù)成員和引用數(shù)據(jù)成員初始化必須使用初始化列表形式。第214頁/共359頁216靜態(tài)成員不依賴于對象而存在。靜態(tài)數(shù)據(jù)成員:定義時(shí)加static靜態(tài)成員必須初始化使用語句:intA::b=0;靜態(tài)對象:static對象一旦定義存在于內(nèi)存中,直到程序結(jié)束才釋放內(nèi)存。第215頁/共359頁217靜態(tài)成員不依賴于對象而存在。靜態(tài)成員使用注意:非靜態(tài)對象靜態(tài)成員可否使用?靜態(tài)對象靜態(tài)成員可否使用?靜態(tài)對象非靜態(tài)成員可否使用?靜態(tài)成員函數(shù)非靜態(tài)成員可否使用?非靜態(tài)成員函數(shù)靜態(tài)成員可否使用?第216頁/共359頁218靜態(tài)成員不依賴于對象而存在。其他注意事項(xiàng):p1081-7靜態(tài)函數(shù)沒有this指針不能聲明為virtual函數(shù)第217頁/共359頁219友元普通函數(shù)作友元類的成員函數(shù)作友元類作友元類A的友元(函數(shù),成員函數(shù),類)可以訪問類A中的所有成員,但必須通過對象或引用來訪問。友元應(yīng)在類A中利用friend聲明第218頁/共359頁220const對象const數(shù)據(jù)成員const成員函數(shù)const指針const變量const引用加const限定后不可改變,任何企圖改變都導(dǎo)致錯(cuò)誤,并應(yīng)注意他們的初始化??!第219頁/共359頁221使用規(guī)則:const對象不能調(diào)用任何非const成員函數(shù)const成員函數(shù)只能調(diào)用const成員函數(shù)非const對象可以調(diào)用const成員函數(shù)非const對象可以使用const數(shù)據(jù)成員const成員函數(shù)中不能使用任何試圖改變變量值的語句。第220頁/共359頁222數(shù)組和類類可以定義對象類可以定義對象數(shù)組對象數(shù)組中的每個(gè)元素都是對象,其使用方式和對象的使用方式相同。對象數(shù)組名表示數(shù)組的首地址可以定義指向?qū)ο蟮闹羔榩使其指向某個(gè)對象可以用指針p指向數(shù)組中的元素第221頁/共359頁223對象的指針數(shù)組使用函數(shù)指針定義形式:int(*p)(int,int);int(A::*P)(int,int);intmax(inta,intb){}intA::max(inta,intb){}第222頁/共359頁224習(xí)題五-1第223頁/共359頁225習(xí)題五-1第224頁/共359頁226習(xí)題五-1第225頁/共359頁227習(xí)題五-1第226頁/共359頁228習(xí)題五-1第227頁/共359頁229習(xí)題五-4第228頁/共359頁230習(xí)題五-4第229頁/共359頁231第六章繼承和派生6.1繼承和派生的基本概念繼承關(guān)系是類與類之間的類屬關(guān)系類:人類:學(xué)生類:教師在已有類的基礎(chǔ)上定義新的類稱為類的派生,新產(chǎn)生的類為派生類,原來的類為基類。(一般與特殊的關(guān)系)第230頁/共359頁2326.1繼承和派生的基本概念繼承關(guān)系是類與類之間的類屬關(guān)系類:人類:學(xué)生類:教師從成員構(gòu)成來看,派生類具有基類的所有成員,基類又叫父類,派生類又叫子類。第231頁/共359頁2336.1繼承和派生的基本概念類的繼承是指:派生類繼承基類的所有數(shù)據(jù)成員和成員函數(shù)。用于表示類間的類屬關(guān)系。非構(gòu)成關(guān)系。派生類的特點(diǎn):1,增加新成員。2,重定義已有成員函數(shù)。3,改變基類的成員的訪問權(quán)限。第232頁/共359頁2346.1繼承和派生的基本概念人學(xué)生教師姓名、年齡、性別。。。。第233頁/共359頁2356.2單一繼承6.2.1一般形式class派生類名:訪問控制基類名{private:成員列表;

public:成員列表;

protected:成員列表;};第234頁/共359頁2366.2單一繼承6.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類中繼承的基類的成員初始化時(shí),需要由派生類的構(gòu)造函數(shù)調(diào)用基類的構(gòu)造函數(shù)。派生類的構(gòu)造函數(shù)一般形式:派生類名::派生類名(參數(shù)):基類名(參數(shù)){//函數(shù)體}構(gòu)造函數(shù)和析構(gòu)函數(shù)不能被繼承。第235頁/共359頁2376.2單一繼承類的派生實(shí)例有類human對象用于存放人的相關(guān)信息:

姓名,年齡,性別并能利用成員函數(shù)實(shí)現(xiàn)相關(guān)信息輸出。在此基礎(chǔ)上定義類student類,具有學(xué)號(hào)、班級(jí)信息,并能完成信息的輸出顯示。定義類,并設(shè)計(jì)測試程序。第236頁/共359頁2386.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)第237頁/共359頁2396.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)第238頁/共359頁2406.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)第239頁/共359頁2416.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)運(yùn)行結(jié)果:問題:在student類中能否直接使用human類中的name,sex,age等成員??第240頁/共359頁2426.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)此時(shí)程序無法運(yùn)行!!?。。〉?41頁/共359頁2436.2.2派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)類A定義中由private限定的成員只能在類A中使用。student雖然是human的派生類也不可使用human類中的private成員,所以在student中定義的show函數(shù)不可使用human中的name,sex,age等私有成員。第242頁/共359頁2446.2.3類的保護(hù)成員protected公有派生得到的派生類不能使用基類的私有成員。那么如何解決派生類中訪問基類的成員呢?并且不能打破封裝性:基類的對象仍不可使用這些成員。第243頁/共359頁2456.2.3類的保護(hù)成員protected公有派生得到的派生類不能使用基類的私有成員。protected限定的成員具有公有和私有雙重性質(zhì)該類成員在派生類中可訪問,其他非成員函數(shù)不可訪問。第244頁/共359頁2466.2.3類的保護(hù)成員protected第245頁/共359頁2476.2.3類的保護(hù)成員protected第246頁/共359頁2486.2.3類的保護(hù)成員protected第247頁/共359頁2496.2.3類的保護(hù)成員protected公有派生得到的派生類不能使用基類的私有成員。protected限定的成員具有公有和私有雙重性質(zhì)該類成員在派生類中可訪問,其他函數(shù)不可訪問。第248頁/共359頁250復(fù)習(xí)上節(jié)基類、派生類、繼承派生類的特點(diǎn):1,增加新成員2,重定義已有函數(shù)3,改變成員訪問權(quán)限第249頁/共359頁251復(fù)習(xí)上節(jié)派生類的定義形式:class派生類名:訪問控制基類名{private:成員列表;

public:成員列表;

protected:成員列表;};訪問控制私有派生公有派生保護(hù)派生第250頁/共359頁252復(fù)習(xí)上節(jié)派生類的定義形式:公有派生的特點(diǎn):派生類中可訪問基類中的protected成員派生類中可訪問基類中的public成員派生類中不可訪問基類中的private成員第251頁/共359頁253復(fù)習(xí)上節(jié)公有派生和保護(hù)成員protected限定的成員具有公有和私有雙重性質(zhì)在基類中是私有的,在派生類中可訪問。問題:1,基類的對象是否可訪問protected成員?2,派生類的對象是否可訪問公有派生類中繼承自基類的protected成員?3,基類的成員函數(shù)是否可訪問基類中的protected成員?4,派生類的成員函數(shù)是否可訪問公有派生類中繼承自基類的protected成員?第252頁/共359頁254復(fù)習(xí)上節(jié)派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù):派生類的構(gòu)造函數(shù)不能由基類繼承而得派生類的構(gòu)造函數(shù)一般形式:派生類名::派生類名(參數(shù)):基類名(參數(shù)){//函數(shù)體}第253頁/共359頁255復(fù)習(xí)上節(jié)派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù):當(dāng)產(chǎn)生一個(gè)派生類對象時(shí),首先調(diào)用基類的構(gòu)造函數(shù),然后調(diào)用派生類的構(gòu)造函數(shù)。當(dāng)釋放一個(gè)派生類對象時(shí),首先調(diào)用派生類的析構(gòu)函數(shù),然后調(diào)用基類的析構(gòu)函數(shù)。第254頁/共359頁2566.2.3類的保護(hù)成員protected第255頁/共359頁2576.2.4訪問權(quán)限1,公有派生和賦值兼容規(guī)則a,基類的公有成員在派生類中仍是公有的。b,基類的保護(hù)成員在派生類中仍是保護(hù)的。c,基類的私有成員在派生類中是不可訪問的。d,基類的不可訪問成員在派生類中仍不可訪問。什么是類的不可訪問成員????例如:若human類中name是private的,則,student類不可訪問若student做某個(gè)類A的基類時(shí),類A仍不可訪問name第256頁/共359頁2586.2.4賦值兼容規(guī)則基類對象和派生類對象的相互賦值。每個(gè)學(xué)生都是人。說明:student類的每個(gè)對象都是human類的對象。每個(gè)人不一定是學(xué)生。說明:human類的每個(gè)對象不一定是student類的對象。第257頁/共359頁2596.2.4賦值兼容規(guī)則基類對象和派生類對象的相互賦值。每個(gè)學(xué)生都是人。說明:student類的每個(gè)對象都是human類的對象。a,派生類的對象可賦值給基類的對象。b,派生類的對象可以初始化基類的引用c,派生類的對象地址可賦值給基類的指針此時(shí)基類的引用或指針只能訪問派生類中繼承自

溫馨提示

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

最新文檔

評論

0/150

提交評論