chap1 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介_第1頁
chap1 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介_第2頁
chap1 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介_第3頁
chap1 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介_第4頁
chap1 面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++簡(jiǎn)介_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

QtC++程序設(shè)計(jì)教師:韓改寧Email:75960160@咸陽師范學(xué)院計(jì)算機(jī)學(xué)院課程目的本課程圍繞軟件設(shè)計(jì)方法和開發(fā)工具為基礎(chǔ),介紹了面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn),理解其設(shè)計(jì)方法,學(xué)會(huì)QtC++編程技術(shù)。課程采用講授與實(shí)驗(yàn)相結(jié)合的方式。著重培養(yǎng)學(xué)生的實(shí)際動(dòng)手能力,通過軟件開發(fā)流程、圖形用戶界面的編程方法等基礎(chǔ)實(shí)驗(yàn),使學(xué)生能夠掌握跨平臺(tái)軟件設(shè)計(jì)的基本方法。學(xué)生基礎(chǔ):學(xué)過C語言、數(shù)據(jù)結(jié)構(gòu)、嵌入式Linux操作系統(tǒng)等課程特點(diǎn)首先在PC機(jī)開發(fā)Qt應(yīng)用程序,然后在PC機(jī)上自己動(dòng)手搭建嵌入式系統(tǒng)的開發(fā)平臺(tái),利用交叉編譯器進(jìn)行嵌入式應(yīng)用編譯,最后將開發(fā)程序移植到開發(fā)板上。為后續(xù)學(xué)習(xí)和理解嵌入式系統(tǒng)的開發(fā)奠定基礎(chǔ)。教材課程概況-主要內(nèi)容課程概況-主要內(nèi)容實(shí)驗(yàn)系統(tǒng)的內(nèi)容目標(biāo)平臺(tái)開發(fā)工具實(shí)驗(yàn)項(xiàng)目QCreatorARM_Linux_gccA8boardCortex的ARM開發(fā)板應(yīng)用程序設(shè)計(jì)交叉編譯移植參考書目1、陸文周等,Qt5開發(fā)及實(shí)例(含典型案例視頻分析)(第4版),電子工業(yè)出版社2019.32、王維波等,Qt5.9C++開發(fā)指南,人民郵電出版社2018.53、彭源,QtC++編程從入門到實(shí)戰(zhàn),清華大學(xué)出版社,2022.14、朱文偉等,Qt6.x從入門到精通,清華大學(xué)出版社,2022.9參考資料Qt官網(wǎng)

Qt官網(wǎng):

https://www.qt.ioQt下載:http://www.qt.io/downloadQt所有下載:http://download.qt.io/archive/qtQt官方發(fā)布下載:http://download.qt.io/official_releases/qtOpenSource下載:http://www.qt.io/download-open-source/#section-2QtWiKi:https://wiki.qt.io/Main_Page參考資料社區(qū)論壇國外論壇:

Qt-Centre:

一個(gè)非常全面的外國網(wǎng)站,有forum、wiki、docs、blogs等。Qt-forum:/

比較有名的國際Qt編程論壇。Qt-Apps:

可以找到很多免費(fèi)的Qt應(yīng)用,獲得源碼來學(xué)習(xí)研究,使用時(shí)請(qǐng)遵守相關(guān)開源協(xié)議。國內(nèi)論壇:CSDNQt論壇:

/forums/QtQTCN開發(fā)網(wǎng):

Qter開源社區(qū):

參考資料1、掌握一種學(xué)習(xí)方法2、學(xué)習(xí)了解軟件開發(fā)技術(shù)的基本概念、方法和知識(shí)3、獲得軟件開發(fā)設(shè)計(jì)實(shí)踐經(jīng)驗(yàn)4、為嵌入式系統(tǒng)軟件開發(fā)奠定基礎(chǔ)希望大家有所收獲參考教材課程概況-教學(xué)形式

