揚(yáng)州大學(xué)物理學(xué)院c++復(fù)習(xí)大綱_第1頁
揚(yáng)州大學(xué)物理學(xué)院c++復(fù)習(xí)大綱_第2頁
揚(yáng)州大學(xué)物理學(xué)院c++復(fù)習(xí)大綱_第3頁
揚(yáng)州大學(xué)物理學(xué)院c++復(fù)習(xí)大綱_第4頁
揚(yáng)州大學(xué)物理學(xué)院c++復(fù)習(xí)大綱_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1.名字空間:namespaceXXX;作用域運(yùn)算符::usingnamespaceXXX;#include<iostream.h>等同于#include<iostream>Usingnamespacestd;2.new和delete普通變量p=newint;*p=5;等價(jià)于p=newint(5);數(shù)組#include<iostream.h>voidmain(){int*p;p=newint[5];for(inti=0;i<5;i++)p[i]=i*i;for(i=0;i<5;i++)cout<<p[i]<<"";cout<<endl;delete[]p;}結(jié)果:0149163運(yùn)算符::x可以作為全局變量4.引用運(yùn)算、取地址#include<iostream.h>voidmain(){inta;int&m=a;int*b=&m;a=5;cout<<"m="<<m<<"b="<<b<<endl;m=9;cout<<"a="<<a<<"b="<<b<<endl;}引用,用于在程序的不同部分使用兩個(gè)以上的變量名指向同一地址(內(nèi)存空間),使得對其中任一個(gè)變量的操作實(shí)際上都是對同一地址單元進(jìn)行的。被聲明為引用類型的變量名則是實(shí)際變量名的別名。引用運(yùn)算符為&,聲明引用的一般形式為:數(shù)據(jù)類型&引用變量名=變量名;對引用進(jìn)行操作,實(shí)際上就是對被引用的變量進(jìn)行操作;引用不是值,不占存儲空;;引用一旦被初始化,就不能再重新賦值。11點(diǎn)說明:在一行上聲明多個(gè)引用型變量(函數(shù))名時(shí),要在每個(gè)變量(函數(shù))名前都冠以“&”符號。引用不是變量,所以引用本身不能被修改(不能再改變成為另一個(gè)變量的引用)。一個(gè)變量被聲明為引用時(shí)必須進(jìn)行初始化,除非這個(gè)引用是用作函數(shù)的參數(shù)或返回值,為引用提供的初始值應(yīng)為變量(包括對象)。引用一旦被初始化,就不能再重新賦值。由于引用不是變量,所以,不能說明引用的引用,也不能說明數(shù)組元素的類型為引用數(shù)組,或指向引用的指針(引用不占內(nèi)存空間)。引用與指針不同指針的內(nèi)容或值是某一變量的內(nèi)存單元地址,而引用則與初始化它的變量具有相同的內(nèi)存單元地址。引用運(yùn)算符和地址運(yùn)算符不同??梢杂靡粋€(gè)引用初始化另一個(gè)引用。常把函數(shù)的參數(shù)說明成引用以建立函數(shù)參數(shù)的引用傳遞方式。有空指針,無空引用引用不能用數(shù)據(jù)類型來初始化。返回引用的函數(shù)調(diào)用可作為左值5.const#include<iostream.h>constdoublePI=3.1415926;//#definePI3.1415926intmax(constint*p);//在函數(shù)參數(shù)中使用constvoidmain(){inta[5]={21,3,55,12,9};cout<<PI<<endl;cout<<max(a)<<endl;}intmax(constint*p){intmax=0;for(inti=0;i<5;i++)if(p[i]>max)max=p[i];returnmax;}結(jié)果:3.1415955(1)使用const修飾符定義常量時(shí),必須初始化(2)常量一旦被定義,在程序中任何地方都不能再更改。(3)如果用const定義的是一個(gè)整型常量,int可以省略。(4)與#define定義的常量有所不同,const定義的常量可以有自己的數(shù)據(jù)類型,這樣C++編譯程序可以進(jìn)行更加嚴(yán)格的類型檢查,具有良好的編譯時(shí)的檢測性。(5)函數(shù)參數(shù)也可以用const說明,用于保證實(shí)參在該函數(shù)內(nèi)部不被改動。例如,通過函數(shù)max求出整型數(shù)組a[100]中的最大值,函數(shù)原型應(yīng)該是:intmax(constint*pa);這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對數(shù)組元素的操作只許讀,不許寫。6.帶缺省參數(shù)的函數(shù)+函數(shù)重載#include<iostream.h>voidff(inta,intb,intc=15,intd=45){cout<<"a="<<a<<",b="<<b<<",c="<<c<<",d="<<d<<endl;};voidmain(){ff(1,2);ff(1,2,3);ff(1,2,3,4);}結(jié)果:a=1,b=2,c=15,d=45a=1,b=2,c=3,d=45a=1,b=2,c=3,d=4在函數(shù)說明中為形參指定一個(gè)缺省值,則稱此函數(shù)為帶缺省參數(shù)的函數(shù)。當(dāng)函數(shù)調(diào)用發(fā)生后,在形參表中等號后的各“缺省值”將起實(shí)參的傳遞作用。如果函數(shù)有多個(gè)缺省參數(shù),則缺省參數(shù)必須是從右向左定義,并且在一個(gè)缺省參數(shù)的右邊不能有未指定缺省值的參數(shù)。函數(shù)調(diào)用時(shí),參數(shù)不帶缺省值。7.函數(shù)重載#include<iostream.h>voidfn(inta,intb){cout<<a*b<<endl;};voidfn(inta,intb,intc){cout<<a+b+c<<endl;};voidmain(){fn(1,2);fn(1,2,3);}結(jié)果:26C++編譯系統(tǒng)允許為兩個(gè)或兩個(gè)以上的函數(shù)取相同的函數(shù)名,但是形參的個(gè)數(shù)或者形參的類型不應(yīng)相同(不涉及函數(shù)的返回值類型),編譯系統(tǒng)會根據(jù)實(shí)參和形參的類型及個(gè)數(shù)的最佳匹配,自動確定調(diào)用哪一個(gè)函數(shù),這就是所謂的函數(shù)重載。8.類的定義classTdate{public:voidSet(intm,intd,inty);voidPrint();private:intmonth;intday;intyear;};外聯(lián)函數(shù)定義內(nèi)聯(lián)函數(shù)的定義一般情況下,一個(gè)模塊由規(guī)范說明和實(shí)現(xiàn)兩部分組成。模塊中的說明部分作為一個(gè)單獨(dú)的文件存放起來,這個(gè)文件被稱為頭文件,其擴(kuò)展名為“.h”;而實(shí)現(xiàn)部分可能由多個(gè)擴(kuò)展名為“.cpp”的文件組成。一般一個(gè)較大的文件可以分為三個(gè)文件來存放:(1)將類的說明作為一個(gè)頭文件來存放。內(nèi)聯(lián)函數(shù)原型和定義一般歸入頭文件;(2)類的實(shí)現(xiàn)部分單獨(dú)組成一個(gè)文件,用來存放類的成員函數(shù)的定義;(3)在main()中實(shí)現(xiàn)類的應(yīng)用。9.對象定義classTdate{。。。。。。。。}dot1,dot2,*P=&dot1;或者使用時(shí)Tdatedot1,dot2,*P=&dot1;成員訪問:對象名.公有成員指向?qū)ο蟮闹羔槼蓡T或(*對象指針名).公有成員對象的引用.成員10.this指針voidTdate::set(intm,intd,inty){month=m;day=d;year=y;}等同與如下寫法:voidTdate::set(intm,intd,inty){this->month=m;this->day=d;this->year=y;}11.構(gòu)造函數(shù)無參構(gòu)造函數(shù)和有參構(gòu)造函數(shù)#include<iostream.h>classtest{private:intnum;floatf1;public:test();test(intn,floatf);};test::test(){num=0;f=1.2;cout<<"Default"<<endl;}test::test(intn,floatf){num=0;f=1.2;cout<<"n="<<n<<",f="<<f<<endl;}voidmain(){testx;testy(10,21.5);}結(jié)果:Defaultn=10,f=21.5拷貝構(gòu)造函數(shù)classcat{private:intage;public:cat();cat(cat&);};cat::cat(cat&other){age=other.age;}拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)的功能是用一個(gè)已有的對象來初始化一個(gè)被創(chuàng)建的同類對象,是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,當(dāng)創(chuàng)建一個(gè)新對象時(shí)系統(tǒng)自動調(diào)用它;其形參是本類對象的引用,它的特殊功能是將參數(shù)代表的對象逐域拷貝到新創(chuàng)建的對象中。用戶可以根據(jù)自己實(shí)際問題的需要定義特定的拷貝構(gòu)造函數(shù),以實(shí)現(xiàn)同類對象之間數(shù)據(jù)成員的傳遞。如果用戶沒有聲明類的拷貝構(gòu)造函數(shù),系統(tǒng)就會自動生成一個(gè)缺省拷貝構(gòu)造函數(shù),這個(gè)缺省拷貝構(gòu)造函數(shù)的功能是把初始對象的每個(gè)數(shù)據(jù)成員的值都復(fù)制到新建立的對象中。自動調(diào)用的4種情況用類的一個(gè)對象去初始化另一個(gè)對象用類的一個(gè)對象去初始化另一個(gè)對象時(shí)的另外一種形式對象作為函數(shù)參數(shù)傳遞時(shí),調(diào)用拷貝構(gòu)造函數(shù)。如果函數(shù)的返回值是類的對象,函數(shù)調(diào)用返回時(shí),調(diào)用拷貝構(gòu)造函數(shù)??截悩?gòu)造函數(shù)分為兩種,深拷貝和淺拷貝構(gòu)造函數(shù)。由C++提供的默認(rèn)拷貝構(gòu)造函數(shù)是淺拷貝復(fù)制(逐個(gè)成員依次拷貝),即只復(fù)制對象空間而不復(fù)制資源。數(shù)組是可以用淺拷貝的.如果對象的數(shù)據(jù)成員包括指向堆空間的指針,就不能使用淺拷貝方式。深拷貝需要同時(shí)復(fù)制對象的空間和資源。12.基本數(shù)據(jù)類型轉(zhuǎn)換為類類型

