<span id="plx27"><var id="plx27"></var></span>
<dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>
  • 歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
    裝配圖網(wǎng)
    ImageVerifierCode 換一換
    首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

    《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》教案

    • 資源ID:55969772       資源大小:67.15KB        全文頁數(shù):25頁
    • 資源格式: DOCX        下載積分:12積分
    快捷下載 游客一鍵下載
    會(huì)員登錄下載
    微信登錄下載
    三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
    二維碼
    微信掃一掃登錄
    下載資源需要12積分
    郵箱/手機(jī):
    溫馨提示:
    用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
    支付方式: 支付寶    微信支付   
    驗(yàn)證碼:   換一換

     
    賬號(hào):
    密碼:
    驗(yàn)證碼:   換一換
      忘記密碼?
        
    友情提示
    2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
    3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
    4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
    5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

    《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》教案

    第3章類和對(duì)象3.2構(gòu)造函數(shù)與析構(gòu)函數(shù)例:點(diǎn)類PointclassPointprivate:intx,y;public:Point();Point(intxx,intyy)x=xx;y=yy;Point(Point&p)x=p.x;y=p.y;intGetX()constreturnx;intGetY()constreturny;voidSetXY(intxx,intyy)x=xx;y=yy;voidShow();voidPoint:Show()cout<<"X:"<<x<<",Y:"<<y<<endl;例:人類PersonclassPersonprotected:char*name;intage;charsex;public:Person(char*n,inta,chars);Person()name=0;age=0;sex=''Person(Person&p);Person()deletename;voidSetName(char*n);voidSetAge(inta)age=a;voidSetSex(ints)sex=s;char*GetName()constreturnname;intGetAge()constreturnage;charGetSex()constreturnsex;voidShow();#include"person.h"#include<iostream>usingnamespacestd;Person:Person(char*n,inta,chars)name=newcharstrlen(n)+1;strcpy(name,n);age=a;sex=s;Person:Person(Person&p)name=newcharstrlen(p.name)+1;strcpy(name,p.name);age=p.age;sex=p.sex;voidPerson:SetName(char*n)deletename;name=newcharstrlen(n)+1;strcpy(name,n);voidPerson:Show()cout<<"Name:"<<name<<",Age:"<<age<<",Sex:"<<sex<<endl;3.3對(duì)象數(shù)組與對(duì)象指針1 、對(duì)象數(shù)組所謂對(duì)象數(shù)組是指每一數(shù)組元素都是對(duì)象的數(shù)組。2、對(duì)象指針聲明對(duì)象指針的一般語法形式為:類名*對(duì)象指針名。當(dāng)用指向?qū)ο蟮闹羔榿碓L問對(duì)象成員時(shí),要用“->”操作符。3、this指針C+坳成員函數(shù)提供了一個(gè)名字為this的指針,這個(gè)指針稱為自引用指針。每當(dāng)通過一個(gè)對(duì)象調(diào)用一個(gè)成員函數(shù)時(shí),系統(tǒng)就自動(dòng)把這個(gè)this指針指向該對(duì)象。因此使用的數(shù)據(jù)成員就是該對(duì)象的數(shù)據(jù)成員。3.4 向函數(shù)傳遞對(duì)象1 、使用對(duì)象作為函數(shù)參數(shù)2、使用對(duì)象指針作為函數(shù)參數(shù)3、使用對(duì)象引用作為函數(shù)參數(shù)3.5 靜態(tài)成員1 、靜態(tài)數(shù)據(jù)成員在一個(gè)類中,若將一個(gè)數(shù)據(jù)成員說明為static,這種成員稱為靜態(tài)數(shù)據(jù)成員。與一般的數(shù)據(jù)成員不同,無論建立多少個(gè)類的對(duì)象,都只有一個(gè)靜態(tài)數(shù)據(jù)的拷貝。從而實(shí)現(xiàn)了同一個(gè)類的不同對(duì)象之間的數(shù)據(jù)共享。定義靜態(tài)數(shù)據(jù)成員的格式如下:static數(shù)據(jù)類型數(shù)據(jù)成員名;靜態(tài)數(shù)據(jù)成員在該類定義之外被初始化。訪問靜態(tài)數(shù)據(jù)成員可以通過對(duì)象或指針來訪問,也可以通過類名:來訪問。2、靜態(tài)成員函數(shù)定義靜態(tài)成員函數(shù)的格式如下:static返回類型靜態(tài)成員函數(shù)名(參數(shù)表);與靜態(tài)數(shù)據(jù)成員類似,調(diào)用公有靜態(tài)成員函數(shù)的一般格式有如下幾種:類名:靜態(tài)成員函數(shù)名(實(shí)參表)對(duì)象.靜態(tài)成員函數(shù)名(實(shí)參表)對(duì)象指針->靜態(tài)成員函數(shù)名(實(shí)參表)例:點(diǎn)類Point(演示靜態(tài)成員)classPointprivate:intx,y;staticintcount;public:Point(intxx=0,intyy=0)x=xx;y=yy;count+;Point(Point&p)x=p.x;y=p.y;count+;intGetX()constreturnx;intGetY()constreturny;voidSetXY(intxx,intyy)x=xx;y=yy;staticintGetCount()returncount;intPoint:count=0;intmain()Pointa(100,200),b;cout<<a.GetCount();cout<<Point:GetCount();3.6 友元1、友元函數(shù)友元函數(shù)不是當(dāng)前類的成員函數(shù),而是獨(dú)立于當(dāng)前類的外部函數(shù),但它可以訪問該類的所有對(duì)象的成員,包括私有成員、保護(hù)成員和公有成員。2、友元成員一個(gè)類的成員函數(shù)也可以作為另一個(gè)類的友元,這種成員函數(shù)不僅可以訪問自己所在類對(duì)象中的所有成員,還可以訪問friend聲明語句所在類對(duì)象中的所有成員。3、友元類一個(gè)類也可以作為另一個(gè)類的友元。友元關(guān)系是單向的,不具有交換性。若類X是類Y的友元,類Y不一定是類X的友元。友元關(guān)系也不具有傳遞性。若類X是類Y的友元,Y是類Z的友元,類X不一定是類Z的友元。例:點(diǎn)類Point(演示友元)classPointprivate:intx,y;staticintcount;public:Point(intxx=0,intyy=0)x=xx;y=yy;intGetX()constreturnx;intGetY()constreturny;voidSetXY(intxx,intyy)x=xx;y=yy;frienddoubleDist(Pointp1,Pointp2);frienddoubleDist(Pointp1,Pointp2);doublex,y;x=p1.x-p2.x;y=p1.y-p2.y;returnsqrt(x*x+y*y);intmain()Pointa(100,200),b(300,400);cout<<"兩點(diǎn)間的距離為:"<<Dist(p1,p2)<<endl;例:圓類Circle(包含Point類的寫法)classCircleprivate:doubleradius;/半徑Pointcenter;/圓心public:Circle()Circle(intx,inty,doubler):center(x,y)SetRadius(r);Circle(Pointp,doubler):center(p)SetRadius(r);doubleGetRadius()constreturnradius;voidSetRadius(doubler)radius=(r>=0?r:0);voidSetValue(intx,inty,doubler)center.SetXY(x,y);SetRadius(r);doubleArea();voidShow();constdoublePI=3.14159;inlinedoubleCircle:Area()returnPI*radius*radius;voidCircle:Show()cout<<"圓心為:"center.Show();cout<<"半徑為:"<<radius;3.8 常類型1、 、const引用const引用的說明形式如下:const類型說明符&引用名2、 const對(duì)象const對(duì)象的說明形式如下:const類名對(duì)象名(參數(shù)表);如:constDataMybirthday(1980,1,1);const對(duì)象的數(shù)據(jù)成員值不能被改變,const對(duì)象必須進(jìn)行初始化。通過只能調(diào)用它的const成員函數(shù),而不能調(diào)用普通成員函數(shù)。3、 const數(shù)據(jù)成員const數(shù)據(jù)成員只能通過構(gòu)造函數(shù)的初始化列表來獲得初始值。4、 const成員函數(shù)const成員函數(shù)的說明格式如下:類型說明符函數(shù)名(參數(shù)表)const;如:intGetYear()constreturnyear;const成員函數(shù)不能更新對(duì)象的數(shù)據(jù)成員,也不能調(diào)用對(duì)象的普通成員函數(shù)。const是函數(shù)類型的一個(gè)組成部分,因此在函數(shù)的實(shí)現(xiàn)部分也要帶關(guān)鍵字5、引用類型的數(shù)據(jù)成員引用類型的數(shù)據(jù)成員也只能通過構(gòu)造函數(shù)的初始化列表來進(jìn)行初始化。例classTestprivate:inta;constintb;/不能寫成constintb=10,因類的定義還沒分配空間int&c;/不能寫成constint&c=a,因變量a還沒分配空間public:Test(inti,intj,int&k):b(j),c(k)a=i;const 對(duì)象const 。Test():b(10),c(a)a=20;第4章派生類與繼承4.2派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)例:圓類Circle(繼承Point類的寫法)classCircle:publicPointprivate:double radius; /半徑public:Circle()Circle(intx,inty,doubler):Point(x,y)SetRadius(r);Circle(Pointp,doubler):Point(p)SetRadius(r);doubleGetRadius()constreturnradius;voidSetRadius(doubler)radius=(r>=0?r:0);voidSetValue(intx,inty,doubler)SetXY(x,y);SetRadius(r);doubleArea();voidShow();constdoublePI=3.14159;inlinedoubleCircle:Area()returnPI*radius*radius;voidCircle:Show()cout<<"圓心為:"Point:Show();cout<<"半徑為:"<<radius;關(guān)于基類和派生類的幾點(diǎn)說明1、派生類繼承了它的所有基類中除構(gòu)造函數(shù)和析構(gòu)函數(shù)之外的所有成員。2、在派生類中成員按訪問屬性劃分為四種:不可訪問的成員、私有成員、保護(hù)成員、公有成員。3、對(duì)從基類繼承下來的成員初始化工作是通過調(diào)用基類的構(gòu)造函數(shù)來完成的,調(diào)用方法是在派生類的構(gòu)造函數(shù)中用初始化列表。4、如果在派生類的構(gòu)造函數(shù)省略了基類的初始化列表,則將調(diào)用基類的缺省構(gòu)造函數(shù)。5、如果基類定義了帶有參數(shù)的構(gòu)造函數(shù)時(shí),派生類就應(yīng)當(dāng)定義構(gòu)造函數(shù),以便顯式地調(diào)用基類的構(gòu)造函數(shù)。6、如果派生類定義了與基類同名的新數(shù)據(jù)成員或成員函數(shù),則此派生類的成員就覆蓋了基類的同名成員,直接使用成員名只能訪問到派生類的成員。7、在同名覆蓋的情況下,可以使用基類名+作用域分辨符來訪問基類的同名成員。8、如果派生類和基類的某個(gè)成員函數(shù)重名,但參數(shù)表不同,仍然屬于覆蓋,不屬于重載。9、對(duì)派生類的對(duì)象,構(gòu)造函數(shù)的執(zhí)行過程是:先調(diào)用基類的構(gòu)造函數(shù)(按它們被繼承時(shí)聲明的順序),再調(diào)用內(nèi)嵌對(duì)象成員的構(gòu)造函數(shù)(按內(nèi)嵌對(duì)象聲明的順序),最后執(zhí)行自己的構(gòu)造函數(shù)體中的內(nèi)容。10、析構(gòu)函數(shù)的調(diào)用次序正好和構(gòu)造函數(shù)的調(diào)用次序相反。例:學(xué)生類Student/student.h#include"person.h"classStudent:publicPersonprotected:char*Department;intNumber;public:Student()Department=0;Number=0;Student(char*,int,char,char*,int);Student(Student&stu);Student()deleteDepartment;voidSetDep(char*);voidSetNum(intnum)Number=num;char*GetDep()constreturnDepartment;intGetNum()constreturnNumber;voidShow();/student.cpp#include"student.h"#include<iostream>usingnamespacestd;Student:Student(char*name,intage,charsex,char*dep,intnum):Person(name,age,sex)Department=newcharstrlen(dep)+1;strcpy(Department,dep);Number=num;Student:Student(Student&stu):Person(stu)Department=newcharstrlen(stu.Department)+1;strcpy(Department,stu.Department);Number=stu.Number;voidStudent:SetDep(char*dep)deleteDepartment;Department=newcharstrlen(dep)+1;strcpy(Department,dep);voidStudent:Show()Person:Show();cout<<"Department:"<<Department<<",Number:"<<Number<<endl;4.4多重繼承例1:X和Y是基類,Z從X和Y派生classXpublic:intb;X(intk)b=k;classYpublic:intc;Y(intk)c=k;classZ:publicX,publicYpublic:intd;Z(inti,intj,intk):X(i),Y(j)d=k;例2:X和Y都從W派生而來classWpublic:inta;W(intk)d=k;classX:publicWpublic:intb;X(inti,intk):W(i)b=k;classY:publicWpublic:intc;Y(inti,intk):W(i)c=k;classZ:publicX,publicYpublic:intd;Z(inti,intj,intk,intl):X(i,j),Y(i,k)d=l;intmain()Zt(10,20,30,40);cout<<t.X:a<<t.Y:a<<t.b<<t.c<<t.d<<endl;例3:將W做為X和Y的虛基類classWpublic:inta;W(intk)a=k;classX:virtualpublicWpublic:intb;X(inti,intk):W(i)b=k;classY:virtualpublicWpublic:intc;Y(inti,intk):W(i)c=k;classZ:publicX,publicYpublic:intd;Z(inti,intj,intk,intl):W(i),X(i,j),Y(i,k)d=l;intmain()Zt(10,20,30,40);cout<<t.a<<t.b<<t.c<<t.d<<endl;在使用虛基類機(jī)制時(shí)應(yīng)該注意以下幾點(diǎn):(1) 如果在虛基類中定義有帶形參的構(gòu)造函數(shù),并且沒有定義缺省形式的構(gòu)造函數(shù),則整個(gè)繼承結(jié)構(gòu)中,所有直接或間接的派生類都必須在構(gòu)造函數(shù)的成員初始化表中列出對(duì)虛基類構(gòu)造函數(shù)的調(diào)用,以初始化在虛基類中定義的數(shù)據(jù)成員。(2) 建立一個(gè)對(duì)象時(shí),如果這個(gè)對(duì)象中含有從虛基類繼承來的成員,則虛基類的成員是由最遠(yuǎn)派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進(jìn)行初始化的。該派生類的其他基類對(duì)虛基類構(gòu)造函數(shù)的調(diào)用都自動(dòng)被忽略。(3) 若同一層次中同時(shí)包含虛基類和非虛基類,應(yīng)先調(diào)用虛基類的構(gòu)造函數(shù),再調(diào)用非虛基類的構(gòu)造函數(shù),最后調(diào)用派生類構(gòu)造函數(shù);(4) 對(duì)于多個(gè)虛基類,構(gòu)造函數(shù)的執(zhí)行順序仍然是先左后右,自上而下;(5) 對(duì)于非虛基類,構(gòu)造函數(shù)的執(zhí)行順序仍是先左后右,自上而下;(6) 若虛基類由非虛基類派生而來,則仍然先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)。4.5賦值兼容規(guī)則所謂賦值兼容規(guī)則是指在需要基類對(duì)象的任何地方都可以使用公有派生類的對(duì)象來替代。附:線性表順序表classSeqListprivate:int*data;intsize;intMaxSize;public:SeqList(intsz=100);SeqList()deletedata;intLength()constreturnsize;boolIsEmpty()constreturnsize=0;voidInsert(constint&x,intk);voidDelete(intk);intGetData(intk)const;intFind(constint&x)const;voidShow()const;SeqList:SeqList(intsz)MaxSize=sz;data=newintMaxSize;size=0;voidSeqList:Insert(constint&x,intk)if(k<1|k>size+1)cerr<<"越界出錯(cuò)"exit(1);if(size=MaxSize)cerr<<"順序表已滿"exit(1);for(inti=size-1;i>=k-1;i-)datai+1=datai;datak-1=x;size+;voidSeqList:Delete(intk)if(size=0)cerr<<"順序表空"exit(1);if(k<1|k>size)cerr<<"越界出錯(cuò)"exit(1);for(inti=k;i<size;i+)datai-1=datai;size-;intSeqList:GetData(intk)constif(k<1|k>size)cerr<<"越界出錯(cuò)"exit(1);returndatak-1;intSeqList:Find(constint&x)constfor(inti=0;i<size;i+)if(datai=x)returni+1;return0;voidSeqList:Show()constfor(inti=0;i<size;i+)out<<datai<<""第5章多態(tài)性5.3運(yùn)算符重載例:復(fù)數(shù)類Complex/mycomplex.h#include<iostream>usingnamespacestd;classComplexprivate:doublere,im;public:Complex(doubler=0,doublei=0)re=r;im=i;doublereal()returnre;doubleimag()returnim;Complexoperator+()return*this;Complexoperator-()returnComplex(-re,-im);Complex&operator+=(Complex&);Complex&operator-=(Complex&);Complex&operator*=(Complex&);Complex&operator/=(Complex&);friendComplexoperator+(Complex&,Complex&);friendComplexoperator-(Complex&,Complex&);friendComplexoperator*(Complex&,Complex&);friendComplexoperator/(Complex&,Complex&);friendbooloperator=(Complex&,Complex&);friendbooloperator!=(Complex&,Complex&);friendostream&operator<<(ostream&,Complex&);friendistream&operator>>(istream&,Complex&);operatordouble()returnre;/mycomplex.cpp#include"mycomplex.h"#include<iostream>usingnamespacestd;Complex&Complex:operator+=(Complex&c)re+=c.re;im+=c.im;return*this;Complex&Complex:operator-=(Complex&c)re-=c.re;im-=c.im;return*this;Complex&Complex:operator*=(Complex&c)doublet=re*c.re-im*c.im;im=re*c.im+im*c.re;re=t;return*this;Complex&Complex:operator/=(Complex&c)doublem=c.re*c.re+c.im*c.im;doublet=(re*c.re+im*c.im)/m;im=(im*c.re-re*c.im)/m;re=t;return*this;Complexoperator+(Complex&a,Complex&b)returnComplex(a.re+b.re,a.im+b.im);Complexoperator-(Complex&a,Complex&b)returnComplex(a.re-b.re,a.im-b.im);Complexoperator*(Complex&a,Complex&b)returnComplex(a.re*b.re-a.im*b.im,a.re*b.im+a.im*b.re);Complexoperator/(Complex&a,Complex&b)doublem=b.re*b.re+b.im*b.im;returnComplex(a.re*b.re+a.im*b.im)/m,(a.im*b.re-a.re*b.im)/m);booloperator=(Complex&a,Complex&b)returna.re=b.re&&a.im=b.im;booloperator!=(Complex&a,Complex&b)returna.re!=b.re|a.im!=b.im;ostream&operator<<(ostream&os,Complex&c)os<<c.re<<'+'<<c.im<<'i'returnos;istream&operator>>(istream&is,Complex&c)is>>c.re>>c.im;returnis;例:分?jǐn)?shù)類Fraction#include<iostream>usingnamespacestd;classFractionprivate:intnum,den;voidreduce();public:Fraction(intn=0,intd=1);Fractionoperator+()return*this;Fractionoperator-()returnFraction(-num,den);Fraction&operator+=(Fraction&);Fraction&operator-=(Fraction&);Fraction&operator*=(Fraction&);Fraction&operator/=(Fraction&);Fraction&operator+();Fractionoperator+(int);operatordouble();friendFractionoperator+(Fraction&,Fraction&);friendFractionoperator-(Fraction&,Fraction&);friendFractionoperator*(Fraction&,Fraction&);friendFractionoperator/(Fraction&,Fraction&);friendbooloperator=(Fraction&,Fraction&);friendbooloperator!=(Fraction&,Fraction&);friendbooloperator<(Fraction&,Fraction&);friendbooloperator<=(Fraction&,Fraction&);friendbooloperator>(Fraction&,Fraction&);friendbooloperator>=(Fraction&,Fraction&);friendostream&operator<<(ostream&,Fraction&);friendistream&operator>>(istream&,Fraction&);#include"fraction.h"#include<iostream>usingnamespacestd;Fraction:Fraction(intn,intd)num=n;den=d;if(den=0)den=1;reduce();Fraction&Fraction:operator+=(Fraction&f)num=num*f.den+den*f.num;den=den*f.den;reduce();return*this;Fraction&Fraction:operator-=(Fraction&f)num=num*f.den-den*f.num;den=den*f.den;reduce();return*this;Fraction&Fraction:operator*=(Fraction&f)num=num*f.num;den=den*f.den;reduce();return*this;Fraction&Fraction:operator/=(Fraction&f)num=num*f.den;den=den*f.num;reduce();return*this;Fraction&Fraction:operator+()num+=den;return*this;FractionFraction:operator+(int)Fractiontemp=*this;num+=den;returntemp;Fraction:operatordouble()returnstatic_cast<double>(num)/den;Fractionoperator+(Fraction&x,Fraction&y)returnFraction(x.num*y.den+x.den*y.num,x.den*y.den);Fractionoperator-(Fraction&x,Fraction&y)returnFraction(x.num*y.den-x.den*y.num,x.den*y.den);Fractionoperator*(Fraction&x,Fraction&y)returnFraction(x.num*y.num,x.den*y.den);Fractionoperator/(Fraction&x,Fraction&y)returnFraction(x.num*y.den,x.den*y.num);booloperator=(Fraction&x,Fraction&y)return(x.num*y.den=x.den*y.num);booloperator!=(Fraction&x,Fraction&y)return!(x=y);booloperator<(Fraction&x,Fraction&y)return(x.num*y.den<x.den*y.num);booloperator<=(Fraction&x,Fraction&y)return!(y>x);booloperator>(Fraction&x,Fraction&y)return(y<x);booloperator>=(Fraction&x,Fraction&y)return!(x<y);ostream&operator<<(ostream&os,Fraction&f)returnos<<f.num<<'/'<<f.den;istream&operator>>(istream&is,Fraction&f)charch;is>>f.num>>ch>>f.den;returnis;intgcd(intm,intn)intk;while(n!=0)k=m%n;m=n;n=k;returnm;voidFraction:reduce()if(den<0)num=-num;den=-den;if(den=1)return;intsgn=num<0?-1:1;intg=gcd(sgn*num,den);num/=g;den/=g;例:在人類Person中增加重載賦值運(yùn)算符在Person.h中增加一個(gè)說明:Person&operator=(Person&);在Person.cpp中增加對(duì)該函數(shù)的定義Person&Person:operator=(Person&p)if(this=&p)return*this;deletename;name=newcharstrlen(p.name)+1;strcpy(name,p.name);age=p.age;sex=p.sex;return*this;5.4 類型轉(zhuǎn)換1、通過構(gòu)造函數(shù)將別的類型轉(zhuǎn)換為這個(gè)類的類型如復(fù)數(shù)Complex類的構(gòu)造函數(shù)Complex(doubler)re=r;2、通過轉(zhuǎn)換函數(shù)講這個(gè)類的類型轉(zhuǎn)換為別的類型如在復(fù)數(shù)Complex類中的轉(zhuǎn)換函數(shù)operatordouble()returnre;在分?jǐn)?shù)Fraction類中的轉(zhuǎn)換函數(shù)operatordouble()returnstatic_cast<double>(num)/den;用explicit關(guān)鍵字,可以禁止單個(gè)參數(shù)的構(gòu)造函數(shù)用于自動(dòng)類型轉(zhuǎn)換,如classStackexplicitStack(intsize);Explicit也同樣禁止用賦值來進(jìn)行帶有類型轉(zhuǎn)換的初始化行為如,不可以Stacks=10;5.5 虛函數(shù)1 、引入派生類后的對(duì)象指針例:classApublic:voidshow()cout<<"A"classB:publicApublic:voidshow()cout<<"B"intmain()Aa,*pc;8 b;pc=&a;pc->show();pc=&b;pc->show();輸出為AA2、虛函數(shù)的定義及使用例:引入虛函數(shù)后,上面的例子改為如下classApublic:virtualvoidshow()cout<<"A"classB:publicApublic:voidshow()cout<<"B"intmain()Aa,*pc;9 b;pc=&a;pc->show();pc=&b;pc->show();輸出為AB3、純虛函數(shù)和抽象類例:classApublic:virtualvoidshow()=0;classB:publicApublic:voidshow()cout<<"B"intmain()A*pc;Bb;pc=&b;pc->show();關(guān)于虛函數(shù),有以下幾點(diǎn)1、如果成員函數(shù)是通過引用或指針,而不是通過對(duì)象來調(diào)用,那么,如果沒有使用virtual,程序?qū)⒏鶕?jù)引用類型或指針類型來選擇方法;如果使用了virtual,程序?qū)⒏鶕?jù)引用或指針指向的對(duì)象的類型來選擇方法。2、如果要在派生類中重新定義基類的方法,則將它設(shè)置為虛擬方法,否則是指為非虛擬方法3、 如果使用指向?qū)ο蟮囊没蛑羔榿碚{(diào)用虛擬方法,程序?qū)⑹褂脼閷?duì)象類型定義的方法,而不使用為引用類型或指針類型定義的方法,這稱為動(dòng)態(tài)聯(lián)編或晚期聯(lián)編。4、 在基類方法的聲明中使用virtual可使該方法在基類以及所有的派生類中都是虛擬的。5、 一個(gè)未在派生類中定義的純虛函數(shù)仍舊還是一個(gè)純虛函數(shù),該派生類仍為一個(gè)抽象類。6、通常應(yīng)給基類提供一個(gè)虛擬析構(gòu)函數(shù),這樣,當(dāng)派生類對(duì)象結(jié)束時(shí),將先調(diào)用派生的析構(gòu)函數(shù),再調(diào)用基類的析構(gòu)函數(shù)。7、如果派生類沒有重新定義虛擬函數(shù),則將使用該函數(shù)的基類版本。8、如果重新定義繼承的方法,應(yīng)確保與原來的原型完全相同。但有一個(gè)例外,就是如果返回類型是基類指針或引用,則可改為指向派生類的指針或引用。

    注意事項(xiàng)

    本文(《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》教案)為本站會(huì)員(無***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

    溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




    關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

    copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

    備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


    本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

    欧美久久久一区二区三区,国产精品亚洲一区二区无码,亚洲国产精品综合久久20声音,亚洲国产精品无码久久久蜜芽
    <span id="plx27"><var id="plx27"></var></span>
    <dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>