講課項(xiàng)目實(shí)驗(yàn)學(xué)習(xí)方法課程概況-考核方式平時(shí)(10%)課堂表現(xiàn)項(xiàng)目(20%)實(shí)驗(yàn)大作業(yè)考試(70%)課程概況-課程安排共48課時(shí)(1*2課時(shí)/周)講授32課時(shí)實(shí)驗(yàn)16課時(shí)實(shí)驗(yàn)地點(diǎn):物聯(lián)網(wǎng)工程實(shí)驗(yàn)室實(shí)驗(yàn)時(shí)間:周三1-2節(jié)(從第四周開始)第一章面向?qū)ο蟪绦蛟O(shè)計(jì)與C++主要內(nèi)容132面向?qū)ο蟪绦蛟O(shè)計(jì)類與對(duì)象C++語法C語言是結(jié)構(gòu)化和模塊化的語言,C程序的設(shè)計(jì)者必須關(guān)系設(shè)計(jì)程序的每個(gè)細(xì)節(jié),準(zhǔn)確地考慮程序運(yùn)行時(shí)每一刻發(fā)生的事情,當(dāng)成效規(guī)模變大時(shí),結(jié)構(gòu)化程序設(shè)計(jì)就顯得力不從心。為了解決軟件設(shè)計(jì)危機(jī),在20世紀(jì)80年代提出了面向?qū)ο蟮某绦蛟O(shè)計(jì)思想(ObjectOrientedProgramming——OOP)。OOP概念:是一種程序設(shè)計(jì)的泛型,同時(shí)也是一種程序開發(fā)的方法,它將對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述

