版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象有關概念:類:具有相似屬性和行為的對象集合,把數據和操作封裝在一起對象:數據+操作。面向對象特性:抽象,封裝,繼承,多態(tài)2、輸入輸出:輸入cin>>a>>b;輸入不能有endl。輸出cout<<a<<b<<endl;3、const修飾符:指向常量的指針:如constchar*p=”abcd”;不容許變化指針所指的常量,如p[3]=’x’是錯誤的,不過可以變化指針p的值p=“mn”;是對的。常指針:char*constp=“abcd”;指針自身是常量,不能移動,不過所指內容為變量,可以更改,如p[3]=’x’是對的。常數據組員,常組員函數,常對象:在類中申明的數據或函數可以是常量,對于常數據組員要用初始化列表初始值,在C++類中,const關鍵字可以修飾對象和組員函數,const對象不能被修改,一種常對象只能調用它的常組員函數,不能調用一般組員函數。常組員函數格式:類型闡明符函數名(參數表)const;常組員函數可以參與重載。常組員函數不能更新對象的數據組員,也不能調用該類中的一般組員函數,const組員函數不能修改數據組員。4、內聯(lián)函數:在函數闡明前冠以關鍵字inline,目的是消除函數調用時的系統(tǒng)開銷,提高運行速度。注意:內聯(lián)函數體內不能有循環(huán)語句和switch語句。內聯(lián)函數的申明必須出目前內聯(lián)函數第一次被調用之前。類構造中所有在類闡明體內定義的函數都是內聯(lián)函數。5、帶有缺省參數值的函數:在闡明函數原型時,可以給一種或多種形參指定缺省值,調用時如給出實參,則采用實參值,否則采用預先給出的默認形參值。如某一種類point的構造函數原型為point(intx=1,inty=0);則參數x和y的缺省值為1和0.注意:在函數原型中,所有缺省值的參數都必須從右往左缺省,在函數調用時從左往右將實參與形參結合,如point(intx=1,inty=0){X=x;Y=y;},那么執(zhí)行pointp(3)之后p的X和Y值分別為3,0.6、函數重載:C++容許功能相近的函數在相似的作用域內以相似函數名申明,從而形成重載。注意:重載函數的形參必須不一樣:個數不一樣或類型不一樣。編譯程序將根據實參和形參的類型及個數的最佳匹配來選擇調用哪一種函數。例:voidadd(intm,intn){cout<<”twointegernumbersm+n=”<<m+n<<endl;}voidadd(floatx,floaty){cout<<”twofloatnumbersm+n=”<<m+n<<endl;}inti=1,j=2;floatf=1.0,d=2.0;add(i,j);add(f,d);則前者調用第一種函數,后者調用第二個函數輸出twointegernumbersm+n=3twofloatnumbersm+n=3.07、引用:引用(&)是標識符的別名,例如:inti;int&ri=i;//建立一種int型的引用ri,并將其初始化為變量i的一種別名。注意:申明一種引用時,必須同步對它進行初始化,使它指向一種已存在的對象,不能申明完畢后再賦值,如inti;int&ri;//錯誤ri=i;一旦一種引用被初始化后,就不能改為指向其他對象。如:inti,j;int&ri=i;ri=&j;//錯誤引用可以作為形參作為傳地址調用,效果和指針同樣。voidswap(int&a,int&b){...}引用與地址符的區(qū)別:引用運算符僅在申明是帶有引用運算符&,后來就像使用一般變量同樣,其他場所使用&都是地址操作符8、作用域標識符(::)假如但愿在局部變量的作用域內使用同名的全局變量,在該變量前加上::,如::a代表全局變量。9、new和delete運算符new用來內存分派,最基本格式為:指針變量=new類型名;該語句在程序運行時從自由存儲區(qū)中為程序分派一類型名字節(jié)大小空間,該空間首地址被存于指針變量中。運算符delete用于釋放new分派的存儲空間,基本格式:delete指針名;闡明:可以用new將分派的對象初始化,new和delete都可以重載。new分派的空間使用結束后應當也只能用delete顯式釋放,否則將不能回收而變成死空間使用new為數組動態(tài)分派內存:指針變量=new類型名[下標值];如int*p=newint[10];釋放時:delete[]指針變量名;如delete[]p;new可認為簡樸變量分派內存時同步進行初始化,指針變量=new類型名(初始化列表);如int*p=newint(10);10、類是一種顧客自定義類型,申明形式:class類名稱{public:公有組員(外部接口)private:私有組員protected:保護型組員};類組員中缺省訪問方式為私有公有類型組員:在關鍵字public背面申明,它們是類與外部的接口,任何外部函數都可以訪問公有類型數據和函數。私有類型組員:在關鍵字private背面申明,只容許本類中的函數訪問,而類外部的任何函數都不能訪問。假如緊跟在類名稱的背面申明私有組員,則關鍵字private可以省略。保護類型:在類的定義中,闡明為protected的數據組員稱為保護組員。保護數據組員具有雙重作用:對于其派生類而言,是公有的,而對于其外部的程序而言,是私有的類的組員:組員數據與一般的變量申明相似,但需要將它放在類的申明體中。組員函數在類中闡明原形,可以在類外給出函數體實現,并在函數名前使用類名加以限定。也可以直接在類中給出函數體,形成內聯(lián)組員函數。類的對象是該類的某一特定實體,即類類型的變量。申明形式:類名對象名;例:ClockmyClock;類中組員的訪問方式:類中組員互訪:直接使用組員名類外訪問:使用“對象名.組員名”或“對象指針名->組員名“方式訪問public屬性的組員11、構造函數構造函數的作用是在對象被創(chuàng)立時使用特定的值構造對象,或者說將對象初始化為一種特定的狀態(tài)。特點:在對象創(chuàng)立時或new類名時由系統(tǒng)自動調用。假如程序中未申明,則系統(tǒng)自動產生出一種默認形式的構造函數,只有程序中定義有構造函數,系統(tǒng)不再自動生成缺省的構造函數缺省構造函數類名::缺省構造函數名(){}函數名必須與類名相似不能指定函數返回類型參數可以有,也可以無,參數可以帶默認形參值,因此一種類可以有多種構造函數,從而構造函數可以重載。如有一種類A,當執(zhí)行語句Aa;時將自動調用該類的無參構造函數或缺省的構造函數或帶默認形參值的構造函數,但無參構造函數和帶默認形參值的構造函數兩者同步出現輕易出現調用時引起二義性容許是內聯(lián)函數運用構造函數創(chuàng)立對象有兩種措施:用構造函數之間創(chuàng)立對象:類名對象名(實參表);如pointp(1,2);運用構造函數創(chuàng)立對象時,通過指針和new來實現:類名*指針變量=new類名(實參表);如A*p=newA(1,2);注意類A申明對象指針并不調用構造函數,而是通過new創(chuàng)立臨時對象調用構造函數,因此該語句只調用構造函數1次12、拷貝構造函數拷貝構造函數是一種特殊的構造函數,其形參為本類的對象引用,作用是用已經存在的對象初始化另一種同類的新對象。類名(類名&對象名);//拷貝構造函數如類A拷貝構造函數為:A(A&x);拷貝構造函數特點:也是構造函數,因此其函數名與類名相似,沒有返回值只有一種參數,并且是本類的對象引用,因此一種類只能有一種,不能重載每一種類均有一種拷貝構造函數,假如沒有定義,系統(tǒng)會自動生成一種缺省的調用拷貝構造函數3種狀況:當用類的一種對象去初始化該類的另一種對象時系統(tǒng)自動調用拷貝構造函數實現拷貝賦值。若函數的形參為類對象,調用函數時,實參賦值給形參,系統(tǒng)自動調用拷貝構造函數。當函數的返回值是類對象時,系統(tǒng)自動調用拷貝構造函數。深拷貝和淺拷貝:缺省的拷貝構造函數所實現的數據組員逐一賦值就是淺拷貝,當類中有指針時,需要自定義拷貝構造函數,謂深拷貝。13、析構函數完畢對象被刪除前的某些清理工作。特點:析構函數與構造函數名相似,但它前面必須加一種波浪號~析構函數沒有返回值析構函數沒有參數,因此一種類中只能有一種析構函數,因此析構函數不能重載當撤銷對象時,或delete對象指針編譯系統(tǒng)自動調用析構函數假如沒有定義析構函數,系統(tǒng)自動生成一種缺省的析構函數類名::~缺省析構函數名(){}14、組員初始化列表在申明類時,不能在數據組員的申明中對數據組員進行初始化,一般在構造函數中用賦值語句進行,但對于內嵌的對象、常量、引用數據組員需要在構造函數的組員初始化列表中進行。帶有組員初始化列表的構造函數一般格式:類名::構造函數名(參數表):(組員初始化列表){。。。。}15、this指針隱含于每一種類的組員函數中的特殊指針。16、對象數組:類名數組名[下標值];該數組中每個元素都是對象,都會自動調用構造函數,當數組中每一種對象被刪除時,系統(tǒng)都要調用一次析構函數。訪問措施:數組名[下標].組員名17、對象指針:類名*對象指針名;定義對象指針不會調用構造函數運用對象指針可以訪問單個對象組員,如point*p,ob;p=&ob;p->show();或(*p).show();也可以用對象指針訪問對象數組,對象可以作為函數參數,對象指針也可以18、指向類組員的指針:通過指向組員的指針只能訪問公有組員指向類的非靜態(tài)組員的指針指向公有數據組員的指針:類型闡明符類名::*數據組員指針名;闡明指針應當指向哪個組員:指針名=&類名::數據組員名;通過對象名(或對象指針)與組員指針結合來訪問數據組員:對象名.*類組員指針名或:對象指針名->*類組員指針名申明指向公有函數組員的指針:類型闡明符(類名::*指針名)(參數表);初始化:指針名=類名::函數組員名;通過對象名(或對象指針)與組員指針結合來訪問函數組員:(對象名.*類組員指針名)(參數表)或:(對象指針名->*類組員指針名)(參數表)指向類的靜態(tài)組員的指針對類的靜態(tài)組員的訪問不依賴于對象,可以用一般的指針來指向和訪問靜態(tài)組員19、靜態(tài)組員靜態(tài)數據組員用關鍵字static申明,該類的所有對象維護該組員的同一種拷貝,必須在類外定義和初始化,用(::)來指明所屬的類。初始化格式:數據類型類名::靜態(tài)數據組員名=值;靜態(tài)數據屬于整個類,因此既可以通過某個對象,或對象指針去訪問,也可以使用類名::靜態(tài)數據組員名格式去訪問它。靜態(tài)組員函數一般來說,靜態(tài)組員函數只能引用屬于該類的靜態(tài)數據組員或靜態(tài)組員函數。靜態(tài)組員函數沒有this指針類外代碼可以使用類名和作用域操作符來調用靜態(tài)組員函數。如類名::靜態(tài)組員函數名(實參表)或者對象。靜態(tài)組員函數名(實參表)或對象指針-〉靜態(tài)組員函數名(實參表)如某類A:classA{private:staticinttotalW;intw;public:A(intm){
w=m;
totalW+=m;}~A(){totalW-=w;}staticintgetT(){returntotalW;}};intA::totalW=0;voidmain(){Aal(50);cout<<A::getT()<<endl;Aa2(100);cout<<a2.getT()<<endl;}20、友元友元是C++提供的一種破壞數據封裝和數據隱藏的機制。提高程序運行效率友元函數不是目前類的組員函數,而是對立于目前類的外部函數,它可以訪問該類的所有組員,包括公有,私有,受保護。友元函數不是類的組員,因此沒有this指針,它不能直接引用對象組員的名字,它必須通過入口參數傳遞進來的對象名或對象指針來引用該對象的組員。如某類girl的友元函數disp格式:voiddisp(girl&g);友元組員一種類的組員函數作為另一種類的友元,它既可以訪問本類的所有組員,還可以訪問friend申明所在類的所有組員友元類若一種類為另一種類的友元,則此類的所有組員都能訪問對方類的私有組員。友元關系是單向的,不具有互換性和傳遞性21、派生類繼承的目的:實現代碼重用。派生的目的:當新的問題出現,原有程序無法處理(或不能完全處理)時,需要對原有程序進行改造。派生類的申明class派生類名:繼承方式基類名{組員申明;};繼承方式:三種繼承方式(省略默認為私有繼承),公有繼承,私有繼承,保護繼承不一樣繼承方式的影響重要體目前:內部訪問:派生類組員對基類組員的訪問權限對象訪問:通過派生類對象對基類組員的訪問權限在派生類中可以直接訪問的是基類的公有組員和保護組員公有繼承(public)基類的public和protected組員的訪問屬性在派生類中保持不變,但基類的private組員不可直接訪問。派生類中的組員函數可以直接訪問基類中的public和protected組員,但不能直接訪問基類的private組員。通過派生類的對象只能訪問基類的public組員。私有繼承(private)基類的public和protected組員都以private身份出目前派生類中,但基類的private組員不可直接訪問。派生類中的組員函數可以直接訪問基類中的public和protected組員,但不能直接訪問基類的private組員。通過派生類的對象不能直接訪問基類中的任何組員。保護繼承(protected)基類的public和protected組員都以protected身份出目前派生類中,但基類的private組員不可直接訪問。派生類中的組員函數可以直接訪問基類中的public和protected組員,但不能直接訪問基類的private組員。通過派生類的對象不能直接訪問基類中的任何組員22、類型兼容規(guī)則一種公有派生類的對象在使用上可以被當作基類的對象,反之則嚴禁。詳細表目前:派生類的對象可以被賦值給基類對象。派生類的對象可以初始化基類的引用。指向基類的指針也可以指向派生類。通過基類對象名、指針只能使用從基類繼承的組員23、多繼承時派生類的申明class派生類名:繼承方式1基類名1,繼承方式2基類名2,...{組員申明;}注意:每一種“繼承方式”,只用于限制對緊隨其后之基類的繼承。24、繼承時的構造函數基類的構造函數不被繼承,派生類中需要申明自己的構造函數。申明構造函數時,只需要對本類中新增組員進行初始化,對繼承來的基類組員的初始化,自動調用基類構造函數完畢。派生類的構造函數需要給基類的構造函數傳遞參數,要看詳細狀況在類繼承過程中,當基類只有帶默認值的有參構造函數時,派生類的構造函數也許為:默認構造函數,不帶參數構造函數,帶參數構造函數;當基類只有不帶默認值的有參構造函數時,派生類必須有構造函數單一繼承時的構造函數派生類名::派生類名(基類所需的形參,本類組員所需的形參):基類名(參數表){本類組員初始化賦值語句;};多繼承且有內嵌對象時的構造函數派生類名::派生類名(基類1形參,基類2形參,...基類n形參,本類形參):基類名1(參數),基類名2(參數),...基類名n(參數),內嵌對象數據組員的初始化{本類組員初始化賦值語句;};構造函數的調用次序1.調用基類構造函數,調用次序按照它們被繼承時申明的次序(從左向右)。2.調用內嵌組員對象的構造函數,調用次序按照它們在類中申明的次序。3.派生類的構造函數體中的內容。25、繼承時的析構函數析構函數也不被繼承,派生類自行申明申明措施與一般(無繼承關系時)類的析構函數相似。不需要顯式地調用基類的析構函數,系統(tǒng)會自動隱式調用。析構函數的調用次序與構造函數相反。26、虛基類用于有共同基類的場所以virtual修飾闡明基類例:classB1:virtualpublicB27、多態(tài)多態(tài)的分類:參數多態(tài),包括多態(tài),重載多態(tài)和強制多態(tài)多態(tài)的實現:函數模板和類模板,虛函數,函數重載、運算符重載虛函數虛函數是動態(tài)綁定的基礎,實現多態(tài)的重要手段。定義在基類中進行,在類的申明中,在函數原型之前寫virtual。virtual只用來闡明類申明中的原型,不能用在函數實現時。具有繼承性,基類中申明了虛函數,派生類中無論與否闡明,同原型函數都自動為虛函數。在派生類中重新定義時,其函數原型都必須和基類中的原型完全相似。調用方式:通過基類指針或引用,執(zhí)行時會根據指針指向的對象的類,決定調用哪個函數。不能是友元函數,不能是靜態(tài)組員函數;不能是內聯(lián)函數;不能是構造函數;可以是析構函數。規(guī)定會分析具有虛函數的程序運行成果純虛函數是在基類中闡明的虛函數,它在該基類中沒有定義,但規(guī)定在它的派生類中必須定義自己的版本,或重新闡明為純虛函數:virtual函數類型函數名(參數表)=0;申明為純虛函數后在基類中就不再給出函數實現部分,函數體有派生類給出。帶有純虛函數的類稱為抽象類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現大全【員工管理】十篇
- 《物業(yè)管理服務業(yè)》課件
- 三年級數學數學廣角課件
- 2024年農業(yè)綜合開發(fā)和扶貧開發(fā)工作總結
- 2024年公司勞動社??粕习肽甑墓ぷ骺偨Y
- 空調機運輸協(xié)議三篇
- 農業(yè)產品銷售主管工作總結
- 通信科技前臺工作總結
- 家政服務前臺工作總結
- 機電裝備話務員工作總結
- 年產30萬噸高鈦渣生產線技改擴建項目環(huán)評報告公示
- 07221美術設計與創(chuàng)意
- 2023年拓展加盟經理年終總結及下一年計劃
- 網絡安全技術及應用 第5版 習題及答案 賈鐵軍 習題集 第1章
- 有限空間作業(yè)審批表
- 認罪認罰悔罪書(4篇)
- 煙花采購協(xié)議書
- 高考作文模擬寫作:“善言”與“敢言”+導寫及范文
- 《建筑施工承插型盤扣式鋼管支架安全技術規(guī)程》 JGJ231-2010
- 視頻監(jiān)控維護合同
- 國開大學2023年01月22588《管理線性規(guī)劃入門》期末考試參考答案
評論
0/150
提交評論