![C語言程序設(shè)計(第2版)課件 藺德軍17 C++基礎(chǔ)知識_第1頁](http://file4.renrendoc.com/view/54032eddec54de05640c7a5e57a1e935/54032eddec54de05640c7a5e57a1e9351.gif)
![C語言程序設(shè)計(第2版)課件 藺德軍17 C++基礎(chǔ)知識_第2頁](http://file4.renrendoc.com/view/54032eddec54de05640c7a5e57a1e935/54032eddec54de05640c7a5e57a1e9352.gif)
![C語言程序設(shè)計(第2版)課件 藺德軍17 C++基礎(chǔ)知識_第3頁](http://file4.renrendoc.com/view/54032eddec54de05640c7a5e57a1e935/54032eddec54de05640c7a5e57a1e9353.gif)
![C語言程序設(shè)計(第2版)課件 藺德軍17 C++基礎(chǔ)知識_第4頁](http://file4.renrendoc.com/view/54032eddec54de05640c7a5e57a1e935/54032eddec54de05640c7a5e57a1e9354.gif)
![C語言程序設(shè)計(第2版)課件 藺德軍17 C++基礎(chǔ)知識_第5頁](http://file4.renrendoc.com/view/54032eddec54de05640c7a5e57a1e935/54032eddec54de05640c7a5e57a1e9355.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
OOP的一個實例OOP=對象+類+繼承+消息#include<iostream.h>classman{private:intage,height,weight;public:voidinit();voidgrow();intgetage();intgetweight();intgetheight();};voidman::init(){age=height=weight=0;}voidman::grow(){age++;height+=10;weight+=50;}
intman::getage(){returnage;}intman::getweight(){returnweight;}intman::getheight(){returnheight;}intmain(){inta,b,c;manzhangsan;zhangsan.init();zhangsan.grow();zhangsan.grow();zhangsan.grow();a=zhangsan.getage();b=zhangsan.getheight();c=zhangsan.getweight();cout<<"zhangsan'sage:"<<a<<"height:"<<b<<"weight:"<<c<<endl;}類的定義與實現(xiàn)class<類名>{
private:<私有數(shù)據(jù)或函數(shù)成員>(僅能被自己訪問)public:<公有數(shù)據(jù)或函數(shù)成員>(允許被所有類訪問)
protected:<保護數(shù)據(jù)或數(shù)據(jù)成員>(允許被本類或派生類訪問)}函數(shù)實現(xiàn):
返回類型類名::函數(shù)名(參數(shù)表){……}……構(gòu)造函數(shù)、析構(gòu)函數(shù)class<classname>{public:classname(參數(shù)表){……}構(gòu)造函數(shù)名與類名相同,不能有任何返回類型說明(包括void),通常在此初始化對象~classnameclassname(參數(shù)表){……}析構(gòu)函數(shù)名為~+類名,不能有任何返回類型說明(包括void),通常在此用delete釋放內(nèi)存單元}構(gòu)造函數(shù)、析構(gòu)函數(shù)舉例#include<iostream.h>classman{private:intage;public:man();voidgrow();intgetage();~man();};man::man(){age=0;cout<<"autodowhenentered"<<endl;}
voidman::grow(){age++;}intman::getage(){returnage;}man::~man(){//disposeareaorothercout<<"doautomaticlywhenexit"<<endl;}intmain(){inta;manzhangsan;//zhangsan.man()//notpermitzhangsan.grow();zhangsan.grow();zhangsan.grow();
a=zhangsan.getage();cout<<"zhangsan'sage:"<<a<<endl;}引用引用是指給對象的地址取個別名,對引用的改動則是對目標的改動。引用不是值,不占有存儲空間引用必須初始化,并且不再指向其他不同的變量#include"iostream.h"voidf(int&b){ b++;}intmain(){int*p1,*p2,i=2,&a=i;p1=&i;p2=&a;cout<<p1<<""<<p2<<endl; f(i); cout<<*p1<<","<<*p2<<endl;}內(nèi)置函數(shù)inline#include<iostream.h>intmain(){inta(8),b(16),c;
inlineintmax(int,int);
c=max(a,b);cout<<”c=”<<c<<endl;}intmax(intx,inty);
{cout<<”c=”<<c<<endl;}內(nèi)置函數(shù)inline實質(zhì):編譯器為inline函數(shù)創(chuàng)建代碼,在每次碰到該函數(shù)的調(diào)用都用相應(yīng)的一段代碼替換說明:關(guān)鍵字inline一般放在函數(shù)聲明的前面inline放在函數(shù)定義的前面時,函數(shù)定義要在調(diào)用函數(shù)的前面限制:不能含有switch,while等復(fù)雜的結(jié)構(gòu)控制語句,遞歸函數(shù)不能被用作inline函數(shù)函數(shù)的改進inline與宏定義宏所作的是機械代換,在參數(shù)為表達式時會產(chǎn)生不可預(yù)知的錯誤宏不能作類型檢查
#definef(m)m*m
宏定義調(diào)用:f(5+5)5+5*5+5函數(shù)的改進this指針在每個對象中,都有一個自動定義的指針,指針中保存者對象本身的地址.在使用中訪問本對象成員時常常省略this,但在把自身地址作為參數(shù)時就必須使用了classA{public:CBoB;//用類CB聲明對象oBintage;voidfun();}voidA::fun(){cout<<age<<endl;//age相當于this->ageoB.mf(this);}函數(shù)的默認參數(shù)可以在函數(shù)聲明時,對參數(shù)賦與默認值,調(diào)用沒有給出實參時,就使用默認值。voiddelay(intloops=1000);voiddelay(intloops){if(loops==0)return;for(inti=0;i<loops;i++);}delay();delay(5000);函數(shù)的改進默認參數(shù)的使用說明默認參數(shù)只能在函數(shù)聲明中提供若一個函數(shù)有多個默認參數(shù),則在形參分布中從右到左逐個定義,在調(diào)用函數(shù)時,自左向右逐分配實參。默認值可以是全局變量,常量,甚至一個函數(shù),但不能是局部變量。函數(shù)的改進分析下面語句的正確性:#include"iostream.h"intfa(inta,intb=2,intc=3,intd=4){returna+b+c+d;}//intfb(inta=1,intb=2,intc=3,intd){returna+b+c+d;}//wrongintmain(){ cout<<fa(5)<<endl; cout<<fa(5,6)<<endl;// cout<<fa(5,,7,8)<<endl;//wrong}static靜態(tài)成員同一個類的不同對象所占用的空間是不同的,而靜態(tài)成員則被所有對象共享.靜態(tài)成員屬于類而不屬于對象,所以可以通過對象訪問,也可以通過類名::靜態(tài)成員的方法訪問,訪問靜態(tài)成員不能使用this指針靜態(tài)函數(shù)只能訪問靜態(tài)成員靜態(tài)成員也可以用public,protected,private定義繼承(封裝性,繼承性)現(xiàn)實世界中的對象都有共性如獅子,大象都屬于哺乳動物都具有哺乳動物的共性,因此在定義類時,也遵循這種關(guān)系將會使定義和管理變的簡單class<派生類名>:[派生方式]<基類名>[,:[派生方式]<基類名>]繼承舉例#include<iostream.h>classanimal{public: intweight; intgetweight();};intanimal::getweight(){ returnweight;};classelephant:publicanimal{public: intnoseLength;};classlion:publicanimal{public: intspeed;};intmain(){ elephant*e1=newelephant(); e1->weight=100; e1->noseLength=1.5; cout<<e1->getweight()<<endl;}派生后可訪問性最小化原則缺省的派生方式為private派生后,原基類成員的可訪問性最小化原則基類的private成員不可能被派生類或其他類訪問通過public派生,原基類可訪問性不變通過protected派生,原public和protected成員都變?yōu)閜rotected成員通過private派生,原基類所有成員變?yōu)閜rivate成員友員函數(shù)類的封裝性,隱藏了數(shù)據(jù)成員,保證了對象的安全,但在特殊情況下可能會帶來不便為此C++提供了友員函數(shù)能象成員函數(shù)那樣訪問類的所有成員基類和派生類的構(gòu)造函數(shù)編譯器在構(gòu)造寄生類對象時,先生成基類構(gòu)造函數(shù)的代碼,然后生成派生類構(gòu)造函數(shù)的代碼,調(diào)用方式有隱式和顯式兩種:隱式方式:派生類中沒有調(diào)用語句,將執(zhí)行缺省的構(gòu)造函數(shù)顯式方式:在派生類顯式調(diào)用基類構(gòu)造函數(shù),設(shè)B是A的派生類B::B(<形式參數(shù)>):A(<參數(shù)表>)顯式構(gòu)造函數(shù)舉例#include<iostream.h>classanimal{public: intweight; animal(intw); intgetweight();};animal::animal(intw){ this->weight=w;};intanimal::getweight(){ returnweight;};classelephant:publicanimal{public: intnoseLength; elephant(intw,intnl);};elephant::elephant(intw=0,intnl=0):animal(w){//顯式調(diào)用基類構(gòu)造函數(shù)
this->noseLength=nl;};intmain(){ elephante1(100,2); cout<<e1.getweight()<<endl;
}虛基類多重派生導(dǎo)致D中含有A的兩個副本,出現(xiàn)編譯二義性錯誤解決辦法為采用虛基類繼承方法classA{public:intn;};//去除任何一個virtual將產(chǎn)生編譯錯誤。classB:publicvirtualA{public:intm;};classC:publicvirtualA{public:intl;};classD:publicB,publicC{public:inth;};intmain(){Dd1;d1.n=10;d1.m=20;d1.l=30;d1.h=40;}基類指針指向派生類對象
及虛函數(shù)基類指針可以指向子類對象,反之則錯誤使用虛函數(shù)可以使父類指針訪問子類函數(shù)構(gòu)造函數(shù)不能定義成虛函數(shù)虛函數(shù)舉例#include<iostream.h>classA{public: voidshowA(){cout<<"A\n";} voidshow(){cout<<"IamA\n";} virtualvoidshowV(){cout<<"IamAV\n";}};classB:publicA{public: voidshowB(){cout<<"B\n";}; voidshow(){cout<<"IamB\n";};//形成函數(shù)覆蓋
voidshowV(){cout<<"IamBV\n";}//對虛函數(shù)形成函數(shù)覆蓋};intmain(){ A*b1=newB();// B*a1=newA();//wrong b1->showA();// b1->showB();//wrong b1->show();//調(diào)用基類的函數(shù)
b1->showV();//調(diào)用派生類函數(shù)
B*b2=newB(); b2->show();//調(diào)用派生類函數(shù)
b2->showV();//調(diào)用派生類函數(shù)}抽象類與純虛函數(shù)純虛函數(shù):只定義函數(shù)頭,不定義函數(shù)具體實現(xiàn)的函數(shù)稱為純虛函數(shù)聲明形式:virtual<返回類型><函數(shù)名>(參數(shù)表)=0抽象類:一個類如果含有純虛函數(shù),或有protected訪問屬性的構(gòu)造函數(shù)或虛構(gòu)函數(shù)(因為protected屬性的構(gòu)造函數(shù)只能由子類調(diào)用)抽象類只能充當基類,不能用來生成對象,可以聲明指針,用來指向派生類對象一個類如繼承了抽象類,則必須實現(xiàn)基類的所有純虛函數(shù),或也充當抽象類.抽象類舉例#include<iostream.h>classA{//抽象類public: voidshowA(){cout<<"A\n";} virtualvoidshowV()=0;//純虛函數(shù)};classB:publicA{public: voidshowV(){cout<<"IamBV\n";}//必須形成函數(shù)覆蓋};intmain(){ B*b=newB(); b->showV();}函數(shù)重載(多態(tài)性)定義一組函數(shù)名相同,功能相似,而參數(shù)不同的函數(shù),系統(tǒng)根據(jù)不同參數(shù)自動選擇合適的函數(shù),這就形成了函數(shù)重載.函數(shù)重載舉例#include<iostream.h>#include<string.h>#include<stdio.h>charabs(charn){cout<<"inchar"<<endl;return(n>=0?n:-n);}intabs(intn){cout<<"inint"<<endl;return(n>=0?n:-n);}longabs(longn){cout<<"inlong"<<endl;return(n>=0?n:-n);}intad(inta,intb){cout<<"+"<<endl;returna+b;}char*ad(char*a,char*b){cout<<"link"<<endl;strcat(a,b);returna;}intmain(){chara=-1;intb=-1;longc=-1L;a=abs(a);b=abs(b);
c=abs(c);charstr1[10]="abcdef",str2[10]="GHI";intt1=5,t2=3;puts(ad(str1,str2));cout<<ad(t1,t2)<<endl;}運算符重載<結(jié)果類型>operator<運算符>(<形參表>)#include<iostream.h>classComplex{public: floatr;//實部
flo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)殖場農(nóng)產(chǎn)品質(zhì)量安全追溯合同
- 2024-2025學(xué)年湖北省黃岡市高二上學(xué)期普通高中12月聯(lián)考歷史試卷
- 2025年兼職會計實習(xí)生崗位協(xié)議書完整版
- 2025年北京龍湖租賃合同標準
- 2025年雙方數(shù)據(jù)互換保密協(xié)議
- 2025年鎳壓延加工材項目立項申請報告模范
- 2025年合作項目協(xié)商協(xié)議示例
- 2025年技術(shù)成果轉(zhuǎn)化服務(wù)項目立項申請報告模板
- 2025年分析儀器購買合同模板
- 2025年聲學(xué)懸浮物監(jiān)測儀項目規(guī)劃申請報告模板
- 除數(shù)是兩位數(shù)的除法練習(xí)題(84道)
- 《煤礦頂板管理》課件
- 產(chǎn)品可行性分析報告范文
- 2024年國家公務(wù)員考試《行測》真題(地市級)及答案解析
- 2024年重慶市公務(wù)員錄用考試《行測》真題及答案解析
- 地質(zhì)災(zāi)害知識培訓(xùn)
- 傳統(tǒng)春節(jié)習(xí)俗
- 醫(yī)院消防安全知識培訓(xùn)課件
- 《護患溝通》課件
- 《籃球防守腳步移動技術(shù) 滑步》教案
- 完整版項目部組織機構(gòu)圖
評論
0/150
提交評論