結(jié)構(gòu)化程序設(shè)計(jì)軟件的結(jié)構(gòu)化分析、設(shè)計(jì)方法工程化的概念方法但無法很好的支持越來越復(fù)雜、龐大的系統(tǒng)需求面向?qū)ο蟪绦蛟O(shè)計(jì)方法直接將問題的映射到問題的本身有目的地將系統(tǒng)分解為模塊降溫貼分解為一系列的實(shí)體(對(duì)象)方便設(shè)計(jì)、科委會(huì)性、可擴(kuò)展性好比如:圖書館管理系統(tǒng)的設(shè)計(jì)1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述面向?qū)ο蟮某绦蜃罡镜哪康氖鞘钩绦騿T更好的理解和管理龐大而復(fù)雜的程序,它在結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)上完成進(jìn)一步的抽象。這種在設(shè)計(jì)方法上更高層次的抽象正是為了適應(yīng)目前軟件開發(fā)的特點(diǎn)。面向?qū)ο蟮娜齻€(gè)基本特征是:封裝、繼承、多態(tài)。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新的程序設(shè)計(jì)范型。主要特征是:程序=對(duì)象+消息面向?qū)ο蟪绦蛟O(shè)計(jì)的基本元素是對(duì)象。面向?qū)ο蟪绦虻闹饕Y(jié)構(gòu)特點(diǎn)是:1.程序一般由類的定義和類的使用兩部分組成;2.程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實(shí)現(xiàn)的,對(duì)象接收到消息后,啟動(dòng)有關(guān)方法完成相應(yīng)的操作。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述掌握面向?qū)ο蟪绦蛟O(shè)計(jì),首先應(yīng)該學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)語言。面向?qū)ο笳Z言形成了兩大類。一類是純面向?qū)ο笳Z言,如Smalltalk和Java等語言另一類是混合型面向?qū)ο笳Z言,也就是在過程語言的基礎(chǔ)上增加面向?qū)ο髾C(jī)制,如C++和CLOS等語言。純面向?qū)ο笳Z言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶?shí)現(xiàn),而混合型面向?qū)ο笳Z言的目標(biāo)則是提高運(yùn)行速度和使傳統(tǒng)程序員容易接受面向?qū)ο笏枷搿3墒斓拿嫦驅(qū)ο笳Z言通常都提供豐富的類庫和強(qiáng)有力的開發(fā)環(huán)境。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述面向?qū)ο蠓椒ǖ奶攸c(diǎn)程序設(shè)計(jì)的重點(diǎn)在數(shù)據(jù)而不是函數(shù)程序由對(duì)象組成對(duì)象之家通過相互協(xié)作來完成功能大多數(shù)對(duì)象的定義以數(shù)據(jù)為中心函數(shù)和相關(guān)的數(shù)據(jù)緊密結(jié)合數(shù)據(jù)可以被隱藏很容易擴(kuò)充新的數(shù)據(jù)和函數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)的一般步驟分析實(shí)際問題,分別并抽取其中的類和對(duì)象設(shè)計(jì)相應(yīng)的類,并根據(jù)各種類創(chuàng)建相應(yīng)的對(duì)象協(xié)調(diào)這些對(duì)象完成程序功能(消息)1.1面向?qū)ο蟪绦蛟O(shè)計(jì)一、概述1、對(duì)象對(duì)象:在現(xiàn)實(shí)生活中,任何事物都是對(duì)象??梢允且粋€(gè)有形的具體存在的事物(一張桌子,一個(gè)學(xué)生,一輛汽車);也可以是一個(gè)無形的,抽象的事物(一次演出,一場(chǎng)球賽,一次出差)——萬物皆對(duì)象。對(duì)象既可以很簡(jiǎn)單,也可以很復(fù)雜,復(fù)雜的對(duì)象可以由若干簡(jiǎn)單的對(duì)象構(gòu)成。對(duì)象一般可以表示為:屬性+行為,一個(gè)對(duì)象往往是由一組屬性和一組行為構(gòu)成的——具有各種的屬性,對(duì)外界呈現(xiàn)各自的行為。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是描述其屬性的數(shù)據(jù)以及對(duì)這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體。在C++中每個(gè)對(duì)象都是由數(shù)據(jù)和操作代碼(通常用函數(shù)來實(shí)現(xiàn))兩部分組成的。——程序中一切都是對(duì)象1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語1、對(duì)象現(xiàn)實(shí)世界中:比如:“小張”、“小王”都是具體的對(duì)象,但“人”不是具體的對(duì)象,“人”是類,是抽象概念現(xiàn)實(shí)世界中的對(duì)象,具有以下特征:每一個(gè)對(duì)象必須有一個(gè)名字以區(qū)別于其他對(duì)象;用屬性來描述它的特征;有一組操作,每組操作決定對(duì)象的一種行為;對(duì)象的行為可以分為兩類:一類是作用于自身的行為;另一類是作用于其他對(duì)象的行為1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語2、類類:在現(xiàn)實(shí)世界中,“類”是一組具有相同屬性和行為的對(duì)象的抽象。類和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系。類是對(duì)多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果,對(duì)象又是類的個(gè)體實(shí)物,一個(gè)對(duì)象是類的一個(gè)實(shí)例。類是某些對(duì)象共同特征的表示類將屬性及行為相同或者相似的對(duì)象歸為一類類可以看成是對(duì)象的抽象,代表了此類對(duì)象所具有的共有屬性和行為在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,每一個(gè)對(duì)象都屬于一個(gè)特定的類。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語3、消息在面向?qū)ο蟪绦蛟O(shè)計(jì)中,一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的請(qǐng)求被稱為“消息”。當(dāng)對(duì)象接收到發(fā)向它的消息時(shí),就調(diào)用有關(guān)的方法,執(zhí)行相應(yīng)的操作。例如:有一個(gè)教師對(duì)象和一個(gè)學(xué)生對(duì)象,學(xué)生可以發(fā)出消息,請(qǐng)求老師演示一個(gè)實(shí)驗(yàn),當(dāng)老師接收到這個(gè)消息后,確定應(yīng)完成的操作并執(zhí)行之。消息具有以下三個(gè)性質(zhì):(1)同一個(gè)對(duì)象可以接收不同形式的多個(gè)消息,作出不同的響應(yīng);(2)相同形式的消息可以傳遞給不同的對(duì)象,所作出的響應(yīng)可以是不同的;(3)對(duì)消息的響應(yīng)并不是必須的,對(duì)象可以響應(yīng)消息,也可以不響應(yīng)。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、相關(guān)術(shù)語4、抽象抽象是將有關(guān)事物的共性歸納、集中的過程。抽象是對(duì)復(fù)雜世界的簡(jiǎn)單表示,抽象并不打算了解全部的問題,而只強(qiáng)調(diào)感興趣的信息,忽略了與主題無關(guān)的信息。例如:設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng)中,只關(guān)心學(xué)生的姓名、學(xué)號(hào)、成績(jī)等,而對(duì)他的身高體重等信息就可以忽略。設(shè)計(jì)一個(gè)學(xué)生健康信息管理系統(tǒng)中,身高、體重等信息必須抽象出來,而成績(jī)則可以忽略。抽象是通過特定的實(shí)例抽取共同性質(zhì)后形成概念的過程。1.2類、對(duì)象和消息三、類的相關(guān)術(shù)語4、抽象面向?qū)ο蟪绦蛟O(shè)計(jì)中的抽象包括兩個(gè)方面:數(shù)據(jù)抽象和代碼抽象(或稱為行為抽象)。前者描述某類對(duì)象的屬性或狀態(tài),也就是此類對(duì)象區(qū)別于彼類對(duì)象的特征物理量——數(shù)據(jù);后者描述了某類對(duì)象的公共行為特征或具有的公共功能——方法。比如:鐘表數(shù)據(jù)(屬性)——時(shí)分秒:表示為intHour;intMinut;intSecond方法(行為)——設(shè)置時(shí)間和顯示時(shí)間:表示為

