版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
VisualC++實用教程第2章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)1教學(xué)目標(biāo):了解面向?qū)ο蟮幕靖拍?/p>
熟練掌握類、對象、派生類的定義和使用
掌握類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義和特點
能夠利用虛函數(shù)實現(xiàn)多態(tài)性熟悉友元的特性
2教學(xué)內(nèi)容:2.1面向?qū)ο蟮幕靖拍?.2類和對象的定義2.3繼承性和派生類2.4多態(tài)性2.5友元2.6模板32.1
面向?qū)ο蟮幕靖拍钣^點:自然界是由實體(對象)所組成。程序設(shè)計方法:使用面向?qū)ο蟮挠^點來描述、模仿并處理現(xiàn)實問題。要求:高度概括、分類、和抽象。目的:實現(xiàn)軟件設(shè)計的產(chǎn)業(yè)化。程序=多個對象+消息4類和對象對象是現(xiàn)實世界中一個實際存在的事物對象的靜態(tài)特征對象的行為類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個主要部分。對象之間的交互:發(fā)送消息5封裝封裝的目的是隱藏對象的內(nèi)部的實現(xiàn)細(xì)節(jié)。通過封裝,可以將對象的外部接口與內(nèi)部的實現(xiàn)細(xì)節(jié)分開。
目的是增強(qiáng)安全性和簡化編程,使用者不必了解具體的實現(xiàn)細(xì)節(jié),而只需要通過外部接口,以特定的訪問權(quán)限,來使用類的成員。6繼承繼承是C++中支持層次分類的一種機(jī)制,允許程序員在保持原有類特性的基礎(chǔ)上,對新類進(jìn)行更具體的說明。實現(xiàn):聲明派生類——2.37多態(tài)性多態(tài):同一名稱,不同的功能實現(xiàn)方式。目的:標(biāo)識統(tǒng)一,減少程序中標(biāo)識符的個數(shù);接口統(tǒng)一,增加程序的靈活性實現(xiàn):——2.4編譯時的多態(tài)性:重載函數(shù)運(yùn)行時的多態(tài)性:虛函數(shù)82.2類與對象的定義類是C++的靈魂,如果不真正掌握類,就不能真正掌握C++C++中的類就是一種用戶自己定義的數(shù)據(jù)類型,和其它數(shù)據(jù)類型不同的是,組成這種類型的不僅可以有數(shù)據(jù),而且可以有對數(shù)據(jù)進(jìn)行操作的函數(shù)。為了封裝的需要,一般將類的定義放在一個.h文件中,而將類的成員函數(shù)的實現(xiàn)放在一個.cpp文件中。92.2.1類的定義class類名稱{
public:
公有成員(外部接口)
private:
私有成員
protected:
保護(hù)成員};類與外部的接口只允許本類中的函數(shù)訪問(可省略)只能由本類及其派生類的成員函數(shù)訪問是必需的成員訪問說明符10例2.1:圓類的定義見教材24頁11類的數(shù)據(jù)成員(成員變量):與一般的變量聲明相同,但需要將它放在類的聲明體中,一般為私有訪問屬性。類的成員函數(shù)定義:在類中說明原型,類外給出函數(shù)體實現(xiàn),函數(shù)名之前必須加類名和作用域區(qū)分符限定將成員函數(shù)定義為內(nèi)聯(lián)函數(shù):成員函數(shù)在類的內(nèi)部定義,此時無須使用inline關(guān)鍵字,成員函數(shù)自動為內(nèi)聯(lián)函數(shù)。成員函數(shù)在類內(nèi)聲明,在類外定義。但在類外定義時,要加關(guān)鍵字inline。定義與聲明放在同一.h文件中。說明:12const成員函數(shù)const成員函數(shù):不修改數(shù)據(jù)成員的值,在程序中如果不小心修改了這個成員函數(shù)中的對象,則編譯器會產(chǎn)生一個語法錯誤信息。const成員函數(shù)的定義方法:在函數(shù)的原型和定義中,在函數(shù)參數(shù)表和函數(shù)定義的左花括號之間加入const關(guān)鍵字。類的成員函數(shù)允許重載,允許帶缺省參數(shù)值。132.2.2構(gòu)造函數(shù)性質(zhì):與類同名、無返回類型在對象創(chuàng)建時由系統(tǒng)自動調(diào)用允許重載、帶缺省值如果類中未聲明,則系統(tǒng)自動生成一個缺省形式的構(gòu)造函數(shù),形如:類名(){}作用:對象的初始化14構(gòu)造函數(shù)舉例---CCircle類classCCircle{public:
CCircle()//無參(缺?。?gòu)造函數(shù)
{ radius=1;}CCircle(doubler)//帶參構(gòu)造函數(shù)
……private: doubleradius;};CCircle::CCircle(doubler){radius=r>0?r:1;}兩個構(gòu)造函數(shù)合成一個帶缺省值的構(gòu)造函數(shù)CCircle(doubler=1);//構(gòu)造函數(shù)原型CCircle::CCircle(doubler)//構(gòu)造函數(shù)定義{radius=r>0?r:1; }15拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類對象的引用。class類名{public:
類名(形參);//構(gòu)造函數(shù)類名(類名&對象名);//拷貝構(gòu)造函數(shù)
……};類名::類名(類名&對象名)//拷貝構(gòu)造函數(shù)的實現(xiàn){函數(shù)體}16拷貝構(gòu)造函數(shù)舉例classCCircle{public:
CCircle(floatm=1,floatn=1,floatr=1);
CCircle(constCCircle&c)//拷貝構(gòu)造函數(shù)
{ radius=c.radius; }……};17當(dāng)用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調(diào)用它實現(xiàn)對象的拷貝賦值。voidmain(){
CCirclec1;
CCircle
c2(c1);//拷貝構(gòu)造函數(shù)被調(diào)用}拷貝構(gòu)造函數(shù)調(diào)用之一18拷貝構(gòu)造函數(shù)調(diào)用之二若函數(shù)的形參為類對象按值傳遞時,實參賦值給形參,將自動調(diào)用復(fù)制構(gòu)造函數(shù),例如:voidfun1(CCirclec){
cout<<c.GetRadius()<<endl;}voidmain(){
CCirclec1(2,2,10);fun1(c1);//調(diào)用復(fù)制構(gòu)造函數(shù)
}
19當(dāng)函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用復(fù)制構(gòu)造函數(shù)。例如:CCirclefun2(){
CCirclec2(10);returnc2;//調(diào)用復(fù)制構(gòu)造函數(shù)}voidmain(){
CCirclec3;c3=fun2();}拷貝構(gòu)造函數(shù)調(diào)用之三20對于任何類,如果程序員沒有定義拷貝構(gòu)造函數(shù),則系統(tǒng)自動生成一個拷貝構(gòu)造函數(shù),這種拷貝構(gòu)造函數(shù)在執(zhí)行時,只是進(jìn)行簡單的成員復(fù)制,這對于含有指針成員的類是非常危險的,在這種情況下,必須自定義拷貝構(gòu)造函數(shù)??截悩?gòu)造函數(shù)說明212.2.3析構(gòu)函數(shù)作用:是釋放對象所占的動態(tài)內(nèi)存空間。
特點:函數(shù)名:~類名();沒有參數(shù),也不返回任何值不允許重載如果類中未定義析構(gòu)函數(shù),編譯器將自動生成一個缺省的析構(gòu)函數(shù)。形如:~類名(){}22在下列兩種情況下會被自動調(diào)用:
對象定義在一個函數(shù)體中,該函數(shù)調(diào)用結(jié)束后,自動調(diào)用析構(gòu)函數(shù);用new生成的動態(tài)對象,當(dāng)使用delete刪除時,自動調(diào)用析構(gòu)函數(shù)。通常利用析構(gòu)函數(shù)刪除對象中指針成員所指向的動態(tài)存儲空間,當(dāng)類中沒有指針成員時,則不需要定義析構(gòu)函數(shù)。析構(gòu)函數(shù)的調(diào)用232.2.4對象的定義和使用類的對象是該類的某一特定實體,即類類型的變量。聲明形式:
類名對象名;例:
CCircleC1;
CCircle*pCircle;
CCircle
ArrayCircle[3];24類成員的訪問方式類內(nèi)成員互訪直接使用成員名可以訪問任意屬性成員類外訪問只能訪問
public
屬性的成員使用“對象名.成員名”方式使用“對象指針名->成員名”方式25classTime{public:
inthour;
intminute;};Timet,*p;p=&t;cout<<p->hour;p->hour(*p).hourt.hour26this指針在C++中為每個非靜態(tài)成員函數(shù)提供了一個名字為this的指針,當(dāng)進(jìn)行成員函數(shù)調(diào)用時,系統(tǒng)自動將調(diào)用此成員函數(shù)的對象的地址作為一個隱含的參數(shù)傳遞給this指針,即讓this指針指向調(diào)用此成員函數(shù)的對象,從而使成員函數(shù)知道該對哪個對象進(jìn)行操作。使用this指針,保證了每個對象可以擁有不同的數(shù)據(jù)成員,但處理這些數(shù)據(jù)成員的代碼可以被所有的對象共享。27例2.2類的應(yīng)用舉例(教材28頁)一圓型游泳池如圖所示,現(xiàn)需要在其周圍建一圓型過道,并在其四周圍上柵欄。柵欄價格為35元/米,過道造價為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸入。要求編程計算并輸出過道和柵欄的造價。游泳池過道282.2.5靜態(tài)類成員
創(chuàng)建了一個對象,則這個對象將擁有所有類中的成員,如果某個數(shù)據(jù)對所有對象都一樣,則這個數(shù)據(jù)只要有一個拷貝,而不是每個對象都重復(fù)定義這個數(shù)據(jù),形成內(nèi)存浪費。簡言之:一個數(shù)據(jù)拷貝,所有對象共享。這時可以使用靜態(tài)數(shù)據(jù)成員。靜態(tài)類成員:使用關(guān)鍵字static進(jìn)行修飾的類成員。靜態(tài)類成員可以聲明為public、private或
protected。
291、靜態(tài)數(shù)據(jù)成員表示的是類范圍中所有對象共享的信息,相當(dāng)于局部于類中的“全局變量”,為該類的所有對象共享。因為靜態(tài)數(shù)據(jù)成員只有一個數(shù)據(jù)副本,所以可以節(jié)省存儲空間。2、靜態(tài)數(shù)據(jù)成員必須在文件作用域內(nèi)進(jìn)行初始化,而且只能初始化一次。1、靜態(tài)數(shù)據(jù)成員3、由于數(shù)據(jù)隱藏的需要,靜態(tài)數(shù)據(jù)成員通常被聲明為
私有的,而通過定義公有的靜態(tài)成員函數(shù)來訪問靜態(tài)數(shù)據(jù)成員。30靜態(tài)數(shù)據(jù)成員的定義和初始化classCCircle{public:……private:……
staticint
NumOfObject;//程序中生成的對象的個數(shù)};intCCircle::NumOfObject=0;//靜態(tài)數(shù)據(jù)成員的初始化31
靜態(tài)成員函數(shù):是用關(guān)鍵字static進(jìn)行修飾的成員函數(shù)。
靜態(tài)成員函數(shù)沒有this指針,因此當(dāng)其訪問非靜態(tài)數(shù)據(jù)成員時,必須通過對象名或?qū)ο笾羔樤L問。2、靜態(tài)成員函數(shù)定義格式:static成員函數(shù)的原型;32使用靜態(tài)類成員(教材30頁)
3、靜態(tài)成員的訪問在類內(nèi):可直接訪問。在類外:只能訪問公有靜態(tài)成員類名::成員名(常用)對象名.成員名(.和->)332.3繼承性和派生類繼承是面向?qū)ο蟪绦蛟O(shè)計的最重要的特點之一,是軟件重用的一種重要形式,是對實際問題中分層特性的一種自然描述。繼承的實質(zhì):是從已有的類建立新類。通過繼承,派生類自動擁有基類的所有成員(數(shù)據(jù)成員和成員函數(shù))基類和派生類單繼承和多繼承
342.3.1派生類的定義class派生類名:繼承方式基類名{
成員聲明;};35繼承方式三種繼承方式:public(公有)、
private(私有)、
protected(保護(hù)),
表2-1繼承方式對派生類的影響繼承方式說
明public(公有)基類的public和protected成員被派生類繼承后,保持原來的訪問屬性不變private(私有)基類的public和protected成員被派生類繼承后,變成派生類的private成員protected(保護(hù))基類的public和protected成員被派生類繼承后,變成派生類的protected成員36例2.3
類的派生示例教材31頁
372.3.2派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)基類的構(gòu)造函數(shù)不能被繼承,需要在派生類中負(fù)責(zé)基類成員的初始化。通過在成員初始化表中顯式調(diào)用基類的構(gòu)造函數(shù)來實現(xiàn)的單一繼承時的構(gòu)造函數(shù)派生類名::派生類名(基類成員和本類成員所需的形參):基類名(實參){
本類成員初始化;}38派生類構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序在創(chuàng)建派生類的對象時,派生類的構(gòu)造函數(shù)總是先調(diào)用其基類的構(gòu)造函數(shù)來完成基類成員的初始化。如果在基類和派生類中都包含其他類的對象(即有對象成員),則在創(chuàng)建派生類的對象時,首先執(zhí)行基類的對象成員的構(gòu)造函數(shù),接著執(zhí)行基類的構(gòu)造函數(shù),然后執(zhí)行派生類的對象成員的構(gòu)造函數(shù),最后才執(zhí)行派生類的構(gòu)造函數(shù)。當(dāng)派生類對象的生命周期結(jié)束時,析構(gòu)函數(shù)的執(zhí)行順序和構(gòu)造函數(shù)的執(zhí)行順序正好相反。392.3.3多繼承如果一個派生類有多個直接基類,則稱為多繼承。多繼承意味著一個派生類可以繼承多個基類的成員,這種強(qiáng)大的功能支持了軟件的重用性,但可能會引起大量的二義性(歧義性)問題。
401.多繼承的定義格式class<派生類名>:[<繼承方式>]<基類名>,[<繼承方式>]<基類名>,…{[<派生類的成員>]};其中,繼承方式的使用與單繼承完全相同?!纠?.4】使用多繼承(教材35頁)412.多繼承派生類對象的初始化派生類構(gòu)造函數(shù)名(總參數(shù)表列):基類1構(gòu)造函數(shù)(參數(shù)列表),基類2構(gòu)造函數(shù)(參數(shù)列表),基類3構(gòu)造函數(shù)(參數(shù)列表){派生類中新增數(shù)據(jù)成員初始化語句}先調(diào)用基類的構(gòu)造函數(shù),再執(zhí)行派生類構(gòu)造函數(shù)的函數(shù)體。調(diào)用基類構(gòu)造函數(shù)的順序是按照聲明派生類時基類出現(xiàn)的順序。423.二義性問題因不同基類中可能含有同名成員引起的二義性:用基類名加以限定,形如:基類名::同名成員名,以明確指出所使用的成員是從哪個基類繼承來的。因公共基類使得派生類中含有同名成員,因此也會產(chǎn)生二義性。為了消除這種二義性,也必須使用基類名限定所訪問的同名成員。43虛基類解決多繼承中因公共基類而產(chǎn)生的二義性問題。聲明虛基類的一般格式為:class<派生類名>:virtual[<繼承方式>]<基類名>{[<派生類的成員>]};保留字virtual和繼承方式的相對位置無關(guān)緊要,但要放在基類名之前,并且virtual只對緊跟其后的基類名起作用。442.4多態(tài)性在面向?qū)ο蟮某绦蛟O(shè)計中,把不同類的對象收到相同的消息時產(chǎn)生多種不同的行為方式稱為多態(tài)性。452.4.1兩種多態(tài)性聯(lián)編:將一個函數(shù)調(diào)用鏈接上相應(yīng)于函數(shù)體的代碼,這一過程稱為函數(shù)聯(lián)編(簡稱聯(lián)編)。靜態(tài)聯(lián)編:在編譯階段完成;優(yōu)點是執(zhí)行速度快動態(tài)聯(lián)編:在運(yùn)行時才能把函數(shù)調(diào)用與函數(shù)體聯(lián)系在一起。具有靈活性高,易于擴(kuò)充和維護(hù)等優(yōu)點,但運(yùn)行效率較低。靜態(tài)聯(lián)編所支持的多態(tài)性稱為編譯時的多態(tài)性,通過函數(shù)重載來實現(xiàn)。動態(tài)聯(lián)編所支持的多態(tài)性稱為運(yùn)行時的多態(tài)性,通過虛函數(shù)來實現(xiàn)。462.4.2編譯時的多態(tài)性【例2.6】編譯時的多態(tài)性(教材39頁)472.4.3虛函數(shù)虛函數(shù)是實現(xiàn)動態(tài)聯(lián)編的基礎(chǔ)。虛函數(shù)的聲明:在函數(shù)原型之前加virtual。class<類名>{public:
//虛函數(shù)的聲明
virtual<返回類型><函數(shù)名>(<參數(shù)表>);};
//虛函數(shù)的定義<返回類型><類名>::<函數(shù)名>(<參數(shù)表>)
{…...}
48應(yīng)注意的問題:應(yīng)該在類層次結(jié)構(gòu)中需要多態(tài)性的最高層類內(nèi)聲明虛函數(shù)。派生類中與基類虛函數(shù)原型完全相同的成員函數(shù),會自動成為虛函數(shù)。不能把靜態(tài)成員函數(shù)、構(gòu)造函數(shù)和全局函數(shù)聲明為虛函數(shù)。析構(gòu)函數(shù)可以聲明為虛函數(shù)。通過聲明虛函數(shù)來使用C++提供的多態(tài)性機(jī)制時,派生類應(yīng)該從它的基類公有派生。
492.使用虛函數(shù)必須合理調(diào)用虛函數(shù)才能實現(xiàn)動態(tài)聯(lián)編。只有使用基類類型的指針或引用調(diào)用虛函數(shù)時,系統(tǒng)才以動態(tài)聯(lián)編方式實現(xiàn)對虛函數(shù)的調(diào)用,才能獲得運(yùn)行時的多態(tài)性。通常都用指向第一次定義虛函數(shù)的基類對象的指針或引用來調(diào)用虛函數(shù)。虛函數(shù)的使用(教材41頁)503.純虛函數(shù)純虛函數(shù):在聲明時“初始化值”為0的函數(shù)。class<類名>{public:virtual<返回類型><函數(shù)名>(<參數(shù)表>)=0;};純虛函數(shù)不需要進(jìn)行定義51抽象類帶有純虛函數(shù)的類稱為抽象類。不能聲明抽象類的對象,但可以聲明抽象類的指針和引用。抽象類只能作為基類來使用。522.5友元類的重要特性是對數(shù)據(jù)實現(xiàn)了封裝和隱藏,這樣能大大提高程序的質(zhì)量,特別是能夠提高軟件的可維護(hù)性。封裝也會帶來一些不便。如果在程序中為了訪問對象的私有數(shù)據(jù)成員而頻繁調(diào)用公有成員函數(shù)時,將會帶來較大開銷,從而降低程序的執(zhí)行效率,影響程序的性能。C++中引入了友元機(jī)制,一個類可以賦予某些函數(shù)或類(友元函數(shù)或友元類)訪問它的私有成員的特權(quán),從而減少了開銷。532.5.1友元函數(shù)能夠訪問一個類的私有部分而又不是該類成員函數(shù)的函數(shù),稱為該類的友元函數(shù)。將一個函數(shù)聲明為類的友元,就是在類定義中該函數(shù)的原型前面加上關(guān)鍵字friend。如下所示:classA{friendvoidsetX(A&,int
);…};54友元函數(shù)說明友元函數(shù)雖然在類內(nèi)聲明,但它不是該類的成員函數(shù),所以友元函數(shù)沒有this指針。友元關(guān)系的聲明與成員訪問說明符private、protected和public無關(guān),因此友元函數(shù)聲明可以放在類定義中的任何地方?!纠?.8】使用友元函數(shù)計算兩點間的距離。55友元成員一個類的成員函數(shù)也可以聲明為另一個類的友元函數(shù)。把類C1的成員函數(shù)func聲明為類C2的友元函數(shù):classC1{
…voidfunc(…);
…};classC2{friendvoidC1::func(…);//聲明友元成員
…};voidC1::func(…)
//定義友元成員{…}562.5.2友元類如果一個類的所有成員函數(shù)都可以訪問另一個類的私有成員,則可以把這個類聲明為另一個類的友元類。例如,把類C1聲明為類C2的友元類:
classC2{friendclassC1;
…};【例2.9】使用友元類(教材47頁)572.6模板模板是C++實現(xiàn)軟件重用的一種形式,是C++最強(qiáng)大的特性之一。利用模板,我們可以用一段代碼指定一組相關(guān)函數(shù)(稱為模板函數(shù))或一組相關(guān)類(稱為模板類)。這樣能大幅度地節(jié)約程序代碼,顯著減少冗余信息,從而進(jìn)一步提高面向?qū)ο蟪绦虻目芍赜眯院涂删S護(hù)性。模板的功能很強(qiáng),用戶既可以定義類模板,也可以定義函數(shù)模板,還可以使用C++標(biāo)準(zhǔn)模板庫(STL)中已有的模板。
582.6.1函數(shù)模板如果幾個函數(shù)的功能相同,實現(xiàn)算法也相同,只是所處理的數(shù)據(jù)的類型不同,使用函數(shù)模板更簡潔,更方便。1.函數(shù)模板的定義
template<class<數(shù)據(jù)類型參數(shù)表>>
函數(shù)模板定義體59說明template是C++的保留字,表示后面定義的是一個模板。<數(shù)據(jù)類型參數(shù)表>形如<classT1,classT2,…>,T1,T2等是類型參數(shù)(形式參數(shù)),函數(shù)模板定義體與普通函數(shù)的定義相同,只不過其中的有些數(shù)據(jù)類型,例如返回值類型,形參的類型,局部變量的類型等,要使用類型參數(shù)表中的標(biāo)識符T1,T2等表示。602.函數(shù)模板的調(diào)用函數(shù)模板的調(diào)用格式有兩種:第一種格式:函數(shù)模板名(實參表)第二種格式:函數(shù)模板名<類型實參
>(實參表)函數(shù)模板的調(diào)用過程:函數(shù)模板實例化,把模板的類型參數(shù)T1,T2等用具體的數(shù)據(jù)類型去替換。函數(shù)模板實例化后會得到一個具體的函數(shù),該函數(shù)稱為模板函數(shù)。執(zhí)行模板函數(shù),完成所需要的功能?!纠?.10】利用函數(shù)模板實現(xiàn)求兩個數(shù)據(jù)的較大值。(教材50頁)613.函數(shù)模板的特點函數(shù)模板實際上代表了一組函數(shù),而不是一個具體函數(shù)。所以,函數(shù)模板必須先實例化,才能完成具體函數(shù)的功能。函數(shù)模板不具有隱式類型轉(zhuǎn)換的能力。普通函數(shù)在進(jìn)行調(diào)用時,如果實參的類型與形參的類型不同,則系統(tǒng)會自動對參數(shù)類型進(jìn)行隱式轉(zhuǎn)換,將實參的值轉(zhuǎn)換為函數(shù)所需的類型(實際上是生成一個臨時值使用),然后再進(jìn)行函數(shù)調(diào)用。而函數(shù)模板不具有這種功能。
622.6.2類模板1.定義類模板(1)定義類template<class<類型參數(shù)表>>class<類名>{…};(2)定義成員函數(shù)632.使用類模板類模板與函數(shù)模板一樣,也是代表一組類。因此在使用類模板時首先要把它實例化為一個具體的類,這個具體的類稱為模板類。把類模板實例化為模板類的格式如下:類名<具體數(shù)據(jù)類型名>然后用模板類聲明對象并使用這些對象完成所需要的功能。64#include<iostream>usingnamespacestd;template<classnumtype>classCompare{public:
Compare(numtype
a,numtypeb){x=a;y=b;}
numtypemax(){return(x>y)?x:y;}
numtypemin(){return(x<y)?x:y;}private:
numtype
x,y;};65intmain(){Compare<int>cmp1(3,7);
cout<<cmp1.max()<<"istheMaximumoftwointedernumbers."<<endl;
cout<<cmp1.min()<<"istheMinimumoftwointedernumbers."<<endl<<endl;Compare<float>cmp2(45.78,93.6);
cout<<cmp2.max()<<"istheMaximumoftwofloatnumbers."<<endl;
cout<<cmp2.min()<<"istheMinimumoftwofloatnumbers."<<endl<<endl;Compare<char>cmp3('a','A');
cout<<cmp3.max()<<"istheMaximumoftwocharacters."<<endl;
cout<<cmp3.min()<<"istheMinimumoftwocharacters."<<endl;return0;}663.模板與繼承(1)從類模板派生出類模板
template<classT>classCBase{
…};template<classT>classCDerived
:publicCBase<T>{
…};(2)從類模板派生出普通類template<classT>classCBase{
…};classCDerived
:publicCBase<int>{
…};67——獲取水仙花數(shù)
1.項目要求編寫一個程序,獲取指定數(shù)是否為水仙花數(shù)。水仙花數(shù)應(yīng)該滿足下面條件:一個3位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是一個水仙花數(shù),因為153=13+53+33。該程序要求可以判斷用戶輸入的數(shù)是否為水仙花數(shù),也可以獲取指定范圍內(nèi)的數(shù)(在100至10000內(nèi))是否為水仙花數(shù)。2.項目分析如果判斷一個數(shù)是否是水仙花數(shù),需要獲取該數(shù)每位的數(shù)值。這可以通過求余數(shù)的方法獲取每位的數(shù)值,然后獲取每位的立方并求和。通過將和值與該數(shù)進(jìn)行比較,可以判斷該數(shù)是否為水仙花數(shù)。
68——獲取水仙花數(shù)
3.項目實現(xiàn)創(chuàng)建一個工程Exam,該程序由類Data判斷數(shù)是否為水仙花數(shù),并輸出。這就需要創(chuàng)建類Data,該類擁有兩個私有屬性:num和ntype。num為用戶輸入的數(shù),ntype為用戶選擇的操作類型。ntype有以下兩種類型。判斷用戶輸入的數(shù)是否為水仙花數(shù)。獲取指定范圍內(nèi)(在100~10000內(nèi))的水仙花數(shù)。
69類Data含有5個成員函數(shù),說明如下。Data(intnum):Data構(gòu)造函數(shù),參數(shù)num為用戶輸入的數(shù)。該函數(shù)需要初始化ntype為1。Data():Data構(gòu)造函數(shù),獲取指定范圍內(nèi)(在100~10000內(nèi))的水仙花數(shù)。該函數(shù)需要初始化ntype為2。GetResult():函數(shù)依據(jù)ntype執(zhí)行相應(yīng)的操作,并輸出結(jié)果。IsSpecial(int
nNum):判斷nNum是否為水仙花數(shù),是則返回t
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版二次供水工程節(jié)水改造合同書2篇
- 2024年度實現(xiàn)產(chǎn)品升級的勞動合同示例3篇
- 2024年內(nèi)地居民離婚登記手續(xù)辦理合同2篇
- 2024版影視明星經(jīng)紀(jì)合同5篇
- 2024年混凝土澆筑工程承包具體合同樣本版B版
- 2024年度國際人才招聘與派遣服務(wù)合同3篇
- 2024年團(tuán)隊出境旅游全程導(dǎo)游專業(yè)講解合同3篇
- 2024年度日常保潔服務(wù)合同范本(含節(jié)能環(huán)保技術(shù))3篇
- DVT的治療及預(yù)防
- 2024全新市政工程堡坎施工承包合同范本下載2篇
- 建筑防雷與接地-等電位連接
- 四川音樂學(xué)院附屬中等音樂學(xué)校輔導(dǎo)員招聘考試真題2023
- 2024行政法與行政訴訟法論述題
- 國際貨運(yùn)代理業(yè)現(xiàn)狀及發(fā)展對策分析-以KX公司為例
- 施工現(xiàn)場安全文明施工管理處罰細(xì)則
- 重慶洪崖洞旅游營銷策劃
- 消費者調(diào)查訪談提綱模板
- 山東建筑大學(xué)混凝土結(jié)構(gòu)原理期末考試復(fù)習(xí)題
- 消化道腫瘤的診斷和治療
- 護(hù)理病例報告范文5篇
- 班主任基本功大賽:模擬情景題及參考答案匯編(小學(xué)組)
評論
0/150
提交評論