面向?qū)ο缶幊炭焖偃腴T_第1頁
面向?qū)ο缶幊炭焖偃腴T_第2頁
面向?qū)ο缶幊炭焖偃腴T_第3頁
面向?qū)ο缶幊炭焖偃腴T_第4頁
面向?qū)ο缶幊炭焖偃腴T_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C++面向?qū)ψ髡撸篺吐血,請客,沒有科班學(xué)過,菜鳥碼

CC++publicpublicprivate,形式如C語言中常見的: a則是這個(gè)類的一個(gè)對象,stringfloat對象,比如和,就好比inta;intb;一樣2ClassStudent//{ name;//學(xué)生的名字 //學(xué)生的}其中,student是類的名字,這個(gè)類里有兩個(gè)內(nèi)容,即和名字,age和name叫做這個(gè)類的成員數(shù)據(jù),inta=10,10a的屬性C3Class { }到。當(dāng)然也可以將名字和都寫在public里,對于初學(xué)者可以先不寫private,private以后再討論4inta studentstudentClass { //privateagenamepublic set a);//這個(gè)就是成員函數(shù)的,又叫方}成員函數(shù)的和C語言的普通函數(shù)完全一樣,只是寫在類的里 studentset astudent{Age=a; Returntrue} aa.set(20); //把a(bǔ)a的屬性設(shè)成20,使用方法用句號連接,如果對象aa不是student類的,則不能使用這個(gè).set的方法aa.age //直接aa的屬性,返回Class{ set i); set a);//這個(gè)函數(shù)定義略過,nameareturntrue;}set()agename賦值了,實(shí)際并不需要這么做,還有更簡單的,就是直接賦值,aa.age=20;=“”;但是,如果直接寫aa.age=20會引起一個(gè)問題,比如aa.age=-5;從程序的角度沒有錯(cuò),但實(shí)際不可的函數(shù)定義里,增加一些防錯(cuò)機(jī)制,比如:ifa>0returnpass;elsereturnfail;到此為止已經(jīng)講完全部的基本概念,1類(學(xué)生,類定義里要寫成員和方法的名字),2對象(aa),3成員數(shù)據(jù)(和名字,又叫屬性),4成員函數(shù)(set,給賦值,又叫方法,具體內(nèi)容寫在類的外面)一個(gè)面向?qū)ο蟮拇a最少有三部分:1類的定義,236寫一句最簡單的inta;則表示創(chuàng)建一個(gè)對象a,類為int,這里的a雖然沒有給一個(gè)a=10的值,但系統(tǒng)已經(jīng)有了一個(gè)默認(rèn)的值,就是a=0studentaa時(shí),創(chuàng)建了aaaa有默認(rèn)值嗎?這里,如果aa就有默認(rèn)值為什么要構(gòu)造函數(shù)?對學(xué)生類建立一個(gè)對象aa后,要給他的和分別賦值,那就要寫兩行代set(“”);set(20),使用構(gòu)造函數(shù),即使你有再多的成員數(shù)據(jù),就像inta一樣,不用一一寫Class { student }studentstudent{Age20;//構(gòu)造函數(shù)里,可以對全部的成員數(shù)據(jù)給一個(gè)默認(rèn)值Name=“”;} aa;//新建一個(gè)student類的對象,名字叫aa,這里不用再人工賦值和名字了,將自動調(diào)用構(gòu)造函數(shù)給和名字默認(rèn)值7上邊的構(gòu)造函數(shù)沒有輸入值,只有默認(rèn)值,只能是20那有沒有辦法改進(jìn)一下呢?我們讓構(gòu)造函數(shù)進(jìn)Class { student(); student(inta,stringb)//2個(gè)輸入?yún)?shù),即名字和}student::student(inta,stringb) //student代表{Age= //這樣名字和就不是默認(rèn)值了,可以動態(tài)輸Name=} aa //studentaaaa bb(25,“ //構(gòu)造函數(shù)重載,新建一個(gè)student類的對象bb,同時(shí)動態(tài)輸入名字8aaaa已經(jīng)沒用的時(shí)候,析構(gòu)函數(shù)專門用于銷毀對象對于析構(gòu)函數(shù)的內(nèi)容,這里不做深入,主函數(shù)中運(yùn)行:deleteaa;student~student cout<<”deleteobject //C++coutCprintf9前面說了一個(gè)成員函數(shù)set,用來給和賦值,同樣的,創(chuàng)建對象aa之后,可以做一個(gè)函數(shù)來讀出他的和名字,如果這個(gè)方法只屬性,而不修改屬性,就是常成員函數(shù)。Class { set //這個(gè)就是成員函數(shù)的,又叫方 read } student {Cout<<name;//打印出Cout<age;//打印出Returntrue;}Student //aa. //aaread實(shí)際可以不使用const,普通方法也可以讀成員數(shù)據(jù),加const只是安全起見,防止意外修改數(shù)據(jù)。更加不正規(guī)的做法就是像第5小節(jié)那樣直接:aa.age,但在正規(guī)程序中還是會使用const來讀。10,inta;intbintc;intd;一樣。studentaabbccdd對象,那需要一個(gè)變量cnt=4來表示程序已經(jīng)創(chuàng)建了4個(gè)對象了,cnt這個(gè)數(shù)student類有關(guān),但又不屬于aabbClass //{ //成員數(shù)據(jù), student //agename //static //static}studentstudent {Age=20; Name=“”;Cntcnt //每次調(diào)用構(gòu)造函數(shù)創(chuàng)建對象時(shí),cnt} student //static{Return } //調(diào)用count方法,返回靜態(tài)成員數(shù)據(jù)cnt=2,已建立兩個(gè)對象,這行和下一行是一樣的 //注意不論aa還是bb,返回是一樣的,靜態(tài)成員不依賴于某個(gè)對象student::count(); 返回靜態(tài)成員數(shù)據(jù)t=2aa.count()效果完全一樣,只有不依賴于對象的SstaticstringuniversitySUniversity”;(這里說boolstudent::set(intstudent::studentstudent::student(inta,string boolstudent::read()staticint前方,接下去的內(nèi)容會越來越難,編程不歸 publicstudentpublicprivateClass { //print //這個(gè)print是私有的方}Voidstudent //printname cout<<“ Voidstudent //printage Studentaa; //調(diào)用公有方法,打印出 //studentprint_age下面加深一下這個(gè)例子,看看如何使用私有方法,其思想是通過公有方法的外殼調(diào)用私有方法Classstudent:{ //print_age_public }Voidstudentprint_age_public //print_age_public Voidstudent::print_age_private() //定義print_age_private私有方法 cout aa.print_age_public(); //這里通過公有函數(shù)的外殼,調(diào)用私有,然后打印出20 樣,不能直接,只能通過類內(nèi)部的公有方法才能讀寫private屬性12,類,在11小節(jié),介紹了private,不能被類的外部,但有一個(gè)例外,就是的成員函數(shù)就可以student的所有public和private信息,形式如下:Class{ Public:…… Private:……}13,類的派生繼承初步a)在說student這個(gè)類,那學(xué)生可以細(xì)分成本科生和,學(xué)生類是個(gè)大類,本科生和也Classundergraduatepublic //student{String }再看看Classpostgraduate:public //類定義,冒號后面表示從student類公有派生而{Stringresearch; //這行新增定義了一個(gè)和本科生不一樣的字符串屬性research,比如的方向:設(shè)計(jì)}nameage,因?yàn)楦静挥脤?,子類自動繼承父類的屬性和方法,也就是說,創(chuàng)建一個(gè)或者本科生類的對象后,他也帶有name和age兩個(gè)屬性這兩個(gè)子類沒有構(gòu)造函數(shù),他的對象是怎么被創(chuàng)建的呢?nameage //創(chuàng)建對象,此時(shí)子類無構(gòu)造函數(shù),系統(tǒng)將調(diào)用父類student的無參數(shù)的構(gòu)造函數(shù)給name和age賦一個(gè)默認(rèn)值,其默認(rèn)值在第6小節(jié)中,也就是””,age=20 //Postgraduateset4student最后請注意,類和本科生類除了共有的ame和,也有不同的東西,是eeach而本科 publicprivate,除了之前的public和private以外,還有一個(gè)和他們平級的關(guān)鍵字,protect(保護(hù))。之前一直沒有說protect,是因?yàn)樵跊]有派生繼承的情況下,protect與private效果完全一樣,即不能被外部,但在有我們在上一節(jié)定義類開頭是這樣寫的classpostgraduate{publicstudent……}表示從student類繼承,publicpublicstudent的公有部分(age和name),并且age和name也將做為類的public部分。而類是無法繼承也無法student當(dāng)student類定義中的private被替換成protectstudent本身無任何變化classpostgraduate{publicstudent……}時(shí)候除了public被繼承了protect(可以理解為私有)也被繼承了并且student的protectpostgraduateprotect中student,publicA,privateBpostgraduatepublicB還有更暈的事,上邊一直說的都是公有繼承,也就是代碼中的classpostgraduate{publicstudent……}。那這publicprivateprotect呢?答案是可以的,就是私有繼承和保護(hù)繼承,具體如下,純理論,沒的跳publicA,privateBApublicA,protectBABPrivate15,子類的構(gòu)造函數(shù)postgraduateundergraduate子類沒有構(gòu)造函數(shù),所以系統(tǒng)會調(diào)student的構(gòu)造函數(shù),但是,不論子類有沒有自己構(gòu)造函數(shù),創(chuàng)建子類對象時(shí),父類構(gòu)造函數(shù)都將Classpostgraduate:public //類定義,表示從student派生而{ //的公有成Stringresearch //這行新增定義了一個(gè)公開的屬性research,字符串,比如的方向:設(shè) postgraduate(inta,stringb,string //帶參數(shù)的構(gòu)造函數(shù),參數(shù)為研究方}Postgraduatepostgraduate {research=“asicdesign”;//這里對的research屬性賦值為asicdesign,注意這里沒有age和} bb //創(chuàng)建對象bb,調(diào)用無參數(shù)構(gòu)造函postgraduateresearchagename賦值,但在13節(jié),age和name會自動在父類student的構(gòu)造函數(shù)中賦值,換句話說,在創(chuàng)建子類bb對象時(shí),系統(tǒng)首先自動運(yùn)行父類student構(gòu)造函數(shù)agename賦值,隨后運(yùn)行子類postgraduate構(gòu)造函數(shù),對bb對象進(jìn)行拓展,增加research內(nèi)容。句話說,子類是不能繼承父類的構(gòu)造函數(shù)的,只能再來看看帶參數(shù)的子類構(gòu)造函數(shù),首先他的定義和長的不一樣,后面多了東Postgraduatepostgraduate(inta,stringbstringcstudent(a, Research= bb(25,“”,“ASICdesign”) //創(chuàng)建對象bb,傳入有參數(shù)的構(gòu)造函這里程序會先調(diào)用父類student構(gòu)造函數(shù),把25和兩個(gè)值傳入父類student帶參數(shù)的構(gòu)造函數(shù),隨后在把參數(shù)c=asicdesign傳給bb自己的research屬性。這樣實(shí)現(xiàn)了對對象的全動態(tài)的初始化賦值。 a+b=3;stringastringb這里我要一下這個(gè)概念在一些比較新的編程語言中比如ython兩個(gè)字符串是可以執(zhí)行加法的,形式如下:a #pythonb=”yyyy” 這里并不會報(bào)錯(cuò),會打印出字符串“xxxxyyyy”3種方法:(overrideC++的多態(tài)第二個(gè)是隱藏隱藏和覆蓋都依賴于面向?qū)ο箅[藏的具體做法在父類student中定義一個(gè)函數(shù)study(int(Class {voidstudy //study方法,注意參數(shù)是}voidpostgraduatestudy //study cout<<“好好學(xué)習(xí) //下面是定Classpostgraduate:public //類定義,為了突出重點(diǎn)省略了構(gòu)造函數(shù)和屬性,student{ voidstudy( a //study方法,注意參數(shù)是}voidpostgraduate::study( a) //study方法定 cout<<“設(shè)計(jì)”; //打印出設(shè) Student bb. //對象調(diào)用的study方法,參數(shù)為int,打印出設(shè)aa.study(true //studyboolbb.study(true); //這行出錯(cuò),對象,但參數(shù)為bool,本來應(yīng)該重載父類的study方法,studentpostgraduatestudy同a+ba+b不同。在實(shí)際程序中,隱藏使用的非常少(我個(gè)人感覺)。 C中指針就是個(gè)難點(diǎn),現(xiàn)在回避不了必須講。 //student //aap&aa //paapname //aanamep //aa.study()aa //新建一個(gè)student父類指針 //新建一個(gè)Postgraduate p1 p2 //p1= //父類學(xué)生指針指向子類對象,可p2= //子類指針指向父類學(xué)生對象,這里報(bào)postgraduatepostgraduate中的屬性和方法,父類指針指向子類時(shí),仍然只能用 樣的,并且在所有子類父類study前面加上關(guān)鍵字virtual,表示這是一個(gè)虛函數(shù)。在多態(tài)的高級用法virtual。Class {virtualvoidstudy //study方法,注意前面加了virtual,是個(gè)虛函數(shù),并且沒有參}voidpostgraduatestudy {cout<<“好好學(xué)習(xí)”; // //類定義為了突出重點(diǎn)省略了構(gòu)造函數(shù)和屬性從{ //的公有成virtualvoidstudy //study方法,注意前面加了virtual,是個(gè)虛函數(shù),也沒有參}voidpostgraduatestudy {cout<<“設(shè)計(jì)”; //學(xué)習(xí)設(shè)Classundergraduate:publicstudent//student派{ virtualvoidstudy //study方法,注意前面加了virtual,是個(gè)虛函數(shù),也沒有參}voidundergraduatestudy {cout<<“大學(xué)物理”; student,undergraduate,postgraduatestudy虛函數(shù),并且他們的輸入?yún)? //對象 //本科生對象ccStudent*p; p //p //studyp p-> //父類指針調(diào)用子類的方法,打印出設(shè)計(jì),就是多p p-> //父類指針調(diào)用子類的方法,打印出大學(xué)物理,就是多C++多態(tài)的,就是只要在程序開始時(shí)候設(shè)置一個(gè)父類指針,之后這個(gè)指針可以動態(tài)的指向不同的類,再談?wù)劧鄳B(tài)(覆蓋)set(inta)set(stringb)兩個(gè)同名函數(shù)后,經(jīng)過編譯,系統(tǒng)內(nèi)部其實(shí)把他們改成了兩個(gè)不同名的函數(shù),比如一個(gè)叫

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論