SetTime();ShowTime()1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語5、封裝在現(xiàn)實(shí)世界中,所謂封裝就是把某個(gè)事物包圍起來,使外界不知道該事物的具體內(nèi)容。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,封裝是指把數(shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來放在對(duì)象內(nèi)部,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。比如一臺(tái)洗衣機(jī),說明對(duì)象的封裝特征。首先,每一臺(tái)洗衣機(jī)有一些區(qū)別于其他洗衣機(jī)的靜態(tài)屬性。如出廠日期、機(jī)器編號(hào)等。洗衣機(jī)上有一些按鍵,如“啟動(dòng)”、“暫?!?、“選擇”等,這些按鍵安裝在洗衣機(jī)的表面,人們通過他們與洗衣機(jī)交流,告訴它應(yīng)該做什么。但我們無法(也沒必要)操作洗衣機(jī)的內(nèi)部電路和機(jī)械控制部件,因?yàn)樗鼈儽谎b在洗衣機(jī)里面,這對(duì)于用戶來說是隱蔽的,不可見的。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語5、封裝是一種信息屏蔽技術(shù);利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起;用戶只能看到對(duì)象的封裝界面信息,對(duì)象的內(nèi)部細(xì)節(jié)對(duì)用戶是屏蔽的;封裝的目的在于將對(duì)象的使用者和設(shè)計(jì)者分開,使用者不必知道行為實(shí)現(xiàn)的細(xì)節(jié),只需使用設(shè)計(jì)者提供的小型來訪問對(duì)象。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語6、繼承繼承是指新的類可以獲得已有類(稱為超類、基類或父類)的屬性和行為,稱新類為已有類的派生類(也稱為子類)。現(xiàn)實(shí)生活中,繼承是很普遍和容易理解的。例如:我們繼承了父母的一些特征,如種族、血型、眼睛的顏色等,父母是我們所具有的屬性的基礎(chǔ)。在繼承過程中派生類也可以修改繼承的方法或增加新的方法,使之更適合特殊的需要。以面向?qū)ο蟪绦蛟O(shè)計(jì)的觀點(diǎn),有助于解決軟件的可重用性問題,使程序結(jié)構(gòu)清晰,降低了編碼和維護(hù)的工作量。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語比如:假設(shè)有兩個(gè)類A和B,若類B繼承類A,則B包含了A的特征,同時(shí)可以加入自己所特有的新特征。我們稱被繼承類A為基類或父類;而稱繼承類B為A的派生類或子類。即類B是從類A中派生出來的。6、繼承從繼承源上分,繼承分為單繼承和多繼承。單繼承是指一個(gè)派生類只有單一的直接父類,類層次結(jié)構(gòu)為樹狀結(jié)構(gòu)。多繼承是指一個(gè)派生類可以有一個(gè)以上的直接父類,類層次結(jié)構(gòu)為網(wǎng)狀結(jié)構(gòu)。Java語言僅支持單繼承,C++語言支持單繼承和多繼承1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語7、多態(tài)性面向?qū)ο笙到y(tǒng)的多態(tài)性是指不同的對(duì)象收到相同的消息時(shí)執(zhí)行不同的操作。例如:有一個(gè)桌子類對(duì)象,還有一個(gè)棋子類對(duì)象,當(dāng)我們對(duì)他們發(fā)出“移動(dòng)”的消息時(shí),兩個(gè)類對(duì)象可以有不同的行為。一個(gè)程序中同名的不同方法共存,主要通過子類對(duì)父類方法的覆蓋來實(shí)現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計(jì)中有兩種多態(tài)性,即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過函數(shù)重載(包括運(yùn)算符重載)來實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過虛函數(shù)來實(shí)現(xiàn)的。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語7、多態(tài)性面向?qū)ο笙到y(tǒng)的多態(tài)性是指不同的對(duì)象收到相同的消息時(shí)執(zhí)行不同的操作?!耙环N接口,多種方法”例如:有一個(gè)桌子類對(duì)象,還有一個(gè)棋子類對(duì)象,當(dāng)我們對(duì)他們發(fā)出“移動(dòng)”的消息時(shí),兩個(gè)類對(duì)象可以有不同的行為。一個(gè)程序中同名的不同方法共存,主要通過子類對(duì)父類方法的覆蓋來實(shí)現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計(jì)中有兩種多態(tài)性,即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過函數(shù)重載(包括運(yùn)算符重載)來實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過虛函數(shù)來實(shí)現(xiàn)的。1.1面向?qū)ο蟪绦蛟O(shè)計(jì)二、面向?qū)ο笮g(shù)語主要內(nèi)容132面向?qū)ο蟪绦蛟O(shè)計(jì)類與對(duì)象C++語法1.2C++語法C++程序概貌C++的數(shù)據(jù)類型C++的變量與命名常量C++用戶自定義數(shù)據(jù)類型C++運(yùn)算符、表達(dá)式C++語句C++函數(shù)異常處理機(jī)制1.2C++語法一、C++程序概貌第一個(gè)C++程序Example_1.cpp1.2C++語法一、C++程序概貌1、ISO/ANSIC++頭文件1.2C++語法一、C++程序概貌2、命名空間1.2C++語法一、C++程序概貌2、命名空間命名空間是ANSIC++引入的可以由用戶命名的作用域,用來處理程序中常見的同名沖突。1.2C++語法一、C++程序概貌3、main()函數(shù)1.2C++語法一、C++程序概貌4、輸入和輸出一、C++程序概貌5、注釋1.2C++語法C++的注釋同C的注釋,有兩種:行注釋//塊注釋/**/二、C++數(shù)據(jù)類型1、整數(shù)類型——整型1.2C++語法二、C++數(shù)據(jù)類型1、整數(shù)類型——字符型1.2C++語法二、C++數(shù)據(jù)類型1、整數(shù)類型——布爾型1.2C++語法二、C++數(shù)據(jù)類型2、浮點(diǎn)類型1.2C++語法三、變量和命名常量1、標(biāo)識(shí)符1.2C++語法2、變量的聲明三、變量和命名常量1.2C++語法3、常量(Nameconstant)——字面常量三、變量和命名常量1.2C++語法3、常量(Nameconstant)——命名常量三、變量和命名常量1.2C++語法3、常量(Nameconstant)——命名常量三、變量和命名常量1.2C++語法4、易變變量和volatile關(guān)鍵字三、變量和命名常量1.2C++語法四、用戶自定義類型1.2C++語法五、C++運(yùn)算符1.2C++語法1、常用運(yùn)算符五、C++運(yùn)算符1.2C++語法2、動(dòng)態(tài)內(nèi)存分配和釋放運(yùn)算符:new和delete五、C++運(yùn)算符1.2C++語法3、類型轉(zhuǎn)換運(yùn)算符——隱式轉(zhuǎn)換五、C++運(yùn)算符1.2C++語法3、類型轉(zhuǎn)換運(yùn)算符——顯式轉(zhuǎn)換六、C++語句1.2C++語法1、簡(jiǎn)單語句和復(fù)合語句