classA{public: A(); A(int);};f(Aa)//f函數(shù)的定義;f函數(shù)的形參為A類的對象f(1);/*f函數(shù)的調(diào)用;進(jìn)行f函數(shù)調(diào)用時(shí)先構(gòu)造一個(gè)A類對象,調(diào)用A::A(int)類類型向基本型轉(zhuǎn)換#include<iostream.h>classRMB{public: RMB(doublevalue=0.0); operatordouble() {returnyuan+jf/100.0;} voiddisplay() {cout<<(yuan+jf/100.0)<<endl; }protected: unsignedintyuan; unsignedintjf;};RMB::RMB(doublevalue){yuan=value; jf=(value-yuan)*100+0.5;}voidmain(){RMBd1(2.0),d2(1.5),d3; d3=((double)d1+(double)d2); d3.display(); d3=d1+d2; d3.display();}13.析構(gòu)函數(shù)#include<iostream.h>#include<string.h>classStudent{public: Student(char*pName="noname") {strncpy(name,pName,40); name[39]='\0'; cout<<pName<<endl;} Student(Student&s) {cout<<"copyof"<<<<endl; strcpy(name,"copyof"); strcat(name,);} ~Student() {cout<<"~student"<<name<<endl;}protected: charname[40];};voidfn(Students){cout<<"fn()\n";}voidmain(){Studentrandy("Randy");Studentwang("wang");cout<<"Callingfn\n";fn(randy);cout<<"Returnedfromfn()\n";}結(jié)果:RandywangCallingfncopyofRandyfn()~studentcopyofRandyReturnedfromfn()~studentwang~studentRandy通過結(jié)果看析構(gòu)函數(shù)和構(gòu)造函數(shù)的調(diào)用順序14.對象成員構(gòu)造函數(shù)先客人后自己析構(gòu)函數(shù)先自己后客人15.靜態(tài)數(shù)據(jù)成員#include<iostream.h>classT{staticinti;public: T(){i++;} intlist(){returni;}};intT::i=0;voidmain(){Ta,b;cout<<a.list()<<""<<b.list()<<endl;}結(jié)果:22靜態(tài)數(shù)據(jù)成員被存放在內(nèi)存的某一單元內(nèi)。即使沒有創(chuàng)建任何一個(gè)該類對象,類的靜態(tài)成員在存儲空間中也是存在的,可以通過類名::或?qū)ο竺?訪問(如果靜態(tài)數(shù)據(jù)成員是public的,否則用成員函數(shù)訪問)。含有靜態(tài)數(shù)據(jù)成員的類在創(chuàng)建對象時(shí)不為靜態(tài)數(shù)據(jù)成員分配存儲空間,可以將靜態(tài)數(shù)據(jù)成員看成是一個(gè)全局變量,將其封裝在某個(gè)類中通常有兩個(gè)目的:(1)限制該變量的作用范圍。例如將其放在類的私有部分聲明,則它只能由該類對象的函數(shù)成員直接訪問。(2)將意義相關(guān)的全局變量和相關(guān)的操作物理地放在一起,可以增加程序的可讀性和可維護(hù)性。初始化在類體外進(jìn)行。其格式如下:<數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=(初始值);16.靜態(tài)成員函數(shù)(1)函數(shù)也可以聲明為static的。靜態(tài)成員函數(shù)無this指針,它是同類的所有對象共享的資源,只有一個(gè)共用的副本,它不能直接訪問非靜態(tài)的數(shù)據(jù)成員,必須要通過某個(gè)該類對象才能訪問。(2)在靜態(tài)成員函數(shù)中訪問的一般是靜態(tài)數(shù)據(jù)成員或全局變量。(3)由于靜態(tài)成員函數(shù)屬于類獨(dú)占的成員函數(shù),因此訪問靜態(tài)成員函數(shù)的消息接收者不是類對象,而是類自身。在調(diào)用靜態(tài)成員函數(shù)的前面,必須綴上對象名或類名,經(jīng)常用類名。(4)一個(gè)類的靜態(tài)成員函數(shù)不需要?jiǎng)?chuàng)建任何該類的對象就可以被調(diào)用。但一般不這么做。(5)靜態(tài)成員函數(shù)不能是虛函數(shù),若非靜態(tài)成員函數(shù)和靜態(tài)成員函數(shù)具有相同的名字和參數(shù)類型將是非法的17.友元函數(shù)#include<iostream.h>classmyclass{intx,y;char*string;public: myclass(intx1,inty1); friendintsum(myclassc); friendvoidprint(myclassc);};myclass::myclass(intx1,inty1){x=x1;y=y1;}intsum(myclassc){returnc.x+c.y;}voidprint(myclassc){cout<<"x="<<c.x<<"y="<<c.y<<endl;}voidmain(){myclassc(10,10); cout<<"thesumis:"<<sum(c)<<endl; print(c);}結(jié)果:thesumis:20x=10y=10友元函數(shù)是一種說明在類定義體內(nèi)的非成員函數(shù):friend〈返回值類型〉〈函數(shù)名〉(〈參數(shù)表〉);(1)友元函數(shù)是在類中說明的一個(gè)函數(shù),它不是該類的成員函數(shù),但允許訪問該類的所有成員。它是獨(dú)立于任何類的一般的外界函數(shù)。友元并不在類的范圍中,它們也不用成員選擇符(.或->)調(diào)用,除非它們是其它類的成員。(2)友元沒有this指針,訪問該類的對象的成員時(shí),必須使用對象名,而不能直接使用類的成員名。(3)雖然友元函數(shù)是在類中說明的,但其名字的作用域在類外,作用域的開始點(diǎn)在說明點(diǎn),結(jié)束點(diǎn)和類名相同。(4)如果在說明友元時(shí)給出了該函數(shù)的函數(shù)體代碼,則它是內(nèi)聯(lián)的。(5)在類外定義友元函數(shù)時(shí)去掉friend關(guān)鍵字。友元成員#include<iostream.h>#include<string.h>classP;classadd{intx,y,z;public:add(inta,intb,intc){x=a;y=b;z=c;}voidshow(P&);};classP{intn;public:P(intm){cout<<"a+b+c=";n=m;};friendvoidadd::show(P&);};voidadd::show(P&m){cout<<x+y+z<<endl;cout<<"m="<<m.n<<endl;}voidmain(){Paa(12);addbb(10,20,15);bb.show(aa);}結(jié)果:a+b+c=45m=12另一個(gè)類的成員函數(shù)可以作為某個(gè)類的友元,只是在聲明友元函數(shù)時(shí)要加上成員函數(shù)所在的類名,稱為友元成員。聲明如下:friend函數(shù)返回值類型類名∷成員函數(shù)名(形參列表);friend授權(quán)該函數(shù)可以訪問宣布其為友元的類中的所有成員。友元類#include<iostream.h>classP{intn;friendclassadd;public:P(intm){cout<<"a+b+c=";n=m;};};classadd{intx,y,z;public:add(inta,intb,intc){x=a;y=b;z=c;}voidshow(P&);};voidadd::show(P&m){cout<<x+y+z<<endl;cout<<"m="<<m.n<<endl;}voidmain(){Paa(12);addbb(10,20,15);bb.show(aa);}結(jié)果:a+b+c=45m=12某一個(gè)類可以是另一個(gè)類的友元,這樣作為友元的類中的所有成員函數(shù)都可以訪問另一個(gè)類中的私有成員。友元類的說明方式如下:friendclass〈類名〉;18.繼承、派生新類過程派生類具有如下特點(diǎn):(1)新的類可在基類的基礎(chǔ)上包含新的成員;(2)在新的類中可隱藏基類的成員函數(shù);(3)可為新類重新定義成員函數(shù)。基類與派生類的關(guān)系如下:(1)派生類是基類的具體化。(2)派生類是基類定義的延續(xù)。(3)派生類是基類的組合。派生類定義:class派生類名:繼承方式基類名1)吸收基類成員(2)改造基類成員一是依靠派生類的繼承方式來控制基類成員的訪問。二是對基類數(shù)據(jù)成員或成員函數(shù)的屏蔽(覆蓋),即在派生類中定義一個(gè)和基類數(shù)據(jù)成員或成員函數(shù)同名的成員。但是基類的成員并不是被替換了,如果想調(diào)用可以使用::運(yùn)算。(3)添加新的成員#include<iostream.h>classA{private: intm;public:A(inta,intb) {m=a+b;}intR(){returnm;}};classB:publicA{intn;public:B(inta,intb,intm=0):A(a,b){n=m;}intR(){returnA::R();}intR2(){returnm;}//private,protected需要加這句話};voidmain(){Bss(10,15,12);cout<<ss.R2()<<","<<ss.R()<<endl;}19.派生類的構(gòu)造函數(shù)#include<iostream.h>classdata{intx;public: data(intx) {cout<<"classdata\n";}};classa{datad1;public: a(intx):d1(x) {cout<<"classa\n";}};classb:publica{datad2;public: b(intx):a(x),d2(x) {cout<<"classb\n";}};classc:publicb{public: c(intx):b(x) {cout<<"classc\n";}};voidmain(){css(5);}結(jié)果:classdataclassaclassdataclassbclassc在下面兩種情況下,必須定義派生類的構(gòu)造函數(shù):1派生類本身需要構(gòu)造函數(shù);2在定義派生類對象時(shí),其相應(yīng)的基類對象需調(diào)用帶有參數(shù)的構(gòu)造函數(shù)。派生類構(gòu)造函數(shù)(參數(shù)表):基類構(gòu)造函數(shù)(參數(shù)表),對象成員1(參數(shù)表)……,對象成員n(參數(shù)表){派生類新增成員的初始化語句;}在定義派生類對象時(shí)構(gòu)造函數(shù)的執(zhí)行順序是先祖先(基類,調(diào)用順序按照它們繼承時(shí)說明的順序),再客人(對象成員,調(diào)用順序按照它們在類中說明的順序),后自己(派生類本身)。20.賦值兼容規(guī)則所謂賦值兼容規(guī)則就是在公有派生的情況下,一個(gè)派生類的對象可以作為基類的對象來使用的地方(在公有派生的情況下,每一個(gè)派生類的對象都是基類的一個(gè)對象,它繼承了基類的所有成員并沒有改變其訪問權(quán)限)。具體的說,有三種情況可以把一個(gè)公有派生類的對象作為基類對象來使用:(1)派生類對象可以賦給基類的對象。如:(約定類derived是從類base公有派生而來的)derivedd;baseb(d);(2)派生類對象可以初始化基類的引用。如:derivedd;base&br=d;(3)派生類對象的地址可以賦給指向基類的指針。如:derivedd;base*pb=&d;21.多繼承的概念class<派生類名>:[繼承方式]基類名1,[繼承方式]基類名2,...,[繼承方式]基類名n{//定義派生類自己的成員;};重繼承可以看作是單一繼承的擴(kuò)展,單繼承可以看作是多繼承的一個(gè)最簡單的特例。22.虛基類概念當(dāng)在多條繼承路徑上有一個(gè)公共的基類,會產(chǎn)生二義性,使用關(guān)鍵字virtual將基類說明成虛基類解決這個(gè)問題23運(yùn)算符重載#include<iostream.h>classP{public:P(inta,intb){x=a;y=b;};Poperator+(P&);P&operator++();voidOUT(){cout<<"x="<<x<<",y="<<y<<endl;}protected: intx,y;};PP::operator+(P&a){intn=x-a.x;intm=y-a.y;Pl(n,m);returnl;}P&P::operator++(){inti,j=x;for(i=0;i<j-1;i++)x*=j; return*this;}voidmain(){Pa(5,25);Pb(2,30);Pc(0,0);c=a+b;++c;c.OUT();}結(jié)果:x=27,y=-5把+變成-,++變成階乘即x=(5-2)^(5-2)=27Y=25-30=-51.運(yùn)算符重載定義運(yùn)算符重載是對已有的運(yùn)算符賦予多重含義,同一個(gè)運(yùn)算符作用于不同類型的數(shù)據(jù)(對象)導(dǎo)致不同類型的行為。2.運(yùn)算符重載的規(guī)則(1)不能重載的運(yùn)算符是:(1)成員訪問運(yùn)算符.(2)作用域運(yùn)算符∷(3)條件運(yùn)算符?:(4)成員指針運(yùn)算符*(5)編譯預(yù)處理命令的開始符號#(2)只能重載c++原有的運(yùn)算符,重載之后運(yùn)算符的優(yōu)先級和結(jié)合性都不變。(3)重載功能不改變原運(yùn)算符所需操作數(shù)的個(gè)數(shù)前自增和后自增運(yùn)算符++的重載前自增運(yùn)算符++和后自增運(yùn)算符++重載的語法<函數(shù)類型>operator++();//前<函數(shù)類型>operator++(int);//后24.虛函數(shù)#include<iostream.h>classA{public: A() {cout<<"classA"<<endl; f(); }virtualvoidf() {cout<<"A::f()"<<endl;} voidg() {cout<<"A::g()"<<endl;} voidh() {cout<<"A::h()"<<endl; f();g();}};classB:publicA{public: voidf() {cout<<"B::f()"<<endl;} voidg() {cout<<"B::g()"<<endl;}};voidmain(){ Aa; Bb; A*p=&b; p->f(); p->g(); p->h(); a.f(); a.g(); a.h(); b.f(); b.g(); b.h();}結(jié)果:classA//Aa;的運(yùn)行結(jié)果A::f()classA//Bb;A::f()B::f()//p->f();A::g()//p->g();A::h()//p->h();B::f()A::g()A::f()//a.f();A::g()//a.g();A::h()//a.h();A::f()A::g()B::f()//b.f();B::g()//b.g();A::h()//b.h();B::f()A::g() 指向基類對象的指針都可以指向它的公有派生類對象(不能指向私有派生類對象)。不能將指向派生類對象的指針指向其基類對象。1.虛函數(shù)的定義在上例中如果想讓指針指向基類對象就調(diào)用基類的who(),指向派生類對象就調(diào)用派生類的who()(不要強(qiáng)制類型轉(zhuǎn)換)。在基類中將who()函數(shù)聲明為虛函數(shù)即可。虛函數(shù)是一種非靜態(tài)的成員函數(shù),說明虛函數(shù)的方法如下:virtual〈類型〉〈函數(shù)名〉(〈參數(shù)表〉)(1)虛函數(shù)是在基類和派生類中聲明相同而定義不同的成員函數(shù),在派生類中重新定義基類中的虛函數(shù)時(shí),可以不加virtual,因?yàn)樘撎匦钥梢韵聜鳌?2)析構(gòu)函數(shù)可以是的虛函數(shù),但構(gòu)造函數(shù)則不能是虛函數(shù)。(3)在類體系中訪問一個(gè)虛函數(shù)時(shí),應(yīng)使用指向基類的指針或?qū)惖囊?,以滿足運(yùn)行時(shí)多態(tài)性的要求。也可以像調(diào)用普通成員函數(shù)那樣利用對象名來調(diào)用一個(gè)虛函數(shù)。(4)在派生類中重新定義虛函數(shù)時(shí),必須保證派生類中該函數(shù)的返回值和參數(shù)與基類中的說明完全一致,否則就屬于重載,丟失虛特性。(5)若在派生類中沒有重新定義虛函數(shù),則派生類的對象將使用其基類中的虛函數(shù)代碼。(6)虛函數(shù)必須是類的一個(gè)成員函數(shù)(不能是友元或靜態(tài)成員函數(shù))。(7)通過指向基類對象的指針調(diào)用虛函數(shù)時(shí),C++系統(tǒng)對該調(diào)用進(jìn)行動態(tài)綁定,而使用普通函數(shù)則是靜態(tài)綁定。(8)若派生類中沒有再定義基類中已有的虛函數(shù),則指向該類對象的指針或引用名引用虛函數(shù)時(shí)總是引用距離其最近的一個(gè)基類中的虛函數(shù)。虛函數(shù)派生類有就用派生類的,沒有就用基類的。(9)若在基類的構(gòu)造(析構(gòu))函數(shù)中也引用虛函數(shù),則所引用的只能是本類的虛函數(shù)。25.純虛函數(shù)如果基類只表達(dá)一些抽象的概念,而并不與具體的對象相聯(lián)系,但它又必須為它的派生類提供一個(gè)公共的界面,在這種情況下,可以將基類中的虛函數(shù)定義成純虛函數(shù)。純虛函數(shù)是一種沒有具體實(shí)現(xiàn)的特殊的虛函數(shù)。純虛函數(shù)的定義格式如下:virtual〈類型〉(函數(shù)名)((參數(shù)表))=0;抽象類如果一個(gè)類至少有一個(gè)純虛函數(shù),那么就稱該類為抽象類。抽象類不能建立對象。能夠建立對象的類稱為具體類,也就是不含純虛函數(shù)的類。抽象類的主要作用是為其所組織的繼承層次結(jié)構(gòu)提供一個(gè)公共的基類,它刻劃了公有行為的特征,其它類可以從它這里繼承和實(shí)現(xiàn)接口,純虛函數(shù)的實(shí)現(xiàn)由其具體的派生類來提供。#include<iostream.h>classM{public:virtualintL()=0;};classA:publicM{protected:intx,y;public:A(inta,intn){x=a;y=n;}intL(){inti,j=x;for(i=0;i<y-1;i++)

溫馨提示

  • 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

提交評論