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

下載本文檔

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

文檔簡(jiǎn)介

C++面向?qū)ψ髡撸篺吐血,請(qǐng)客,沒(méi)有科班學(xué)過(guò),菜鳥(niǎo)碼

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

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論