2、流程控制語句

選擇,循環(huán),break,continue,goto,return七、函數(shù)1.2C++語法1、函數(shù)原型

七、函數(shù)1.2C++語法2、函數(shù)參數(shù)——傳值調(diào)用——參數(shù)不被改變——const——缺省參數(shù)

七、函數(shù)1.2C++語法3、函數(shù)返回值

七、函數(shù)1.2C++語法4、函數(shù)重載七、函數(shù)1.2C++語法5、內(nèi)聯(lián)函數(shù)七、函數(shù)1.2C++語法5、變量存儲(chǔ)方式七、函數(shù)1.2C++語法6、變量作用范圍八、異常處理機(jī)制1.2C++語法主要內(nèi)容132面向?qū)ο蟪绦蛟O(shè)計(jì)對(duì)象與類C++語法一、類的構(gòu)成1.3類與對(duì)象類是C++對(duì)C中結(jié)構(gòu)的擴(kuò)展,類和對(duì)象是C++的重要特性,它們使得C++成為面向?qū)ο蟮木幊陶Z言。類是用戶自定義的類型,如果程序中要用到類,必須提前說明,或者使用已存在的類(別人寫好的類、標(biāo)準(zhǔn)庫中的類等),C++語法本身并不提供現(xiàn)成的類的名稱、結(jié)構(gòu)和內(nèi)容。類只是一個(gè)模板(Template),編譯后不占用內(nèi)存空間。C++中新增的關(guān)鍵字class,用來定義類。類的成員分兩部分:一部分對(duì)應(yīng)數(shù)據(jù)的狀態(tài),稱為成員變量,另一部分為作用于該數(shù)據(jù)狀態(tài)的函數(shù),稱為成員函數(shù)。成員變量和成員函數(shù),它們統(tǒng)稱為類的成員(Member)C++類成員的訪問權(quán)限

