<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>
  • 歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
    裝配圖網(wǎng)
    ImageVerifierCode 換一換
    首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > PPT文檔下載  

    c++面向?qū)ο蟪绦蛟O(shè)計(jì)

    • 資源ID:33436099       資源大?。?span id="x0a8llh" class="font-tahoma">1.88MB        全文頁(yè)數(shù):417頁(yè)
    • 資源格式: PPT        下載積分:15積分
    快捷下載 游客一鍵下載
    會(huì)員登錄下載
    微信登錄下載
    三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
    二維碼
    微信掃一掃登錄
    下載資源需要15積分
    郵箱/手機(jī):
    溫馨提示:
    用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
    支付方式: 支付寶    微信支付   
    驗(yàn)證碼:   換一換

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

    c++面向?qū)ο蟪绦蛟O(shè)計(jì)

    面向?qū)ο蟮乃枷胱畛醭霈F(xiàn)于挪威奧斯陸大學(xué)和挪面向?qū)ο蟮乃枷胱畛醭霈F(xiàn)于挪威奧斯陸大學(xué)和挪威計(jì)算機(jī)中心共同研制的威計(jì)算機(jī)中心共同研制的Simula 67語(yǔ)言中,隨著的語(yǔ)言中,隨著的Smalltalk-76和和8080語(yǔ)言推出,面向?qū)ο蟮牡某绦蛟O(shè)計(jì)語(yǔ)言推出,面向?qū)ο蟮牡某绦蛟O(shè)計(jì)方法得到了比較完善的實(shí)現(xiàn)。方法得到了比較完善的實(shí)現(xiàn)。 此后,面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)此后,面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā),擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng),交互式界面,分和軟件開(kāi)發(fā),擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng),交互式界面,分布式系統(tǒng),網(wǎng)絡(luò)管理結(jié)構(gòu)和人工智能等領(lǐng)域。布式系統(tǒng),網(wǎng)絡(luò)管理結(jié)構(gòu)和人工智能等領(lǐng)域。 數(shù)據(jù)抽象數(shù)據(jù)抽象 一種設(shè)計(jì)方法一種設(shè)計(jì)方法 把一組數(shù)據(jù)及作用與其上的操作組成一把一組數(shù)據(jù)及作用與其上的操作組成一個(gè)設(shè)計(jì)實(shí)體或單位。接口說(shuō)明外部可見(jiàn),其個(gè)設(shè)計(jì)實(shí)體或單位。接口說(shuō)明外部可見(jiàn),其實(shí)現(xiàn)是隱蔽的,不可見(jiàn)的。實(shí)現(xiàn)是隱蔽的,不可見(jiàn)的。發(fā)展的三個(gè)階段發(fā)展的三個(gè)階段01010101100100IntegerRealBoolean用戶用戶定義定義抽象數(shù)抽象數(shù)據(jù)類(lèi)型據(jù)類(lèi)型抽象數(shù)據(jù)類(lèi)型抽象數(shù)據(jù)類(lèi)型 抽象數(shù)據(jù)類(lèi)型是指抽象數(shù)據(jù)類(lèi)型是指“一個(gè)值集和作用在一個(gè)值集和作用在該值集上的操作集該值集上的操作集”。抽象數(shù)據(jù)類(lèi)型的定義。抽象數(shù)據(jù)類(lèi)型的定義只決定于其邏輯特性,與其具體的計(jì)算機(jī)內(nèi)只決定于其邏輯特性,與其具體的計(jì)算機(jī)內(nèi)部實(shí)現(xiàn)無(wú)關(guān)。一個(gè)抽象數(shù)據(jù)類(lèi)型可以分解為部實(shí)現(xiàn)無(wú)關(guān)。一個(gè)抽象數(shù)據(jù)類(lèi)型可以分解為語(yǔ)法、語(yǔ)義、表示和算法語(yǔ)法、語(yǔ)義、表示和算法4個(gè)部分。個(gè)部分。功能抽象功能抽象模塊模塊數(shù)據(jù)抽象數(shù)據(jù)抽象模塊模塊抽象數(shù)據(jù)類(lèi)型的實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型的實(shí)現(xiàn)實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型需要借助于高級(jí)程序設(shè)計(jì)實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型需要借助于高級(jí)程序設(shè)計(jì)語(yǔ)言;語(yǔ)言;在面向過(guò)程的語(yǔ)言中,用戶可以自己定義數(shù)在面向過(guò)程的語(yǔ)言中,用戶可以自己定義數(shù)據(jù)類(lèi)型;據(jù)類(lèi)型;在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中,借助于對(duì)象在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中,借助于對(duì)象描述抽象數(shù)據(jù)類(lèi)型。描述抽象數(shù)據(jù)類(lèi)型。(Class)問(wèn)題求解問(wèn)題求解面向?qū)ο笤O(shè)計(jì)方法:實(shí)現(xiàn)問(wèn)題空間和問(wèn)題求面向?qū)ο笤O(shè)計(jì)方法:實(shí)現(xiàn)問(wèn)題空間和問(wèn)題求解空間的近似和直接模擬。解空間的近似和直接模擬。意識(shí)部分意識(shí)部分教室教室物質(zhì)部分物質(zhì)部分303303教室教室抽象部分抽象部分教室類(lèi)教室類(lèi)具體部分具體部分一個(gè)對(duì)象:教室實(shí)例一個(gè)對(duì)象:教室實(shí)例現(xiàn)實(shí)問(wèn)題空間現(xiàn)實(shí)問(wèn)題空間解空間解空間封裝機(jī)制封裝機(jī)制基于消息的通信基于消息的通信繼承機(jī)制繼承機(jī)制多態(tài)機(jī)制多態(tài)機(jī)制 理解面向?qū)ο蟮幕靖拍顚?duì)于學(xué)習(xí)和掌握面向理解面向?qū)ο蟮幕靖拍顚?duì)于學(xué)習(xí)和掌握面向?qū)ο蟮拈_(kāi)發(fā)方法是十分重要的。對(duì)象的開(kāi)發(fā)方法是十分重要的。 類(lèi)類(lèi)(ClassClass)對(duì)象對(duì)象( (Object)Object)實(shí)例實(shí)例( (Instance)Instance)( (Polymorphism)Polymorphism)繼承繼承(InheritanceInheritance)消息消息( (Message)Message)封裝封裝(Encapsulation)(Encapsulation)把客觀世界從概念上看成是一個(gè)由相互配合而協(xié)把客觀世界從概念上看成是一個(gè)由相互配合而協(xié)作的對(duì)象所組成的系統(tǒng)作的對(duì)象所組成的系統(tǒng)面向?qū)ο竺嫦驅(qū)ο?對(duì)象對(duì)象+分類(lèi)分類(lèi)+繼承繼承+通信通信一個(gè)實(shí)例一個(gè)實(shí)例椅子椅子對(duì)象:桌子對(duì)象:桌子價(jià)格價(jià)格尺寸尺寸重量重量位置位置顏色顏色類(lèi):家具類(lèi):家具對(duì)象:椅子對(duì)象:椅子價(jià)格價(jià)格尺寸尺寸重量重量位置位置顏色顏色買(mǎi)賣(mài)移動(dòng)買(mǎi)買(mǎi)賣(mài)賣(mài)移動(dòng)移動(dòng)買(mǎi)買(mǎi)賣(mài)賣(mài)移動(dòng)移動(dòng)價(jià)格價(jià)格尺寸尺寸重量重量位置位置顏色顏色對(duì)象對(duì)象對(duì)象對(duì)象( (Object)Object)對(duì)象是用來(lái)描述客觀存在的事物,它是構(gòu)成對(duì)象是用來(lái)描述客觀存在的事物,它是構(gòu)成系統(tǒng)的基本單位,是對(duì)客觀世界中事物的抽系統(tǒng)的基本單位,是對(duì)客觀世界中事物的抽象描述。象描述。 對(duì)象對(duì)象 行為(功能、方法、服務(wù))行為(功能、方法、服務(wù)) 屬性(數(shù)據(jù))屬性(數(shù)據(jù))屬性屬性行為行為接口接口對(duì)象對(duì)象對(duì)象對(duì)象對(duì)象對(duì)象對(duì)象是由私有數(shù)據(jù)(屬性)及作用于其上的一組操作(行對(duì)象是由私有數(shù)據(jù)(屬性)及作用于其上的一組操作(行為)所構(gòu)成的一個(gè)封閉整體為)所構(gòu)成的一個(gè)封閉整體由于對(duì)象的數(shù)據(jù)是私有的,所以要想訪問(wèn)其數(shù)據(jù)的正確方法是向該對(duì)象發(fā)送消息,讓對(duì)象自身選擇其內(nèi)部相應(yīng)的操作以完成對(duì)該項(xiàng)數(shù)據(jù)的訪問(wèn)對(duì)象的動(dòng)作取決于外界給對(duì)象的刺激,這就是消息,消息告訴對(duì)象所要求它完成的功能。對(duì)象具有一定的智能功能,即“知道”如何選擇相應(yīng)的操作來(lái)處理對(duì)象所接收的消息從設(shè)計(jì)人員的角度看,對(duì)象是一個(gè)完成特定功能的程序塊從設(shè)計(jì)人員的角度看,對(duì)象是一個(gè)完成特定功能的程序塊從用戶的角度看,對(duì)象為他們提供了所希望的行為從用戶的角度看,對(duì)象為他們提供了所希望的行為對(duì)象對(duì)象(Object)對(duì)象標(biāo)識(shí)對(duì)象標(biāo)識(shí)對(duì)象生命周期對(duì)象生命周期類(lèi)類(lèi)又稱又稱對(duì)象類(lèi)對(duì)象類(lèi)一組具有相一組具有相同屬性和相同操作的對(duì)象的集合。同屬性和相同操作的對(duì)象的集合。在一個(gè)類(lèi)中,每個(gè)對(duì)象都是類(lèi)的在一個(gè)類(lèi)中,每個(gè)對(duì)象都是類(lèi)的實(shí)例實(shí)例(instance) ,它們都可以使用類(lèi)中提供的函數(shù)。它們都可以使用類(lèi)中提供的函數(shù)。類(lèi)具有屬性類(lèi)具有屬性,用數(shù)據(jù)結(jié)構(gòu)來(lái)描述類(lèi)的屬性,用數(shù)據(jù)結(jié)構(gòu)來(lái)描述類(lèi)的屬性,類(lèi)具有操作,類(lèi)具有操作,它是對(duì)象的行為的抽象,操作實(shí)現(xiàn)它是對(duì)象的行為的抽象,操作實(shí)現(xiàn)的過(guò)程稱為方法的過(guò)程稱為方法(method) ,方法有方法名,方法,方法有方法名,方法體和參數(shù)。體和參數(shù)。 幾何對(duì)象幾何對(duì)象顏色顏色位置位置移動(dòng)(移動(dòng)(delta:矢量):矢量)選擇(選擇(P:指針型)指針型):布爾型布爾型旋轉(zhuǎn)旋轉(zhuǎn)(角度角度)圖1 對(duì)象類(lèi)的描述人人姓姓 名名:字符串字符串年年 齡齡: 整整 型型改換工作改換工作改換地址改換地址文件文件文件名文件名文件大小文件大小最近更新日期最近更新日期打印打印(人人)張紅兵張紅兵28繪圖員繪圖員人民路人民路8號(hào)號(hào)(人人)李軍李軍24程序員程序員無(wú)無(wú)圖2 對(duì)象的描述類(lèi)名類(lèi)名屬性屬性運(yùn)算運(yùn)算 對(duì)象對(duì)象 類(lèi)類(lèi)屬于某類(lèi)的具體對(duì)象就是該類(lèi)的屬于某類(lèi)的具體對(duì)象就是該類(lèi)的。一個(gè)類(lèi)的不同實(shí)例必定具有:一個(gè)類(lèi)的不同實(shí)例必定具有:相同的操作(或行為)的集合相同的操作(或行為)的集合相同的信息結(jié)構(gòu)或?qū)傩远x,但可以有不同的屬性值相同的信息結(jié)構(gòu)或?qū)傩远x,但可以有不同的屬性值不同的對(duì)象標(biāo)識(shí)不同的對(duì)象標(biāo)識(shí)消息消息(Message)對(duì)象之間的聯(lián)系是通過(guò)傳遞消息來(lái)實(shí)現(xiàn)的。對(duì)象之間的聯(lián)系是通過(guò)傳遞消息來(lái)實(shí)現(xiàn)的。消息消息就是向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求(互相聯(lián)系、就是向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求(互相聯(lián)系、協(xié)同工作等)。協(xié)同工作等)。是對(duì)象之間進(jìn)行通訊的一種數(shù)據(jù)結(jié)構(gòu)。是對(duì)象之間進(jìn)行通訊的一種數(shù)據(jù)結(jié)構(gòu)。消息統(tǒng)一了消息統(tǒng)一了“數(shù)據(jù)流數(shù)據(jù)流”和和“控制流控制流”。數(shù)據(jù)數(shù)據(jù)方法方法消息到達(dá)消息消息 - - 消息傳送與函數(shù)調(diào)用的區(qū)別消息傳送與函數(shù)調(diào)用的區(qū)別(1)函數(shù)調(diào)用可以帶或不帶參數(shù),但是消息至)函數(shù)調(diào)用可以帶或不帶參數(shù),但是消息至少帶一個(gè)參數(shù),它表明接收該消息的對(duì)象,消少帶一個(gè)參數(shù),它表明接收該消息的對(duì)象,消息中告訴對(duì)象做什么的部分稱為消息操作;息中告訴對(duì)象做什么的部分稱為消息操作;(2)消息操作名類(lèi)似于函數(shù)名,其本質(zhì)區(qū)別在)消息操作名類(lèi)似于函數(shù)名,其本質(zhì)區(qū)別在于:函數(shù)名代表一段可執(zhí)行的代碼,但消息操于:函數(shù)名代表一段可執(zhí)行的代碼,但消息操作名具體功能的選定還取決于接收消息的對(duì)象作名具體功能的選定還取決于接收消息的對(duì)象本身本身(3)函數(shù)調(diào)用是過(guò)程式的(如何做),消息傳)函數(shù)調(diào)用是過(guò)程式的(如何做),消息傳送是說(shuō)明式的(做什么),具體如何做,由對(duì)送是說(shuō)明式的(做什么),具體如何做,由對(duì)象根據(jù)收到的消息自行確定。象根據(jù)收到的消息自行確定。 繼承是使用現(xiàn)存的定義作為基礎(chǔ),建立新定義的繼承是使用現(xiàn)存的定義作為基礎(chǔ),建立新定義的技術(shù)。技術(shù)。是父類(lèi)和子類(lèi)之間共享數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,是父類(lèi)和子類(lèi)之間共享數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類(lèi)之間的一種關(guān)系。這是類(lèi)之間的一種關(guān)系。 繼承性分:繼承性分: 單重繼承:?jiǎn)沃乩^承:一個(gè)子類(lèi)只有一個(gè)父類(lèi)。即一個(gè)子類(lèi)只有一個(gè)父類(lèi)。即子類(lèi)只繼承子類(lèi)只繼承一個(gè)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法。一個(gè)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法。 多重繼承:多重繼承:一個(gè)子類(lèi)可有多個(gè)父類(lèi)。繼承多個(gè)一個(gè)子類(lèi)可有多個(gè)父類(lèi)。繼承多個(gè)父類(lèi)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法。的數(shù)據(jù)結(jié)構(gòu)和方法?;?lèi)基類(lèi)子類(lèi)子類(lèi)A子類(lèi)子類(lèi)B圖 4 繼承性描述現(xiàn)存類(lèi)定義現(xiàn)存類(lèi)定義父類(lèi)父類(lèi)( (基類(lèi)基類(lèi)) )新類(lèi)定義新類(lèi)定義子類(lèi)子類(lèi)( (派生類(lèi)派生類(lèi)) )繼繼 承承圖 3 繼承性單繼承單繼承CheckingSavingsSuperclass (parent)SubclassesInheritance RelationshipAncestorDescendentsAccount- balance- name- number+ withdraw()+ createStatement()多繼承多繼承Use multiple inheritance only when needed and always with caution!FlyingThingAnimalHorseWolfBirdHelicopterAirplaneMultiple Inheritance封裝封裝(Encapsulation) 封裝是一種信息隱蔽技術(shù),就是把對(duì)象封裝是一種信息隱蔽技術(shù),就是把對(duì)象的屬性和行為相結(jié)合構(gòu)成一個(gè)獨(dú)立的基本單的屬性和行為相結(jié)合構(gòu)成一個(gè)獨(dú)立的基本單位,用戶只能見(jiàn)到對(duì)象封裝界面上的信息,位,用戶只能見(jiàn)到對(duì)象封裝界面上的信息,對(duì)象內(nèi)部對(duì)用戶是隱蔽的。封裝的目的在于對(duì)象內(nèi)部對(duì)用戶是隱蔽的。封裝的目的在于將對(duì)象的使用者和對(duì)象的設(shè)計(jì)者分開(kāi),使用將對(duì)象的使用者和對(duì)象的設(shè)計(jì)者分開(kāi),使用者不必知道行為實(shí)現(xiàn)的細(xì)節(jié),只需使用設(shè)計(jì)者不必知道行為實(shí)現(xiàn)的細(xì)節(jié),只需使用設(shè)計(jì)者提供的消息訪問(wèn)對(duì)象者提供的消息訪問(wèn)對(duì)象 封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。訪問(wèn)只能通過(guò)已定義的界面。PosColor 公有公有消息消息私有私有消息消息存儲(chǔ)結(jié)構(gòu)方法協(xié).議一個(gè)對(duì)象封裝的定義為:封裝的定義為:(1)一個(gè)限定所有對(duì)象內(nèi)部軟件的一個(gè)清楚界面;一個(gè)限定所有對(duì)象內(nèi)部軟件的一個(gè)清楚界面;(2)一個(gè)描述這個(gè)對(duì)象和其它對(duì)象之間相互作用的接口一個(gè)描述這個(gè)對(duì)象和其它對(duì)象之間相互作用的接口(3)受保護(hù)的內(nèi)部實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)給出了由軟件對(duì)象提受保護(hù)的內(nèi)部實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)給出了由軟件對(duì)象提供的功能細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)不能在定義這個(gè)對(duì)象的類(lèi)的供的功能細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)不能在定義這個(gè)對(duì)象的類(lèi)的外面訪問(wèn)外面訪問(wèn)矛盾嗎?矛盾嗎?No!封裝性主要指的是對(duì)象的封裝性,引入繼承機(jī)制封裝性主要指的是對(duì)象的封裝性,引入繼承機(jī)制后,對(duì)象仍然是封裝地很好的實(shí)體,其它對(duì)象后,對(duì)象仍然是封裝地很好的實(shí)體,其它對(duì)象與它通信只能發(fā)送消息。與它通信只能發(fā)送消息。相似性:共享代碼!相似性:共享代碼!繼承:靜態(tài)共享代碼封裝:動(dòng)態(tài)共享代碼多態(tài)多態(tài)(Polymorphism)即一個(gè)即一個(gè)名字具有多種語(yǔ)義。名字具有多種語(yǔ)義。同一對(duì)象接收到不同消息采用不同的行為方式同一對(duì)象接收到不同消息采用不同的行為方式不同對(duì)象收到相同消息時(shí)產(chǎn)生不同的動(dòng)作不同對(duì)象收到相同消息時(shí)產(chǎn)生不同的動(dòng)作重載(重載(overload)動(dòng)態(tài)綁定動(dòng)態(tài)綁定類(lèi)屬類(lèi)屬 例如:例如: “繪圖繪圖”操作,作用在操作,作用在“橢圓橢圓” 和和“矩矩形形” 上,畫(huà)出不同的圖形。上,畫(huà)出不同的圖形。使用虛函數(shù)可實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,不同聯(lián)編可以選擇使用虛函數(shù)可實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,不同聯(lián)編可以選擇不同的實(shí)現(xiàn),這便是多態(tài)性。不同的實(shí)現(xiàn),這便是多態(tài)性。 繼承是動(dòng)態(tài)聯(lián)編的基礎(chǔ),虛函數(shù)是動(dòng)態(tài)聯(lián)編的關(guān)繼承是動(dòng)態(tài)聯(lián)編的基礎(chǔ),虛函數(shù)是動(dòng)態(tài)聯(lián)編的關(guān)鍵。鍵。(1)1)在基類(lèi)中,定義成員函數(shù)為虛函數(shù)在基類(lèi)中,定義成員函數(shù)為虛函數(shù)(virtual);(2)(2)定義基類(lèi)的公有定義基類(lèi)的公有(public)派生類(lèi);派生類(lèi);(3)(3)在基類(lèi)的公有派生類(lèi)中在基類(lèi)的公有派生類(lèi)中“重載重載”該虛函數(shù);該虛函數(shù);(4)(4)定義指向基類(lèi)的指針變量,它指向基類(lèi)的公定義指向基類(lèi)的指針變量,它指向基類(lèi)的公有派生類(lèi)的對(duì)象。有派生類(lèi)的對(duì)象。重載虛函數(shù)不是一般的重載函數(shù),它要求函數(shù)重載虛函數(shù)不是一般的重載函數(shù),它要求函數(shù)名、返回類(lèi)型、參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和順序完全相同。名、返回類(lèi)型、參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和順序完全相同。例如:例如:下面是實(shí)現(xiàn)下面是實(shí)現(xiàn)“多態(tài)性多態(tài)性” 的一個(gè)例子的一個(gè)例子#include using namespace std;class figure /定義基類(lèi)定義基類(lèi) protected: double x,y; public: void set_dim(double i; double j=0) x=i; y=j; virtual void show_area() /定義虛函數(shù)定義虛函數(shù) cout“No area computation define ”; coutset_dim(10.0,5.0); p-show_area(); p=&c; / 指向圓形對(duì)象指向圓形對(duì)象 p-set_dim(9.0); p-show_area();void main() figure *p; /定義指向基類(lèi)的指針變量定義指向基類(lèi)的指針變量 triangle t; / square s; / 定義基類(lèi)的公有派生類(lèi)的對(duì)象定義基類(lèi)的公有派生類(lèi)的對(duì)象 circle c; / p=&t; / 指向三角形對(duì)象指向三角形對(duì)象 p-set_dim(10.0,5.0); p-show_area();figureCircleTriangleSquarearea()area()area()area()類(lèi)與對(duì)象類(lèi)與對(duì)象C+語(yǔ)言程序設(shè)計(jì)C+語(yǔ)言程序設(shè)計(jì)本章主要內(nèi)容本章主要內(nèi)容l面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷雔OOP的基本特點(diǎn)的基本特點(diǎn)l類(lèi)概念和聲明類(lèi)概念和聲明l對(duì)象對(duì)象l構(gòu)造函數(shù)構(gòu)造函數(shù)l析構(gòu)函數(shù)析構(gòu)函數(shù)l內(nèi)聯(lián)成員函數(shù)內(nèi)聯(lián)成員函數(shù)l拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)l類(lèi)的組合類(lèi)的組合C+語(yǔ)言程序設(shè)計(jì)回顧:面向過(guò)程的設(shè)計(jì)方法回顧:面向過(guò)程的設(shè)計(jì)方法l重點(diǎn)重點(diǎn): 如何實(shí)現(xiàn)細(xì)節(jié)過(guò)程,將數(shù)據(jù)與函數(shù)分開(kāi)。l形式:形式: 主模塊+若干個(gè)子模塊(main()+子函數(shù))。l特點(diǎn):特點(diǎn): 自頂向下,逐步求精功能分解。l缺點(diǎn):缺點(diǎn): 效率低,程序的可重用性差。面向?qū)ο蟮乃枷隒+語(yǔ)言程序設(shè)計(jì)面向?qū)ο蟮姆椒嫦驅(qū)ο蟮姆椒╨目的:目的: 實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化。l觀點(diǎn)觀點(diǎn):解決問(wèn)題屬于自然界的。解決問(wèn)題屬于自然界的。 自然界是由實(shí)體(對(duì)象)所組成。l程序設(shè)計(jì)方法:程序設(shè)計(jì)方法: 使用面向?qū)ο蟮挠^點(diǎn)來(lái)描述模仿并處理現(xiàn)實(shí)問(wèn)題。l要求:要求: 高度概括、分類(lèi)、和抽象。面向?qū)ο蟮乃枷隒+語(yǔ)言程序設(shè)計(jì)(1)抽象)抽象l抽象是對(duì)具體對(duì)象(問(wèn)題)進(jìn)行概括,抽象是對(duì)具體對(duì)象(問(wèn)題)進(jìn)行概括,抽出這一類(lèi)對(duì)象的公共性質(zhì)并加以描述抽出這一類(lèi)對(duì)象的公共性質(zhì)并加以描述的過(guò)程。(如學(xué)生,教師的過(guò)程。(如學(xué)生,教師, 課程)課程) 先注意問(wèn)題的本質(zhì)及描述,其次是實(shí)現(xiàn)過(guò)程或細(xì)節(jié)。 數(shù)據(jù)抽象:描述某類(lèi)對(duì)象的屬性或狀態(tài)(對(duì)象相互區(qū)別的物理量)。 行為抽象:描述某類(lèi)對(duì)象的共有的行為特征或具有的功能。 抽象的實(shí)現(xiàn):通過(guò)類(lèi)的聲明。OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)抽象實(shí)例抽象實(shí)例鐘表鐘表l數(shù)據(jù)抽象:數(shù)據(jù)抽象: int Hour, int Minute, int Secondl行為抽象:行為抽象: SetTime(), ShowTime()OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)抽象實(shí)例抽象實(shí)例鐘表類(lèi)鐘表類(lèi)class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)抽象實(shí)例抽象實(shí)例人人l數(shù)據(jù)抽象:數(shù)據(jù)抽象:char *name,char *sex, int age, int idl行為抽象:行為抽象:生物屬性角度:GetCloth(), Eat(), 社會(huì)屬性角度:Work(), Promote() ,注意:同一個(gè)問(wèn)題可能有不同的抽象結(jié)果:根據(jù)解決問(wèn)題的要求不同,產(chǎn)生的抽象成員可能不同OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)(2) 封裝封裝l將抽象出的數(shù)據(jù)成員、行為成員相結(jié)將抽象出的數(shù)據(jù)成員、行為成員相結(jié)合,將它們視為一個(gè)整體,即類(lèi)。合,將它們視為一個(gè)整體,即類(lèi)。 目的是增強(qiáng)安全性和簡(jiǎn)化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只需要通過(guò)外部接口,以特定的訪問(wèn)權(quán)限,來(lái)使用類(lèi)的成員。 實(shí)現(xiàn)封裝:類(lèi)聲明中的OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)封裝封裝l實(shí)例:實(shí)例: class Clock public: void SetTime(int NewH,int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second; ;邊界特定的訪問(wèn)權(quán)限OOP的基本特點(diǎn)外部接口C+語(yǔ)言程序設(shè)計(jì)(3)繼承與派生)繼承與派生l為了重用引出了繼函的概念。為了重用引出了繼函的概念。l是是C+中支持層次分類(lèi)的一種機(jī)制,允許程序員中支持層次分類(lèi)的一種機(jī)制,允許程序員在保持原有類(lèi)特性的基礎(chǔ)上,進(jìn)行更具體的說(shuō)明。在保持原有類(lèi)特性的基礎(chǔ)上,進(jìn)行更具體的說(shuō)明。l實(shí)現(xiàn):聲明派生類(lèi)實(shí)現(xiàn):聲明派生類(lèi)第第11章章l昆蟲(chóng)的分類(lèi)樹(shù)昆蟲(chóng)的分類(lèi)樹(shù)OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)多態(tài)性多態(tài)性l多態(tài):同一名稱,不同的功能實(shí)現(xiàn)方式。多態(tài):同一名稱,不同的功能實(shí)現(xiàn)方式。l目的:達(dá)到行為標(biāo)識(shí)統(tǒng)一,減少程序中標(biāo)目的:達(dá)到行為標(biāo)識(shí)統(tǒng)一,減少程序中標(biāo)識(shí)符的個(gè)數(shù)。識(shí)符的個(gè)數(shù)。l實(shí)現(xiàn):重載函數(shù)和虛函數(shù)實(shí)現(xiàn):重載函數(shù)和虛函數(shù)第第12章章OOP的基本特點(diǎn)C+語(yǔ)言程序設(shè)計(jì)c+中的類(lèi)中的類(lèi)l類(lèi)是具有相同屬性和行為的一組對(duì)象類(lèi)是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類(lèi)的全部對(duì)象提的集合,它為屬于該類(lèi)的全部對(duì)象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個(gè)主要部分。性和行為兩個(gè)主要部分。l利用類(lèi)可以實(shí)現(xiàn)數(shù)據(jù)的封裝、隱藏、利用類(lèi)可以實(shí)現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。繼承與派生。l利用類(lèi)易于編寫(xiě)大型復(fù)雜程序,其模利用類(lèi)易于編寫(xiě)大型復(fù)雜程序,其模塊化程度比塊化程度比C中采用函數(shù)更高。中采用函數(shù)更高。類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)類(lèi)與函數(shù)類(lèi)與函數(shù)l函數(shù)是將邏輯上相關(guān)的函數(shù)是將邏輯上相關(guān)的語(yǔ)句與數(shù)據(jù)語(yǔ)句與數(shù)據(jù)封封裝,用于完成特定的功能。裝,用于完成特定的功能。l而類(lèi)則是邏輯上相關(guān)的而類(lèi)則是邏輯上相關(guān)的函數(shù)與數(shù)據(jù)函數(shù)與數(shù)據(jù)的的封裝,它是對(duì)所要處理的問(wèn)題的描述。封裝,它是對(duì)所要處理的問(wèn)題的描述。類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)類(lèi)的聲明形式類(lèi)的聲明形式l 類(lèi)是一種用戶自定義類(lèi)型,聲明形類(lèi)是一種用戶自定義類(lèi)型,聲明形式:式: class 類(lèi)名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護(hù)型成員 類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)公有類(lèi)型成員公有類(lèi)型成員l在關(guān)鍵字在關(guān)鍵字public后面聲明,它們是類(lèi)后面聲明,它們是類(lèi)與外部的接口,任何外部函數(shù)都可以訪與外部的接口,任何外部函數(shù)都可以訪問(wèn)公有類(lèi)型數(shù)據(jù)和函數(shù)。問(wèn)公有類(lèi)型數(shù)據(jù)和函數(shù)。類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)私有類(lèi)型成員私有類(lèi)型成員l在關(guān)鍵字在關(guān)鍵字private后面聲明,只允許后面聲明,只允許本類(lèi)中的函數(shù)訪問(wèn),而類(lèi)外部的任何函本類(lèi)中的函數(shù)訪問(wèn),而類(lèi)外部的任何函數(shù)都不能訪問(wèn)。數(shù)都不能訪問(wèn)。l如果緊跟在類(lèi)名稱的后面聲明私有成如果緊跟在類(lèi)名稱的后面聲明私有成員,則關(guān)鍵字員,則關(guān)鍵字privateprivate可以省略??梢允÷?。類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)保護(hù)類(lèi)型保護(hù)類(lèi)型l與與private類(lèi)似,其差別表現(xiàn)在繼承與類(lèi)似,其差別表現(xiàn)在繼承與派生時(shí)對(duì)派生類(lèi)的影響不同,派生時(shí)對(duì)派生類(lèi)的影響不同,第七章講第七章講。類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)類(lèi)的成員類(lèi)的成員 class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second; ;類(lèi) 和 對(duì) 象成員數(shù)據(jù)成員函數(shù)lvoid Clock : SetTime(int NewH, int NewM, int NewS)ll Hour=NewH;l Minute=NewM;l Second=NewS;llvoid Clock : ShowTime()ll coutHour:Minute:Second;l19C+語(yǔ)言程序設(shè)計(jì)成員數(shù)據(jù)成員數(shù)據(jù)l與一般的變量聲明相同,但需要將它放在類(lèi)的聲與一般的變量聲明相同,但需要將它放在類(lèi)的聲明體中。明體中。lclass complexl private:l double real;l double imag;l public:l void init(double r,double i)real=r;imag=i;l double realcomplex()return real;l double imagcomplex()return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l l 類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)成員函數(shù)成員函數(shù)l在類(lèi)中說(shuō)明原形,可以在在類(lèi)中說(shuō)明原形,可以在類(lèi)外給出函類(lèi)外給出函數(shù)體實(shí)現(xiàn),并在函數(shù)名前使用類(lèi)名加數(shù)體實(shí)現(xiàn),并在函數(shù)名前使用類(lèi)名加以限定。以限定。也可以也可以直接在類(lèi)中給出函數(shù)直接在類(lèi)中給出函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)。l允許聲明重載函數(shù)和帶默認(rèn)形參值的允許聲明重載函數(shù)和帶默認(rèn)形參值的函數(shù)函數(shù)類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)帶缺省形參值的函數(shù)帶缺省形參值的函數(shù)lVoid clock:setTime(int NewH=0,int NewM=0,int NewS=0)l l Hour=NewH;l Minute=NewM;l Second=NewS;l C+語(yǔ)言程序設(shè)計(jì)內(nèi)聯(lián)成員函數(shù)內(nèi)聯(lián)成員函數(shù)l為了提高運(yùn)行時(shí)的效率,對(duì)于較簡(jiǎn)單為了提高運(yùn)行時(shí)的效率,對(duì)于較簡(jiǎn)單的函數(shù)可以聲明為內(nèi)聯(lián)形式。的函數(shù)可以聲明為內(nèi)聯(lián)形式。l內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu)(如循內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu)(如循環(huán)語(yǔ)句和環(huán)語(yǔ)句和switch語(yǔ)句)。語(yǔ)句)。l在類(lèi)中聲明內(nèi)聯(lián)成員函數(shù)的方式:在類(lèi)中聲明內(nèi)聯(lián)成員函數(shù)的方式: 將函數(shù)體放在類(lèi)的聲明中-隱式 使用inline關(guān)鍵字-顯式類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)內(nèi)聯(lián)成員函數(shù)舉例內(nèi)聯(lián)成員函數(shù)舉例(隱式隱式)lclass Pointll public:l void Init(int initX,int initY)l l X=initX;l Y=initY;l l int GetX() return X;l int GetY() return Y;l private:l int X,Y;l;類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)內(nèi)聯(lián)成員函數(shù)舉例內(nèi)聯(lián)成員函數(shù)舉例(顯式顯式)lclass Pointll public:l void Init(int initX,int initY);l int GetX(); l int GetY();l private:l int X,Y;l;類(lèi) 和 對(duì) 象linline void Point: Init(int initX,int initY)ll X=initX;l Y=initY;llinline int Point:GetX() ll return X;llinline int Point:GetY() ll return Y;l25C+語(yǔ)言程序設(shè)計(jì)對(duì)象對(duì)象l類(lèi)的對(duì)象是該類(lèi)的某一特定實(shí)體,即類(lèi)的對(duì)象是該類(lèi)的某一特定實(shí)體,即類(lèi)類(lèi)型的變量。類(lèi)類(lèi)型的變量。l聲明形式:聲明形式: 類(lèi)名類(lèi)名 對(duì)象名;對(duì)象名;l例:例: Clock myClock;類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)類(lèi)中成員的訪問(wèn)方式類(lèi)中成員的訪問(wèn)方式l類(lèi)中成員互訪類(lèi)中成員互訪 直接使用成員名l類(lèi)外訪問(wèn)類(lèi)外訪問(wèn) 使用“對(duì)象名.成員名”方式訪問(wèn) public 屬性的成員類(lèi) 和 對(duì) 象C+語(yǔ)言程序設(shè)計(jì)例例 類(lèi)的應(yīng)用舉例類(lèi)的應(yīng)用舉例l#includelusing namespace std;lclass Clockll public:l void SetTime(int NewH,int NewM,int NewS);l void ShowTime();l private:l int Hour,Minute,Second;l;lvoid Clock:SetTime(int NewH,int NewM,int NewS)l Hour=NewH;l Minute=NewM;l Second=NewS;lC+語(yǔ)言程序設(shè)計(jì)lvoid Clock:ShowTime()ll coutHour“:”Minute“:”Second;l lvoid main(void)l Clock myClock;l myClock.SetTime(8,30,30);l myClock.ShowTime();l例例 類(lèi)的應(yīng)用舉例類(lèi)的應(yīng)用舉例C+語(yǔ)言程序設(shè)計(jì)結(jié)構(gòu)與類(lèi)結(jié)構(gòu)與類(lèi)lStruct Savingsl unsigned accountNumber;l float balance;l;lvoid fn()l Savings a;l Savings b;l a.accountNumber=1;l b.accountNumber=2;l;結(jié)構(gòu)與類(lèi)的區(qū)別:類(lèi)中成員的缺省存儲(chǔ)屬性為私有的結(jié)構(gòu)體中的缺省存儲(chǔ)屬性為共有的C+語(yǔ)言程序設(shè)計(jì)構(gòu)造函數(shù)構(gòu)造函數(shù)l由于類(lèi)的封裝性,不能像普通變量一樣初始化由于類(lèi)的封裝性,不能像普通變量一樣初始化lstruct Savingslunsigned accountNumber;l float balance;l;lSavings A=1,2000.0;lSavings B(2,3000.0);構(gòu)造函數(shù)和析構(gòu)函數(shù)C+語(yǔ)言程序設(shè)計(jì)構(gòu)造函數(shù)構(gòu)造函數(shù)l構(gòu)造函數(shù)的作用是在對(duì)象被創(chuàng)建時(shí)使用構(gòu)造函數(shù)的作用是在對(duì)象被創(chuàng)建時(shí)使用特定的值去構(gòu)造對(duì)象,或者說(shuō)將對(duì)象特定的值去構(gòu)造對(duì)象,或者說(shuō)將對(duì)象初初始化始化為一個(gè)特定的狀態(tài)。為一個(gè)特定的狀態(tài)。l在對(duì)象創(chuàng)建時(shí)在對(duì)象創(chuàng)建時(shí)由系統(tǒng)自動(dòng)調(diào)用由系統(tǒng)自動(dòng)調(diào)用。l如果程序中未聲明,則系統(tǒng)自動(dòng)產(chǎn)生出如果程序中未聲明,則系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)一個(gè)默認(rèn)形式默認(rèn)形式的構(gòu)造函數(shù)的構(gòu)造函數(shù)l允許為允許為內(nèi)聯(lián)內(nèi)聯(lián)函數(shù)、函數(shù)、重載重載函數(shù)、函數(shù)、帶默認(rèn)形帶默認(rèn)形參值參值的函數(shù)的函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)C+語(yǔ)言程序設(shè)計(jì)構(gòu)造函數(shù)舉例構(gòu)造函數(shù)舉例lclass Clockllpublic:lClock (int NewH, int NewM, int NewS);/構(gòu)造構(gòu)造函數(shù)函數(shù)lvoid SetTime(int NewH, int NewM, int NewS);lvoid ShowTime();lprivate:lint Hour,Minute,Second;l;構(gòu)造函數(shù)和析構(gòu)函數(shù)l構(gòu)造函數(shù)的實(shí)現(xiàn):構(gòu)造函數(shù)的實(shí)現(xiàn):lClock:Clock(int NewH, int NewM, int NewS)llHour= NewH;lMinute= NewM;lSecond= NewS;ll建立對(duì)象時(shí)構(gòu)造函數(shù)的作用:建立對(duì)象時(shí)構(gòu)造函數(shù)的作用:lvoid main()ll Clock c (0,0,0); /隱含調(diào)用構(gòu)造函數(shù),將初始值作為實(shí)隱含調(diào)用構(gòu)造函數(shù),將初始值作為實(shí)參。參。l c.ShowTime();l31C+語(yǔ)言程序設(shè)計(jì)重載構(gòu)造函數(shù):重載構(gòu)造函數(shù):l/ex.hl#include lclass Demo int x,y;l public:l Demo(int a,int b)l x=a; y=b;l cout“Constructor demo(int ,int)be calledn”;l l Demo()l cout“Constructor demo() be calledn”;l void show()l cout“X=”xt“Y=”yendl;l ; C+語(yǔ)言程序設(shè)計(jì)l#include “ex.h”lvoid main()l Demo d1(3,5); /Al d1.Show();l Demo d2; /Bl d2.Show();ll該程序的輸出為:該程序的輸出為:lConstructor Demo(int ,int) be calledlX=3 Y=5lConstructor Demo( ) be calledlX=946 Y=928 (隨機(jī)值隨機(jī)值)C+語(yǔ)言程序設(shè)計(jì)拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)l拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類(lèi)的拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類(lèi)的對(duì)象引用。對(duì)象引用。l作用:使用一個(gè)對(duì)象(參數(shù)指定的對(duì)象),去初始化一作用:使用一個(gè)對(duì)象(參數(shù)指定的對(duì)象),去初始化一個(gè)正在被建立的同類(lèi)型對(duì)象。個(gè)正在被建立的同類(lèi)型對(duì)象。 class 類(lèi)名 public : 類(lèi)名(形參);/構(gòu)造函數(shù) 類(lèi)名(類(lèi)名 &對(duì)象名);/拷貝構(gòu)造函數(shù) . ; 類(lèi)名: 類(lèi)名(類(lèi)名 &對(duì)象名)/拷貝構(gòu)造函數(shù)的實(shí)現(xiàn) 函數(shù)體 構(gòu)造函數(shù)和析構(gòu)函數(shù)C+語(yǔ)言程序設(shè)計(jì)例例 拷貝構(gòu)造函數(shù)舉例拷貝構(gòu)造函數(shù)舉例 class Point public: Point(int xx=0,int yy=0); Point( Point &p); int GetX() return X; int GetY() return Y; private: int X,Y; ;構(gòu)造函數(shù)和析構(gòu)函數(shù)lPoint:Point(int xx,int yy)ll X=xx;l Y=yy;llPoint:Point (Point& p)ll X=p.X;l Y=p.Y;l cout拷貝構(gòu)造函數(shù)被調(diào)用拷貝構(gòu)造函數(shù)被調(diào)用endl;llPoint b(1,1);lPoint a(b);34C+語(yǔ)言程序設(shè)計(jì)拷貝構(gòu)造函數(shù)被調(diào)用的時(shí)機(jī)拷貝構(gòu)造函數(shù)被調(diào)用的時(shí)機(jī)l(1)當(dāng)用類(lèi)的一個(gè)對(duì)象去初始化該類(lèi)的)當(dāng)用類(lèi)的一個(gè)對(duì)象去初始化該類(lèi)的另一個(gè)對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函另一個(gè)對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)拷貝賦值。數(shù)實(shí)現(xiàn)拷貝賦值。 void main(void) Point A(1,2); Point B(A); /拷貝構(gòu)造函數(shù)被調(diào)用拷貝構(gòu)造函數(shù)被調(diào)用 coutB.GetX()endl; 構(gòu)造函數(shù)和析構(gòu)函數(shù)C+語(yǔ)言程序設(shè)計(jì)l(2)若函數(shù)的形參為類(lèi)對(duì)象,調(diào)用函)若函數(shù)的形參為類(lèi)對(duì)象,調(diào)用函數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如:用拷貝構(gòu)造函數(shù)。例如: void fun1(Point p) coutp.GetX()endl; void main() Point A(1,2); fun1(A); /調(diào)用拷貝構(gòu)造函數(shù)調(diào)用拷貝構(gòu)造函數(shù) 構(gòu)造函數(shù)和析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)被調(diào)用的時(shí)機(jī)拷貝構(gòu)造函數(shù)被調(diào)用的時(shí)機(jī)C+語(yǔ)言程序設(shè)計(jì)l(3)當(dāng)函數(shù)的返回值是類(lèi)對(duì)象時(shí),系)當(dāng)函數(shù)的返回值是類(lèi)對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如:統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如: Point fun2() Point A(1,2); return A; /調(diào)用拷貝構(gòu)造函調(diào)用拷貝構(gòu)造函數(shù)數(shù) void main() Point B; B=fun2(); 構(gòu)造函數(shù)和析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)被調(diào)用的時(shí)機(jī)拷貝構(gòu)造函數(shù)被調(diào)用的時(shí)機(jī)C+語(yǔ)言程序設(shè)計(jì)拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)l如果程序員沒(méi)有為類(lèi)聲明拷貝初始化構(gòu)造函數(shù),則編譯器自如果程序員沒(méi)有為類(lèi)聲明拷貝初始化構(gòu)造函數(shù),則編譯器自己生成一個(gè)拷貝構(gòu)造函數(shù)。己生成一個(gè)拷貝構(gòu)造函數(shù)。l這個(gè)構(gòu)造函數(shù)執(zhí)行的功能是:用作為初始值的對(duì)象的每個(gè)數(shù)這個(gè)構(gòu)造函數(shù)執(zhí)行的功能是:用作為初始值的對(duì)象的每個(gè)數(shù)據(jù)成員的值,初始化將要建立的對(duì)象的對(duì)應(yīng)數(shù)據(jù)成員。據(jù)成員的值,初始化將要建立的對(duì)象的對(duì)應(yīng)數(shù)據(jù)成員。lPoint(Point &p) Point A(1,2);lX=p.x; Point B(A);l Y=p.y; B.X=A.Xl 如果沒(méi)有定義這個(gè)函數(shù)如果沒(méi)有定義這個(gè)函數(shù) B.Y=A.Y構(gòu)造函數(shù)和析構(gòu)函數(shù)C+語(yǔ)言程序設(shè)計(jì)析構(gòu)函數(shù)析構(gòu)函數(shù)l完成對(duì)象被刪除前的一些清理工作。完成對(duì)象被刪除前的一些清理工作。l在對(duì)象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)在對(duì)象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)用它,然后再釋放此對(duì)象所屬的空間。用它,然后再釋放此對(duì)象所屬的空間。l如果程序中未聲明析構(gòu)函數(shù),編譯器將如果程序中未聲明析構(gòu)函數(shù),編譯器將自動(dòng)產(chǎn)生一個(gè)默認(rèn)的析構(gòu)函數(shù)。自動(dòng)產(chǎn)生一個(gè)默認(rèn)的析構(gòu)函數(shù)。構(gòu)造函數(shù)和析構(gòu)函數(shù)C+語(yǔ)言程序設(shè)計(jì)構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例l#includelusing namespace std;lclass Pointl l public:l Point(int xx,int yy);l Point();l /.其它函數(shù)原形其它函數(shù)原形l private:l int X,int Y;l;構(gòu)造函數(shù)和析構(gòu)函數(shù)lPoint:Point(int xx,int yy)l X=xx; Y=yy;llPoint:Point()lll/.其它函數(shù)的實(shí)現(xiàn)略其它函數(shù)的實(shí)現(xiàn)略41C+語(yǔ)言程序設(shè)計(jì)l#include lclass Qll int x,y;l public:l Q(int a=0,int b=0)l cout“調(diào)用了構(gòu)造函數(shù)!調(diào)用了構(gòu)造函數(shù)!”endl;l x=a; y=b;l void P(void)l coutxtyn;l Q()l cout“調(diào)用了析構(gòu)函數(shù)!調(diào)用了析構(gòu)函數(shù)!”n;lvoid main(void)ll Q q(50,100);l q.P();l cout“退出主函數(shù)!退出主函數(shù)!n”;ll輸出:調(diào)用了構(gòu)造函數(shù)!輸出:調(diào)用了構(gòu)造函數(shù)!l 50 100l 退出主函數(shù)!退出主函數(shù)! l 調(diào)用了析構(gòu)函數(shù)!調(diào)用了析構(gòu)函數(shù)!l C+語(yǔ)言程序設(shè)計(jì)類(lèi)的應(yīng)用舉例類(lèi)的應(yīng)用舉例l一圓型游泳池如圖所示,現(xiàn)在需在其一圓型游泳池如圖所示,現(xiàn)在需在其周?chē)ㄒ粓A型過(guò)道,并在其四周?chē)蠔艡?。周?chē)ㄒ粓A型過(guò)道,并在其四周?chē)蠔艡?。柵欄價(jià)格為柵欄價(jià)格為35元元/米,過(guò)道造價(jià)為米,過(guò)道造價(jià)為20元元/平平方米。過(guò)道寬度為方米。過(guò)道寬度為3米,游泳池半徑由鍵盤(pán)米,游泳池半徑由鍵盤(pán)輸入。要求編程計(jì)算并輸出過(guò)道和柵欄的輸入。要求編程計(jì)算并輸出過(guò)道和柵欄的造價(jià)。造價(jià)。游泳池過(guò)道l#include lusing namespace std;lconst float PI = 3.14159;lconst float FencePrice = 35;lconst float ConcretePrice = 20;l/聲明類(lèi)聲明類(lèi)Circle 及其數(shù)據(jù)和方法及其數(shù)據(jù)和方法lclass Circlell private:l float radius;l l public:l Circle(float r); /構(gòu)造函數(shù)構(gòu)造函數(shù)l l float Circumference(); /圓周長(zhǎng)圓周長(zhǎng)l float Area(); /圓面積圓面積l;43l/ 類(lèi)的實(shí)現(xiàn)類(lèi)的實(shí)現(xiàn)l/ 構(gòu)造函數(shù)初始化數(shù)據(jù)成員構(gòu)造函數(shù)初始化數(shù)據(jù)成員radiuslCircle:Circle(float r)lradius=rl/ 計(jì)算圓的周長(zhǎng)計(jì)算圓的周長(zhǎng)lfloat Circle:Circumference()ll return 2 * PI * radius;ll l/ 計(jì)算圓的面積計(jì)算圓的面積 lfloat Circle:Area() ll return PI * radius * radius;l44lvoid main ()ll float radius;l float FenceCost, ConcreteCost; l l / 提示用戶輸入半徑提示用戶輸入半徑l coutradius;l / 聲明聲明 Circle 對(duì)象對(duì)象l Circle Pool(radius);/自動(dòng)調(diào)用構(gòu)造自動(dòng)調(diào)用構(gòu)造函數(shù)函數(shù)l Circle PoolRim(radius + 3); 45l/ 計(jì)算柵欄造價(jià)并輸出計(jì)算柵欄造價(jià)并輸出l FenceCost = PoolRim.Circumference() * FencePrice;l cout Fencing Cost is ¥ FenceCost endl;l l / 計(jì)算過(guò)道造價(jià)并輸出計(jì)算過(guò)道造價(jià)并輸出l ConcreteCost = (PoolRim.Area() - Pool.Area()*ConcretePrice;l cout Concrete Cost is ¥ ConcreteCost endl;ll運(yùn)行結(jié)果運(yùn)行結(jié)果lEnter the radius of the pool: 10lFencing Cost is ¥2858.85lConcrete Cost is ¥4335.3946C+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù)(類(lèi)與對(duì)象、內(nèi)聯(lián)成員函數(shù))(類(lèi)與對(duì)象、內(nèi)聯(lián)成員函數(shù))l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l void init(double r,double i)l real=r;imag=I;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid main()ll complex a;l a.init(1.1,2.2);l cout“real of complex a=”a.realcomplex()endl;l cout“image of complex a=”a.imagecomplex()endl;l cout“abs of complex a=”a.abscomplex()endl;lC+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (構(gòu)造函數(shù))(構(gòu)造函數(shù))l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r,double i)l real=r;imag=I;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid main()ll complex a(1.1,2.2);l cout“real of complex a=”a.realcomplex()endl;l cout“image of complex a=”a.imagecomplex()endl;l cout“abs of complex a=”a.abscomplex()endl;lC+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (帶缺省參數(shù)構(gòu)造函數(shù))(帶缺省參數(shù)構(gòu)造函數(shù))l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r=0.0,double i=0.0)l real=r;imag=I;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid main()ll complex a(1.1,2.2);l complex b;l complex c(1.0);l cout“real of complex a=”a.realcomplex()endl;l cout“image of complex a=”a.imagecomplex()endl;l cout“abs of complex a=”a.abscomplex()endl;lC+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (構(gòu)造函數(shù)重載)(構(gòu)造函數(shù)重載)l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r,double i)l real=r;imag=I;l complex() real=0.0; imag=0.0;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid main()ll complex a(1.1,2.2);l cout“real of complex a=”a.realcomplex()endl;l cout“image of complex a=”a.imagecomplex()endl;l cout“abs of complex a=”a.abscomplex()endl;l complex b;l cout“real of complex a=”b.realcomplex()endl;l cout“image of complex a=”b.imagecomplex()endl;l cout“abs of complex a=”b.abscomplex()endl;ll參數(shù)能不能給一個(gè)值參數(shù)能不能給一個(gè)值l 如:如:complex c(1.1);行嗎?行嗎?C+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (析構(gòu)函數(shù))(析構(gòu)函數(shù))l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r=0.0,double i=0.0)l real=r;imag=I;l complex() cout“destructing.n”;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid main()ll complex a(1.1,2.2);l cout“real of complex a=”a.realcomplex()endl;l cout“image of complex a=”a.imagecomplex()endl;l cout“abs of complex a=”a.abscomplex()endl;l complex b;l cout“real of complex a=”b.realcomplex()endl;l cout“image of complex a=”b.imagecomplex()endl;l cout“abs of complex a=”b.abscomplex()endl;lC+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (拷貝構(gòu)造函數(shù)(拷貝構(gòu)造函數(shù)應(yīng)用應(yīng)用A)l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r=0.0,double i=0.0)l real=r;imag=I;l complex(complex &c)l real=c.real; imag=c.imag;l complex() cout“destructing.n”;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid main()ll complex a(1.1,2.2);l cout“real of complex a=”a.realcomplex()endl;l cout“image of complex a=”a.imagecomplex()endl;l cout“abs of complex a=”a.abscomplex()endl;l complex b(a);l cout“real of complex a=”b.realcomplex()endl;l cout“image of complex a=”b.imagecomplex()endl;l cout“abs of complex a=”b.abscomplex()endl;lC+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (拷貝構(gòu)造函數(shù)(拷貝構(gòu)造函數(shù)應(yīng)用應(yīng)用B)l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r=0.0,double i=0.0)l real=r;imag=I;l complex(complex &c)l real=c.real; imag=c.imag;l complex() cout“destructing.n”;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lvoid display(complex p)ll cout“real of complex p=”p.realcomplex()endl;l cout“image of complex p=”p.imagecomplex()endl;l cout“abs of complex p=”p.abscomplex()endl;llvoid main()ll complex a(1.1,2.2);l display(a);l lC+語(yǔ)言程序設(shè)計(jì)例:復(fù)數(shù)例:復(fù)數(shù) (拷貝構(gòu)造函數(shù)(拷貝構(gòu)造函數(shù)應(yīng)用應(yīng)用C)l#include l#include lClass complexlPrivate:l double real;l double imag;lPublic:l complex(double r=0.0,double i=0.0)l real=r;imag=I;l complex(complex &c)l real=c.real; imag=c.imag;l complex() cout“destructing.n”;l double realcomplex() return real;l double imagcomplex() return imag;l double abscomplex()l double t;l t=real*real+imag*imag;l return sqrt(t);l l;lcomplex fun()ll complex a(1.1,

    注意事項(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>