c++面向?qū)ο蟪绦蛟O(shè)計(jì)
《c++面向?qū)ο蟪绦蛟O(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《c++面向?qū)ο蟪绦蛟O(shè)計(jì)(407頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
面向?qū)ο蟮脑O(shè)計(jì)思想 面向?qū)ο蟮乃枷胱畛醭霈F(xiàn)于挪威奧斯陸大學(xué)和挪威計(jì)算機(jī)中心共同研制的 7語(yǔ)言中 , 隨著的0語(yǔ)言推出 , 面向?qū)ο蟮牡某绦蛟O(shè)計(jì)方法得到了比較完善的實(shí)現(xiàn) 。 此后 , 面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā) , 擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng) , 交互式界面 , 分布式系統(tǒng) , 網(wǎng)絡(luò)管理結(jié)構(gòu)和人工智能等領(lǐng)域 。 面向?qū)ο蟮陌l(fā)展 面向?qū)ο笏枷? 數(shù)據(jù)抽象 – 一種設(shè)計(jì)方法 把一組數(shù)據(jù)及作用與其上的操作組成一個(gè)設(shè)計(jì)實(shí)體或單位。接口說(shuō)明外部可見(jiàn),其實(shí)現(xiàn)是隱蔽的,不可見(jiàn)的。 發(fā)展的三個(gè)階段 01010101 100100 用戶(hù) 定義 抽象數(shù) 據(jù)類(lèi)型 面向?qū)ο笏枷? 抽象數(shù)據(jù)類(lèi)型 抽象數(shù)據(jù)類(lèi)型是指“一個(gè)值集和作用在該值集上的操作集”。抽象數(shù)據(jù)類(lèi)型的定義只決定于其邏輯特性,與其具體的計(jì)算機(jī)內(nèi)部實(shí)現(xiàn)無(wú)關(guān)。一個(gè)抽象數(shù)據(jù)類(lèi)型可以分解為語(yǔ)法、語(yǔ)義、表示和算法 4個(gè)部分。 功能抽象 模塊 數(shù)據(jù)抽象 模塊 面向?qū)ο笏枷? 抽象數(shù)據(jù)類(lèi)型的實(shí)現(xiàn) 實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型需要借助于高級(jí)程序設(shè)計(jì)語(yǔ)言 ; 在面向過(guò)程的語(yǔ)言中,用戶(hù)可以自己定義數(shù)據(jù)類(lèi)型 ; 在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中,借助于對(duì)象描述抽象數(shù)據(jù)類(lèi)型。 (面向?qū)ο笏枷? 問(wèn)題求解 面向?qū)ο笤O(shè)計(jì)方法:實(shí)現(xiàn)問(wèn)題空間和問(wèn)題求解空間的近似和直接模擬。 意識(shí)部分 教室 物質(zhì)部分 303教室 抽象部分 教室類(lèi) 具體部分 一個(gè)對(duì)象:教室實(shí)例 現(xiàn)實(shí)問(wèn)題空間 解空間 面向?qū)ο蟮奶攸c(diǎn) 封裝機(jī)制 基于消息的通信 繼承機(jī)制 多態(tài)機(jī)制 理解面向?qū)ο蟮幕靖拍顚?duì)于學(xué)習(xí)和掌握面向?qū)ο蟮拈_(kāi)發(fā)方法是十分重要的。 面向?qū)ο蟮幕靖拍? 類(lèi) ( 對(duì)象 (實(shí)例 (多態(tài)性 (繼承 ( 消息 (封裝 (面向?qū)ο蟮氖澜缬^ 把客觀世界從概念上看成是一個(gè)由相互配合而協(xié)作的對(duì)象所組成的系統(tǒng) 面向?qū)ο?=對(duì)象 +分類(lèi) +繼承 +通信 一個(gè)實(shí)例 ——椅子 對(duì)象:桌子 價(jià)格 尺寸 重量 位置 顏色 類(lèi):家具 對(duì)象:椅子 一個(gè)面向?qū)ο蟮膶?shí)例 ——椅子 價(jià)格 尺寸 重量 位置 顏色 買(mǎi) 賣(mài) 移動(dòng) 買(mǎi) 賣(mài) 移動(dòng) 買(mǎi) 賣(mài) 移動(dòng) 價(jià)格 尺寸 重量 位置 顏色 對(duì)象 對(duì)象 (對(duì)象是用來(lái)描述客觀存在的事物,它是構(gòu)成系統(tǒng)的基本單位,是對(duì)客觀世界中事物的抽象描述。 對(duì)象 = 行為(功能、方法、服務(wù)) + 屬性(數(shù)據(jù)) 屬性 行為 接口 對(duì)象 對(duì)象 對(duì)象 面向?qū)ο蟮幕靖拍? 對(duì)象是由私有數(shù)據(jù)(屬性)及作用于其上的一組操作(行為)所構(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è)完成特定功能的程序塊 從用戶(hù)的角度看,對(duì)象為他們提供了所希望的行為 面向?qū)ο蟮幕靖拍? 對(duì)象 (對(duì)象標(biāo)識(shí) 對(duì)象生命周期 面向?qū)ο蟮幕靖拍? 類(lèi) ( 類(lèi) 又稱(chēng) 對(duì)象類(lèi) ( , 是 一組具有相同屬性和相同操作的對(duì)象的集合 。 在一個(gè)類(lèi)中 , 每個(gè)對(duì)象都是類(lèi)的 實(shí)例 (,它們都可以使用類(lèi)中提供的函數(shù) 。 類(lèi)具有屬性 , 用數(shù)據(jù)結(jié)構(gòu)來(lái)描述類(lèi)的屬性 , 類(lèi)具有操作 , 它是對(duì)象的行為的抽象 , 操作實(shí)現(xiàn)的過(guò)程稱(chēng)為方法 ( , 方法有方法名 , 方法體和參數(shù) 。 由于對(duì)象是類(lèi)的實(shí)例,在進(jìn)行分析和設(shè)計(jì)時(shí),通常把注意力集中在類(lèi)上,而不是具體的對(duì)象上。 幾何對(duì)象 顏色 位置 移動(dòng)( 矢量) 選擇( P:指針型) :布爾型 旋轉(zhuǎn) (角度 ) 圖 1 對(duì)象類(lèi)的描述 人 姓 名 :字符串 年 齡 : 整 型 改換工作 改換地址 文件 文件名 文件大小 最近更新日期 打印 (人 ) 張紅兵 28 繪圖員 人民路 8號(hào) (人 ) 李軍 24 程序員 無(wú) 圖 2 對(duì)象的描述 對(duì)象和類(lèi)的描述 類(lèi)和 對(duì)象一般采用 “ 名字 ” 、 ―屬性 ” 和 ―運(yùn)算 ” 來(lái)描述 。 類(lèi)名 屬性 運(yùn)算 對(duì)象 類(lèi) 屬于某類(lèi)的具體對(duì)象就是該類(lèi)的 實(shí)例 。 一個(gè)類(lèi)的不同實(shí)例必定具有: 相同的操作(或行為)的集合 相同的信息結(jié)構(gòu)或?qū)傩远x,但可以有不同的屬性值 不同的對(duì)象標(biāo)識(shí) 面向?qū)ο蟮幕靖拍? 面向?qū)ο蟮幕靖拍? 消息 (對(duì)象之間的聯(lián)系是通過(guò)傳遞消息來(lái)實(shí)現(xiàn)的。 消息 就是向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求(互相聯(lián)系、協(xié)同工作等)。 是對(duì)象之間進(jìn)行通訊的一種數(shù)據(jù)結(jié)構(gòu)。 消息統(tǒng)一了“數(shù)據(jù)流”和“控制流”。 數(shù)據(jù) 方法 消息到達(dá) 面向?qū)ο蟮幕靖拍? 消息 - 消息傳送與函數(shù)調(diào)用的區(qū)別 ( 1)函數(shù)調(diào)用可以帶或不帶參數(shù),但是消息至少帶一個(gè)參數(shù),它表明接收該消息的對(duì)象,消息中告訴對(duì)象做什么的部分稱(chēng)為消息操作; ( 2)消息操作名類(lèi)似于函數(shù)名,其本質(zhì)區(qū)別在于:函數(shù)名代表一段可執(zhí)行的代碼,但消息操作名具體功能的選定還取決于接收消息的對(duì)象本身 ( 3)函數(shù)調(diào)用是過(guò)程式的(如何做),消息傳送是說(shuō)明式的(做什么),具體如何做,由對(duì)象根據(jù)收到的消息自行確定。 繼承 ( 繼承是使用現(xiàn)存的定義作為基礎(chǔ) , 建立新定義的技術(shù) 。 是父類(lèi)和子類(lèi)之間共享數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制 ,這是類(lèi)之間的一種關(guān)系 。 繼承性分: 單重繼承: 一個(gè)子類(lèi)只有一個(gè)父類(lèi) 。 即子類(lèi)只繼承一個(gè)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法 。 多重繼承: 一個(gè)子類(lèi)可有多個(gè)父類(lèi) 。 繼承多個(gè)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法 。 基類(lèi) 子類(lèi) A 子類(lèi) B 圖 4 繼承性描述 現(xiàn)存類(lèi)定義 父類(lèi) (基類(lèi) ) 新類(lèi)定義 子類(lèi) (派生類(lèi) ) 繼 承 圖 3 繼承性 繼承 單繼承 c c o u n b a la n n a m n u m b e r+ w i th d r a w ( )+ cr ea ta te m e n t( )繼承 多繼承 Fl y i n g T h i n g A n im a lH o r s eW o i r dH e li c o p t e rA i r p la n 裝 (封裝是一種信息隱蔽技術(shù) , 就是把對(duì)象的屬性和行為相結(jié)合構(gòu)成一個(gè)獨(dú)立的基本單位 , 用戶(hù)只能見(jiàn)到對(duì)象封裝界面上的信息 ,對(duì)象內(nèi)部對(duì)用戶(hù)是隱蔽的 。 封裝的目的在于將對(duì)象的使用者和對(duì)象的設(shè)計(jì)者分開(kāi) , 使用者不必知道行為實(shí)現(xiàn)的細(xì)節(jié) , 只需使用設(shè)計(jì)者提供的消息訪問(wèn)對(duì)象 面向?qū)ο蟮幕靖拍? 封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。 面向?qū)ο蟮幕靖拍? … 公有消息 私有消息 存儲(chǔ)結(jié)構(gòu) 方法 協(xié)..……議 一個(gè)對(duì)象 面向?qū)ο蟮幕靖拍? 封裝的定義為: (1)一個(gè)限定所有對(duì)象內(nèi)部軟件的一個(gè)清楚界面; (2)一個(gè)描述這個(gè)對(duì)象和其它對(duì)象之間相互作用的接口 (3)受保護(hù)的內(nèi)部實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)給出了由軟件對(duì)象提供的功能細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)不能在定義這個(gè)對(duì)象的類(lèi)的外面訪問(wèn) 封裝 承 矛盾嗎? 封裝性主要指的是對(duì)象的封裝性,引入繼承機(jī)制后,對(duì)象仍然是封裝地很好的實(shí)體,其它對(duì)象與它通信只能發(fā)送消息。 相似性:共享代碼! 繼承:靜態(tài)共享代碼 封裝:動(dòng)態(tài)共享代碼 面向?qū)ο蟮幕靖拍? 多態(tài) (即一個(gè) 名字具有多種語(yǔ)義 。 同一對(duì)象接收到不同消息采用不同的行為方式 不同對(duì)象收到相同消息時(shí)產(chǎn)生不同的動(dòng)作 重載( 動(dòng)態(tài)綁定 類(lèi)屬 多態(tài)性和動(dòng)態(tài)綁定 多態(tài)性 (指相同的操作或函數(shù) 、過(guò)程作用于不同的對(duì)象上并獲得不同的結(jié)果 。 即相同的操作的消息發(fā)送給不同的對(duì)象時(shí) , 每個(gè)對(duì)象將根據(jù)自己所屬類(lèi)中定義的操作去執(zhí)行 , 產(chǎn)生不同的結(jié)果 。 例如: “ 繪圖 ” 操作 , 作用在 “ 橢圓 ” 和 “ 矩形 ” 上 , 畫(huà)出不同的圖形 。 動(dòng)態(tài)綁定 (在運(yùn)行時(shí)根據(jù)對(duì)象接收的消息動(dòng)態(tài)地確定要連接的服務(wù)代碼 。 使用虛函數(shù)可實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編 , 不同聯(lián)編可以選擇不同的實(shí)現(xiàn) , 這便是多態(tài)性 。 繼承是動(dòng)態(tài)聯(lián)編的基礎(chǔ) , 虛函數(shù)是動(dòng)態(tài)聯(lián)編的關(guān)鍵 。 多態(tài)性的實(shí)現(xiàn)舉例 實(shí)現(xiàn)多態(tài)性的基本步驟 (以 C++為例 ): (1)在基類(lèi)中 , 定義成員函數(shù)為虛函數(shù) ( (2)定義基類(lèi)的公有 ( 派生類(lèi); (3)在基類(lèi)的公有派生類(lèi)中 “ 重載 ” 該虛函數(shù); (4)定義指向基類(lèi)的指針變量 , 它指向基類(lèi)的公有派生類(lèi)的對(duì)象 。 注意: 重載虛函數(shù)不是一般的重載函數(shù) , 它要求函數(shù)名 、 返回類(lèi)型 、 參數(shù)個(gè)數(shù) 、 參數(shù)類(lèi)型和順序完全相同 。 多態(tài) 類(lèi)與對(duì)象 C++語(yǔ)言程序設(shè)計(jì) C++語(yǔ)言程序設(shè)計(jì) 本章主要內(nèi)容 ? 面向?qū)ο蟮乃枷? ? ? 類(lèi)概念和聲明 ? 對(duì)象 ? 構(gòu)造函數(shù) ? 析構(gòu)函數(shù) ? 內(nèi)聯(lián)成員函數(shù) ? 拷貝構(gòu)造函數(shù) ? 類(lèi)的組合 C++語(yǔ)言程序設(shè)計(jì) 回顧:面向過(guò)程的設(shè)計(jì)方法 ? 重點(diǎn) : – 如何實(shí)現(xiàn)細(xì)節(jié)過(guò)程,將數(shù)據(jù)與函數(shù)分開(kāi)。 ? 形式: – 主模塊 +若干個(gè)子模塊( +子函數(shù))。 ? 特點(diǎn): – 自頂向下,逐步求精 ——功能分解。 ? 缺點(diǎn): – 效率低,程序的可重用性差。 面向?qū)ο蟮乃枷?C++語(yǔ)言程序設(shè)計(jì) 面向?qū)ο蟮姆椒? ? 目的: – 實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化。 ? 觀點(diǎn) :解決問(wèn)題屬于自然界的。 – 自然界是由實(shí)體(對(duì)象)所組成。 ? 程序設(shè)計(jì)方法: – 使用面向?qū)ο蟮挠^點(diǎn)來(lái)描述模仿并處理現(xiàn)實(shí)問(wèn)題。 ? 要求: – 高度概括、分類(lèi)、和抽象。 面向?qū)ο蟮乃枷?C++語(yǔ)言程序設(shè)計(jì) ( 1)抽象 ? 抽象是對(duì)具體對(duì)象(問(wèn)題)進(jìn)行概括,抽出這一類(lèi)對(duì)象的公共性質(zhì)并加以描述的過(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)的聲明。 ++語(yǔ)言程序設(shè)計(jì) 抽象實(shí)例 ——鐘表 ? 數(shù)據(jù)抽象: – 行為抽象: – , ++語(yǔ)言程序設(shè)計(jì) 抽象實(shí)例 ——鐘表類(lèi) –{ – – ; – – –}; ++語(yǔ)言程序設(shè)計(jì) 抽象實(shí)例 ——人 ?數(shù)據(jù)抽象: –行為抽象: –生物屬性角度: , , … –社會(huì)屬性角度: , ,… –注意:同一個(gè)問(wèn)題可能有不同的抽象結(jié)果:根據(jù)解決問(wèn)題的要求不同,產(chǎn)生的抽象成員可能不同 ++語(yǔ)言程序設(shè)計(jì) (2) 封裝 ? 將抽象出的數(shù)據(jù)成員、行為成員相結(jié)合,將它們視為一個(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)聲明中的 {} ++語(yǔ)言程序設(shè)計(jì) 封裝 ? 實(shí)例: – { – ; – – }; 邊界 特定的訪問(wèn)權(quán)限 部接口 C++語(yǔ)言程序設(shè)計(jì) ( 3)繼承與派生 ? 為了重用引出了繼函的概念。 ? 是 C++中支持層次分類(lèi)的一種機(jī)制,允許程序員在保持原有類(lèi)特性的基礎(chǔ)上,進(jìn)行更具體的說(shuō)明。 ? 實(shí)現(xiàn):聲明派生類(lèi) ——第 11章 ? 昆蟲(chóng)的分類(lèi)樹(shù) ++語(yǔ)言程序設(shè)計(jì) 多態(tài)性 ? 多態(tài):同一名稱(chēng),不同的功能實(shí)現(xiàn)方式。 ? 目的:達(dá)到行為標(biāo)識(shí)統(tǒng)一,減少程序中標(biāo)識(shí)符的個(gè)數(shù)。 ? 實(shí)現(xiàn):重載函數(shù)和虛函數(shù) ——第 12章 ++語(yǔ)言程序設(shè)計(jì) c++中的類(lèi) ? 類(lèi)是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類(lèi)的全部對(duì)象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個(gè)主要部分。 ? 利用類(lèi)可以實(shí)現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。 ? 利用類(lèi)易于編寫(xiě)大型復(fù)雜程序,其模塊化程度比 類(lèi) 和 對(duì) 象 C++語(yǔ)言程序設(shè)計(jì) 類(lèi)與函數(shù) ? 函數(shù)是將邏輯上相關(guān)的 語(yǔ)句與數(shù)據(jù) 封裝,用于完成特定的功能。 ? 而類(lèi)則是邏輯上相關(guān)的 函數(shù)與數(shù)據(jù) 的封裝,它是對(duì)所要處理的問(wèn)題的描述。 類(lèi) 和 對(duì) 象 C++語(yǔ)言程序設(shè)計(jì) 類(lèi)的聲明形式 ? 類(lèi)是一種用戶(hù)自定義類(lèi)型,聲明形式: – 名稱(chēng) – { – – 公有成員(外部接口) – – 私有成員 – – 保護(hù)型成員 – } 類(lèi) 和 對(duì) 象 C++語(yǔ)言程序設(shè)計(jì) 公有類(lèi)型成員 ? 在關(guān)鍵字 們是類(lèi)與外部的接口,任何外部函數(shù)都可以訪問(wèn)公有類(lèi)型數(shù)據(jù)和函數(shù)。 類(lèi) 和 對(duì) 象 C++語(yǔ)言程序設(shè)計(jì) 私有類(lèi)型成員 ? 在關(guān)鍵字 允許本類(lèi)中的函數(shù)訪問(wèn),而類(lèi)外部的任何函數(shù)都不能訪問(wèn)。 ? 如果緊跟在類(lèi)名稱(chēng)的后面聲明私有成員,則關(guān)鍵字 類(lèi) 和 對(duì) 象 C++語(yǔ)言程序設(shè)計(jì) 保護(hù)類(lèi)型 ? 與 差別表現(xiàn)在繼承與派生時(shí)對(duì)派生類(lèi)的影響不同, 第七章講 。 類(lèi) 和 對(duì) 象 C++語(yǔ)言程序設(shè)計(jì) 類(lèi)的成員 – { – ; – – – }; 類(lèi) 和 對(duì) 象 成員數(shù)據(jù) 成員函數(shù) ? : ? { ? ? ? ? } ? : ? { ? ? { ? ? ? ; ? ? ? }; ? ? { ? ? ? } C++語(yǔ)言程序設(shè)計(jì) ? ? { ? x,y; ? ? a,b) ? { x=a; y=b; ? ?{ ? ? xx, ? ~; ? //..? ? ,; ?}; 構(gòu)造函數(shù)和析構(gòu)函數(shù) ?xx,?{ X= Y=?} ?~ ?{ ?} ?//..41 C++語(yǔ)言程序設(shè)計(jì) ? #? ? { ? x,y; ? ? Q(a=0,b=0) ? { ?I = ? 35; ? 20; ?//聲明類(lèi) 其數(shù)據(jù)和方法 ?{ ? ? ? ? ? r); //構(gòu)造函數(shù) ? ? ; //圓周長(zhǎng) ? ; //圓面積 ?}; 43 ?// 類(lèi)的實(shí)現(xiàn) ?// 構(gòu)造函數(shù)初始化數(shù)據(jù)成員 r) ?{r} ?// 計(jì)算圓的周長(zhǎng) ? ?{ ? * ?} ? ?// 計(jì)算圓的面積 ? ?{ ? I * ?} 44 ?) ?{ ? ? ? ? // 提示用戶(hù)輸入半徑 ? ? // 聲明 象 ? ? 3); 45 ? // 計(jì)算柵欄造價(jià)并輸出 ? * ? ? #? ? ? ? ? ? r,i) ? {r;;} ? { ? { ? ? {t; ? t=? t); ? } ? }; ? ? { ? a; ? ? #? ? ? ? ? ? r,i) ? {r;;} ? { ? { ? ? {t; ? t=? t); ? } ? }; ? ? { ? a( ? #? ? ? ? ? ? r=0.0,i=? {r;;} ? { ? { ? ? {t; ? t=? t); ? } ? }; ? ? { ? a( ? b; ? c( ? #? ? ? ? ? ? r,i) ? {r;;} ? { ? { ? { ? ? {t; ? t=? t); ? } ? }; ? ? { ? a( ? #? ? ? ? ? ? r=0.0,i=? {r;;} ? ~ { #? ? ? ? ? ? r=0.0,i=? {r;;} ? c) ? { ? ~ { #? ? ? ? ? ? r=0.0,i=? {r;;} ? c) ? { ? ~ { #? ? ? ? ? ? r=0.0,i=? {r;;} ? c) ? { ? ~ { ? ? { ? , ) {X=Y=; } ? p); ? {;} ? {;} ? { ? { ? f(); ? g(); ? ? ? }; ? =0; ? f() ? { ;} ? g() ? { ? ? {? , ) {X==yy;;}? p); //拷貝構(gòu)造函數(shù) ? {;} ? {;} ? ? { {? ) ? { ? ? { ? i; //聲明 i ? i; //取 i=10; //? a[i]; ? a[i]; ? a[i]; ? – 相當(dāng)于 (*; 指 針 C++語(yǔ)言程序設(shè)計(jì) 對(duì)象指針應(yīng)用舉例 ? ?{ ? (5,10); ? ? A; ? x; ? x=; ? – =指 針 C++語(yǔ)言程序設(shè)計(jì) 指針變量作為函數(shù)實(shí)參 ? 以地址方式傳遞數(shù)據(jù),可以用來(lái)返回函數(shù)處理結(jié)果。 ? 例如: 指針與函數(shù) C++語(yǔ)言程序設(shè)計(jì) 例 ?{ ? ? *? *?} ? ?{ ? ? ?} C++語(yǔ)言程序設(shè)計(jì) 動(dòng)態(tài)申請(qǐng)內(nèi)存操作符 類(lèi)型名 T(初值列表) ? 功能: 在程序執(zhí)行期間,申請(qǐng)用于存放 依初值列表賦以初值。 ? 結(jié)果值: 成功: 向新分配的內(nèi)存。失?。?0( 動(dòng)態(tài)存儲(chǔ)分配 C++語(yǔ)言程序設(shè)計(jì) 釋放內(nèi)存操作符 針 P ? 功能: 釋放指針 動(dòng)態(tài)存儲(chǔ)分配 C++語(yǔ)言程序設(shè)計(jì) ? ? { ? ? i ; ? ? // is ? ; ? // ? i = 0; i > i] ; ? } ? // ? i=0; i ? ? { ? ? { X=Y=0; ? { //類(lèi)的聲明同上例,略 }; ? ? { ]; //創(chuàng)建對(duì)象數(shù)組 ? ],10); //通過(guò)指針訪問(wèn)數(shù)組元素的成員 ? ]5,20); //通過(guò)指針訪問(wèn)數(shù)組元素的成員 ? ? ? // ? // (a) ? [; ? ? // (b) ? j = 0; j >b; – b>0) – { – c; – ...... – } –} – 具有塊作用域的變量也稱(chēng)為局部變量。 作用域與可見(jiàn)性 C++語(yǔ)言程序設(shè)計(jì) 類(lèi)作用域 ? 可以將類(lèi)看成是一組有名成員的集合,除個(gè)別例外情況外,類(lèi)作用域作用于特定的成員名,類(lèi)及其對(duì)象有特殊的訪問(wèn)和作用域規(guī)則。 ? 例:類(lèi) , 在 的函數(shù)成員中都可以訪問(wèn)到 M, ? ( 1)即 ? ( 2)這樣的 ? 類(lèi)的封裝作用就在于限制數(shù)據(jù)的作用域。 作用域與可見(jiàn)性 C++語(yǔ)言程序設(shè)計(jì) 類(lèi)作用域 – 通過(guò)表達(dá)式 ::這是程序中訪問(wèn)對(duì)象成員的最基本的方法。 X:: – 通過(guò)表達(dá)式 , 其中 作用域與可見(jiàn)性 C++語(yǔ)言程序設(shè)計(jì) 命名空間作用域 ? 一個(gè)大型的程序通常由不同模塊構(gòu)成,不同的模塊甚至有可能是由不同人員開(kāi)發(fā)的。不同模塊中的類(lèi)和函數(shù)之間有可能發(fā)生重名,這樣就會(huì)引發(fā)錯(cuò)誤。如南京路(上海的、武漢的) 作用域與可見(jiàn)性 C++語(yǔ)言程序設(shè)計(jì) 命名空間的語(yǔ)法形式: ? 名空間名 { ? 命名空間內(nèi)的各種聲明(函數(shù)聲明、類(lèi)聲明、 …… ) ? } ? 一個(gè)命名空間確定了一個(gè)命名空間作用域,凡是在該命名空間之內(nèi)聲明的、不屬于前面所述各個(gè)作用域的標(biāo)識(shí)符都屬于該命名空間作用域。在命名空間內(nèi)部可以直接引用當(dāng)命名空間中聲明的標(biāo)識(shí)符,如果需要引用其他命名空間的標(biāo)識(shí)符,需要使用下面的語(yǔ)法: ? 命名空間名 ::標(biāo)識(shí)符名 ? 作用域與可見(jiàn)性 C++語(yǔ)言程序設(shè)計(jì) ? 例: ? ); ? }; ? ? ? //聲明一個(gè)作用域與可見(jiàn)性 命名空間作用域 C++語(yǔ)言程序設(shè)計(jì) ? 有時(shí),在標(biāo)識(shí)符前總使用這樣的命名空間限定會(huì)顯得過(guò)于冗長(zhǎng),為了解決這一問(wèn)題, C++又提供了 ? 名空間名 ::標(biāo)識(shí)符名; ? 名空間名; ? C++標(biāo)準(zhǔn)程序庫(kù)的所有標(biāo)識(shí)符都被聲明在 此都使用了 ? ? 如果去掉這條語(yǔ)句,則引用相應(yīng)的標(biāo)識(shí)符需要使用 作用域與可見(jiàn)性 命名空間作用域 C++語(yǔ)言程序設(shè)計(jì) ? 命名空間也允許嵌套,如: ? ? ? }; ? } ? } ? 引用其中的 要使用 作用域與可見(jiàn)性 命名空間作用域 C++語(yǔ)言程序設(shè)計(jì) 兩類(lèi)特殊的命名空間 ? 全局命名空間 ? 匿名命名空間 ? 全局命名空間是默認(rèn)的命名空間,在顯式聲明的命名空間之外聲明的標(biāo)識(shí)符都在一個(gè)全局命名空間中(文件作用域)。 ? 匿名命名空間是一個(gè)需要顯式聲明的沒(méi)有名字的命名空間,聲明方式如下: ? ? 匿名命名空間內(nèi)的各種聲明(函數(shù)聲明、類(lèi)聲明、 …… ) ? } 作用域與可見(jiàn)性 C++語(yǔ)言程序設(shè)計(jì) ? 在包含多個(gè)源文件的工程中,匿名命名空間常常被用來(lái)屏蔽不希望暴露給其他源文件的標(biāo)識(shí)符,這是因?yàn)槊總€(gè)源文件的匿名命名空間是彼此不同的,在一個(gè)源文件中沒(méi)有辦法訪問(wèn)其他源文件的匿名命名空間。例: 作用域與可見(jiàn)性 命名空間作用域 C++語(yǔ)言程序設(shè)計(jì) ? #? ? i; //在全局命名空間的全局變量 (又稱(chēng)文件作用域 ) ? s{ ? j; //在 ? } ? { ? i=5; //為全局變量 ? j=6; //為全局變量 ? { ? s; //使得當(dāng)前塊中可以直接引用 名空間的標(biāo)識(shí)符 ? i; //局部變量 ? i=7; ? – i; //文件作用域 ? j=3; – – { i=5; – { i; //塊作用域 – i=7; – – i=5; //文件作用域 – – { – k=3; – – ; – – { ; – ; – } – – { a=1; – i=5; – a++; – i++; – ? ? {? ;//構(gòu)造函數(shù) ? //三個(gè)形參均具有函數(shù)原型作用域 ? ; ? ~{}//析構(gòu)函數(shù) ? ? ? }; 對(duì)象的生存期 ? //時(shí)鐘類(lèi)成員函數(shù)實(shí)現(xiàn) ? //構(gòu)造函數(shù) ? { ; ? ; ? ; ? } ? ? { ? ? ? } ? ? { ? f() ? { ;} ? g() ? { ? r); ? ? { d( ? d); ? ; ? } ? r) ? //常引用做形參,在函數(shù)中不能更新 ? { ? ? { ? R(R1=2= ? ; ? ? ? 1,? }; ? :: ? { ? ? {? A(i); ? ; ? r; ? ? a; ? b; //靜態(tài)常數(shù)據(jù)成員 ? }; ? ::b=10; ? A::A(i):a(i),r(a) {} ? :: ? { ?按標(biāo)準(zhǔn)方式搜索,文件位于 C++系統(tǒng)目錄的 – #件名 " ?首先在當(dāng)前目錄中搜索,若沒(méi)有,再按標(biāo)準(zhǔn)方式搜索。 ? #定義指令 – 定義符號(hào)常量,很多情況下已被 – 定義帶參數(shù)宏,已被內(nèi)聯(lián)函數(shù)取代。 ? # 刪除由 #之不再起作用。 C++語(yǔ)言程序設(shè)計(jì) 條件編譯指令 # # #常量表達(dá)式 ? //當(dāng)“ 常量表達(dá)式”非零時(shí)編譯 ? 程序正文 ? # ...... 編譯預(yù)處理命令 C++語(yǔ)言程序設(shè)計(jì) 條件編譯指令 ——# # 常量表達(dá)式 ? //當(dāng)“ 常量表達(dá)式”非零時(shí)編譯 – 程序正文 1 – # //當(dāng)“ 常量表達(dá)式”為零時(shí)編譯 – 程序正文 2 – #譯預(yù)處理命令 C++語(yǔ)言程序設(shè)計(jì) 條件編譯指令 # # 常量表達(dá)式 1 ? 程序正文 1 //當(dāng)“ 常量表達(dá)式 1”非零時(shí)編譯 ? #常量表達(dá)式 2 ? 程序正文 2 //當(dāng)“ 常量表達(dá)式 2”非零時(shí)編譯 ? # 程序正文 3 //其它情況下編譯 ? #譯預(yù)處理命令 C++語(yǔ)言程序設(shè)計(jì) 條件編譯指令 ?# 標(biāo)識(shí)符 ? 程序段 1 ?# 程序段 2 ?#如果“標(biāo)識(shí)符”經(jīng) #未經(jīng) 編譯程序段 1,否則編譯程序段 2。 編譯預(yù)處理命令 C++語(yǔ)言程序設(shè)計(jì) 條件編譯指令 ?# 標(biāo)識(shí)符 ? 程序段 1 ?# 程序段 2 ?#如果“標(biāo)識(shí)符”未被定義過(guò),則編譯程序段 1,否則編譯程序段 2。 編譯預(yù)處理命令 C++語(yǔ)言程序設(shè)計(jì) 多文件結(jié)構(gòu) ? 一個(gè)源程序可以劃分為多個(gè)源文件: – 類(lèi)聲明文件( – 類(lèi)實(shí)現(xiàn)文件( – 類(lèi)的使用文件( 所在的 ? 利用工程來(lái)組合各個(gè)文件。 C++語(yǔ)言程序設(shè)計(jì) 不使用條件編譯的頭文件 ? // #? #? ? { ? … ? } ? // #? … ? // #? … ? // … ? { ? … ? } ? … 多文件結(jié)構(gòu) C++語(yǔ)言程序設(shè)計(jì) 使用條件編譯的頭文件 ? // # # … ? { ?- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
7 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- c+ 面向 對(duì)象 程序設(shè)計(jì)
鏈接地址:http://m.hcyjhs8.com/p-3024.html