private、protected和public稱為訪問權(quán)限關(guān)鍵字private部分稱為類的私有部分,這一部分的數(shù)據(jù)成員和成員函數(shù)稱為類的私有成員。私有成員只能由本類的成員函數(shù)訪問,而類外部的任何訪問都是非法的。public部分稱為類的公有部分,這部分的數(shù)據(jù)成員和成員函數(shù)稱為類的公有成員。公有成員可以由程序中的函數(shù)訪問,它對(duì)外是完全開放的。protected部分稱為類的保護(hù)部分,這部分的數(shù)據(jù)成員和成員函數(shù)稱為類的保護(hù)成員。保護(hù)成員可以由本類的成員函數(shù)訪問,也可以由本類的派生類的成員函數(shù)訪問,而類外的任何訪問都是非法的。一、類的構(gòu)成1.3類與對(duì)象一、類的構(gòu)成1.3類與對(duì)象1、類的聲明一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(1)

普通成員函數(shù)形式即在類的聲明中只給出成員函數(shù)的原型,而成員函數(shù)體寫在類的外部。返回類型成員函數(shù)(參數(shù)列表);類外定義的一般形式是:返回類型類名∷成員函數(shù)名(參數(shù)表)

{

//函數(shù)體

}一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(2)將成員函數(shù)以內(nèi)聯(lián)函數(shù)的形式進(jìn)行說明有兩種格式將成員函數(shù)聲明為類的內(nèi)聯(lián)函數(shù):①隱式聲明:直接將函數(shù)聲明在類內(nèi)部。一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(2)將成員函數(shù)以內(nèi)聯(lián)函數(shù)的形式進(jìn)行說明有兩種格式將成員函數(shù)聲明為類的內(nèi)聯(lián)函數(shù):②顯式聲明:在類聲明中只給出成員函數(shù)的原型,而成員函數(shù)體寫在類的外部。為了使它起內(nèi)聯(lián)函數(shù)的作用,在成員函數(shù)返回類型前冠以關(guān)鍵字”inline”。這種成員函數(shù)在類外定義的一般形式是:inline

返回類型類名::成員函數(shù)名(參數(shù)表)

{

//函數(shù)體

}一、類的構(gòu)成1.3類與對(duì)象2、成員函數(shù)的聲明成員函數(shù)的聲明通常采用以下兩種方式:(2)將成員函數(shù)以內(nèi)聯(lián)函數(shù)的形式進(jìn)行說明注意:①使用inline說明內(nèi)聯(lián)函數(shù)時(shí),必須使函數(shù)體和inline說明結(jié)合在一起,否則編譯器將它作為普通函數(shù)處理。②通常只有較短的成員函數(shù)才定義為內(nèi)聯(lián)函數(shù),對(duì)較長(zhǎng)的成員函數(shù)最好作為一般函數(shù)處理。2、成員函數(shù)的聲明類的聲明和成員函數(shù)的定義都是類定義的一部分,在實(shí)際開發(fā)中,我們通常將類的聲明放在頭文件中,而將成員函數(shù)的定義放在源文件中。一、類的構(gòu)成1.3類與對(duì)象3、類封裝根據(jù)C++軟件設(shè)計(jì)規(guī)范,實(shí)際項(xiàng)目開發(fā)中的成員變量以及只在類內(nèi)部使用的成員函數(shù)(只被成員函數(shù)調(diào)用的成員函數(shù))都建議聲明為private,而只將允許通過對(duì)象調(diào)用的成員函數(shù)聲明為public。另外還有一個(gè)關(guān)鍵字protected,聲明為protected的成員在類外也不能通過對(duì)象訪問,但是在它的派生類內(nèi)部可以訪問,這點(diǎn)將在后續(xù)章節(jié)中介紹,現(xiàn)在只需要知道protected屬性的成員在類外無法訪問即可。一、類的構(gòu)成1.3類與對(duì)象3、類封裝構(gòu)造函數(shù)和析構(gòu)函數(shù)都是類的成員函數(shù),但它們都是特殊的成員函數(shù),執(zhí)行特殊的功能,不用調(diào)用便自動(dòng)執(zhí)行,而且這些函數(shù)的名字與類的名字有關(guān)。C++語言中有一些成員函數(shù)性質(zhì)是特殊的,這些成員函數(shù)負(fù)責(zé)對(duì)象的建立、刪除。這些函數(shù)的特殊性在于可以由編譯器自動(dòng)地隱含調(diào)用,其中一些函數(shù)調(diào)用格式采用運(yùn)算符函數(shù)重載的語法。C++引進(jìn)一個(gè)自動(dòng)完成對(duì)象初始化過程的機(jī)制,這就是類的構(gòu)造函數(shù)。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++構(gòu)造函數(shù)構(gòu)造函數(shù):特殊的成員函數(shù),它的名字和類名相同,沒有返回值,不需要用戶顯式調(diào)用(用戶也不能調(diào)用),而是在創(chuàng)建對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的調(diào)用是強(qiáng)制性的,一旦在類中定義了構(gòu)造函數(shù),那么創(chuàng)建對(duì)象時(shí)就一定要調(diào)用,不調(diào)用是錯(cuò)誤的。如果有多個(gè)重載的構(gòu)造函數(shù),那么創(chuàng)建對(duì)象時(shí)提供的實(shí)參必須和其中的一個(gè)構(gòu)造函數(shù)匹配;反過來說,創(chuàng)建對(duì)象時(shí)只有一個(gè)構(gòu)造函數(shù)會(huì)被調(diào)用。一個(gè)類必須有構(gòu)造函數(shù),要么用戶自己定義,要么編譯器自動(dòng)生成。一旦用戶自己定義了構(gòu)造函數(shù),不管有幾個(gè),也不管形參如何,編譯器都不再自動(dòng)生成。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++構(gòu)造函數(shù)構(gòu)造函數(shù)一般格式:一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++構(gòu)造函數(shù)它主要用于為對(duì)象分配空間,進(jìn)行初始化。成員變量的初始化順序與初始化列表中列出的變量的順序無關(guān),它只與成員變量在類中聲明的順序有關(guān)

。const用于類中成員變量時(shí),將類成員變?yōu)橹蛔x屬性(只讀:不能出現(xiàn)在“=”的左邊,但在類中仍可以用一個(gè)指針來修改其值。)所以不可以直接在類的構(gòu)造函數(shù)中初始化const的成員。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++析構(gòu)函數(shù)析構(gòu)函數(shù):在銷毀對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字和類名相同,而析構(gòu)函數(shù)的名字是在類名前面加一個(gè)~符號(hào)析構(gòu)函數(shù)(Destructor)也是一種特殊的成員函數(shù),沒有返回值。析構(gòu)函數(shù)沒有參數(shù),不能被重載,因此一個(gè)類只能有一個(gè)析構(gòu)函數(shù)。如果用戶沒有定義,編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)的析構(gòu)函數(shù)。析構(gòu)函數(shù)的作用并不是刪除對(duì)象,而是在對(duì)象被銷毀時(shí)調(diào)用完成一些清理工作。一、類的構(gòu)成1.3類與對(duì)象3、類封裝析構(gòu)函數(shù)的執(zhí)行時(shí)機(jī)在所有函數(shù)之外創(chuàng)建的對(duì)象是全局對(duì)象,它和全局變量類似,位于內(nèi)存分區(qū)中的全局?jǐn)?shù)據(jù)區(qū),程序在結(jié)束執(zhí)行時(shí)會(huì)調(diào)用這些對(duì)象的析構(gòu)函數(shù)。在函數(shù)內(nèi)部創(chuàng)建的對(duì)象是局部對(duì)象,它和局部變量類似,位于棧區(qū),函數(shù)執(zhí)行結(jié)束時(shí)會(huì)調(diào)用這些對(duì)象的析構(gòu)函數(shù)。new

創(chuàng)建的對(duì)象位于堆區(qū),通過delete

刪除時(shí)才會(huì)調(diào)用析構(gòu)函數(shù);如果沒有delete,析構(gòu)函數(shù)就不會(huì)被執(zhí)行。一、類的構(gòu)成1.3類與對(duì)象3、類封裝C++this指針this是C++中的一個(gè)關(guān)鍵字,一個(gè)const指針,它指向當(dāng)前對(duì)象,通過它可以訪問當(dāng)前對(duì)象的所有成員。this只能用在類的內(nèi)部,通過this可以訪問類的所有成員,包括private、protected、public屬性的。this雖然用在類的內(nèi)部,但是只有在對(duì)象被創(chuàng)建以后才會(huì)給this賦值。this只能在成員函數(shù)內(nèi)部使用,用在其他地方?jīng)]有意義,也是非法的。this作為隱式形參,本質(zhì)上是成員函數(shù)的局部變量,所以只能用在成員函數(shù)的內(nèi)部,并且只有在通過對(duì)象調(diào)用成員函數(shù)時(shí)才給this賦值一、類的構(gòu)成1.3類與對(duì)象二、對(duì)象定義和使用1.3類與對(duì)象在C++中,類也是一種用戶自定義數(shù)據(jù)類型,類的對(duì)象可以看成是該類類型的一個(gè)實(shí)例,定義一個(gè)對(duì)象和定義一個(gè)變量相似。類與對(duì)象間的關(guān)系,可以用數(shù)據(jù)類型int和整型變量i之間的關(guān)系類比。C++把類的變量叫做類的對(duì)象,對(duì)象也稱為類的實(shí)例。1、對(duì)象定義對(duì)象的定義,也稱對(duì)象的創(chuàng)建,在C++中可以用以下兩種方法定義對(duì)象:(1)在聲明類的同時(shí),直接定義對(duì)象。二、對(duì)象定義和使用1.3類與對(duì)象1、對(duì)象定義對(duì)象的定義,也稱對(duì)象的創(chuàng)建,在C++中可以用以下兩種方法定義對(duì)象:(2)聲明了類之后,在使用時(shí)再定義對(duì)象二、對(duì)象定義和使用1.3類與對(duì)象1、對(duì)象定義說明:在聲明類的同時(shí)定義的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論