本書以VisualStudio2010為開發(fā)環(huán)境,主要介紹了C++面向?qū)ο蟪绦蛟O(shè)計(jì)和Windows程序開發(fā)的技巧和方法。主要內(nèi)容包括:C++語言基礎(chǔ),C++面向?qū)ο蟪绦蛟O(shè)計(jì)的類、對象、繼承、重載、多態(tài)、虛函數(shù)和流等,對話框、菜單、工具欄和狀態(tài)欄、常用控件、圖形和文本處理、文檔/視圖、ADO數(shù)據(jù)庫編程技術(shù),以及學(xué)生信息管理系統(tǒng)項(xiàng)目開發(fā)實(shí)例。同時(shí),本書每章配備了大量的例題、習(xí)題和實(shí)驗(yàn)題,并有項(xiàng)目開發(fā)案例,能幫助讀者快速掌握VisualC++程序設(shè)計(jì)及其應(yīng)用。本書通俗易懂,重點(diǎn)突出,注重實(shí)際應(yīng)用,主要培養(yǎng)學(xué)生程序設(shè)計(jì)應(yīng)用能力和項(xiàng)目開發(fā)綜合能力。本書不僅可以作為高等院校計(jì)算機(jī)專業(yè)或相關(guān)專業(yè)的教材,也可作為用戶的自學(xué)和參考書。為了方便教學(xué),本書還配有教學(xué)課件等教學(xué)資源包,任課教師和學(xué)生可以登錄“我們愛讀書”網(wǎng)(www.ibook4us.com)免費(fèi)注冊并瀏覽,任課教師可以發(fā)郵件至hustpeiit@163.com免費(fèi)索取。本書教學(xué)資源包中提供的源代碼全部經(jīng)過精心測試,能夠在WindowsXP、Windows8系統(tǒng)下編譯和運(yùn)行。
第1章C++語言基礎(chǔ)(1)
1.1C++概述(1)
1.2C++的輸入與輸出(5)
1.3C++的函數(shù)(16)
1.4指針和引用(26)
1.5C++新增運(yùn)算符(31)
1.6Visual Studio.NET 集成開發(fā)環(huán)境(34)習(xí)題1(36)
實(shí)驗(yàn)1學(xué)生成績計(jì)算(41)第2章C++面向?qū)ο蟪绦蛟O(shè)計(jì)(43)
2.1類和對象(44)
2.2類的共享(61)
2.3類的繼承和派生(69)習(xí)題2(87)
實(shí)驗(yàn)2使用面向?qū)ο蠓椒▽?shí)現(xiàn)學(xué)生成績計(jì)算(94)第3章多態(tài)性與虛函數(shù)(103)
3.1類的多重繼承(103)
3.2類的多態(tài)性(106)
3.3運(yùn)算符的重載(111)
3.4模板(119)習(xí)題3(123)
實(shí)驗(yàn)3使用面向?qū)ο蠓椒▽?shí)現(xiàn)學(xué)生成績計(jì)算(131)第4章對話框(138)
4.1MFC應(yīng)用程序(138)
4.2對話框的使用(140)
4.3消息對話框(155)
4.4通用對話框(158)習(xí)題4(165)
實(shí)驗(yàn)4登錄對話框(165)第5章菜單、工具欄和狀態(tài)欄設(shè)計(jì)(169)
5.1菜單設(shè)計(jì)(169)
5.2工具欄(180)
5.3狀態(tài)欄(184)
5.4菜單、工具欄和狀態(tài)欄綜合實(shí)例(187)習(xí)題5(190)
實(shí)驗(yàn)5菜單、工具欄和狀態(tài)欄綜合應(yīng)用的單文檔程序(191)第6章常用控件(193)
6.1控件概述(193)
6.2靜態(tài)控件和按鈕(196)
6.3編輯框和旋轉(zhuǎn)按鈕(201)
6.4列表框(209)
6.5組合框(215)
6.6滾動條(220)
6.7滑動條(225)
6.8進(jìn)度條(229)
6.9日期時(shí)間控件、圖像列表和標(biāo)簽控件(234)
6.10文件系統(tǒng)控件(242)習(xí)題6(245)
實(shí)驗(yàn)6常用控件使用(246)第7章圖形和文本處理(252)
7.1圖形設(shè)備接口概述(252)
7.2簡單圖形繪制(259)
7.3文本處理(263)
7.4圖像處理(269)習(xí)題7(270)
實(shí)驗(yàn)7繪圖對象使用(271)第8章文檔/視圖程序設(shè)計(jì)(276)
8.1文檔/視圖結(jié)構(gòu)(276)
8.2文檔和視圖應(yīng)用示例(287)習(xí)題8(291)
實(shí)驗(yàn)8文檔/視圖打印的應(yīng)用程序(292)第9章數(shù)據(jù)庫應(yīng)用及項(xiàng)目開發(fā)實(shí)例(298)
9.1數(shù)據(jù)庫應(yīng)用技術(shù)概述(298)
9.2使用ADO訪問數(shù)據(jù)庫(299)
9.3學(xué)生信息管理系統(tǒng)項(xiàng)目開發(fā)實(shí)例(318)習(xí)題9(374)參考文獻(xiàn)(375)
第2章C++面向?qū)ο蟪绦蛟O(shè)計(jì)
第2
章
C++面向?qū)ο蟪绦蛟O(shè)計(jì)
本章要點(diǎn)
■類和對象的概念
■構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義及作用
■靜態(tài)成員變量和靜態(tài)成員函數(shù)
■友元函數(shù)和友元類
■派生類的定義
C++是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,與傳統(tǒng)的面向過程的程序設(shè)計(jì)語言相比,C++引入了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。在面向?qū)ο蟮某绦蛟O(shè)計(jì)方法出現(xiàn)以前,程序設(shè)計(jì)一直采用面向過程的設(shè)計(jì)方法,要求程序設(shè)計(jì)人員必須全面考慮程序執(zhí)行的每一個步驟和具體要求,如先做什么、后做什么、怎么做、如何做,面對的是程序的整個過程,并且在整個程序中,數(shù)據(jù)和處理數(shù)據(jù)的過程是分離的、相互獨(dú)立的,當(dāng)數(shù)據(jù)的結(jié)構(gòu)發(fā)生局部改變時(shí),整個程序中與其相關(guān)的處理過程也必須做相應(yīng)的修改,程序的可重用性差,不適合編寫現(xiàn)代大型應(yīng)用程序。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法與面向過程的程序設(shè)計(jì)方法不同的是,在認(rèn)識問題、處理問題時(shí),不再將問題實(shí)現(xiàn)的步驟放在首位考慮,而是將客觀世界看作是由對象組成,向?qū)ο蟀l(fā)送消息,將激活對象所具有的行為。這種被稱為“對象”的事物就是所要處理的問題。
面向?qū)ο蟮某绦蛟O(shè)計(jì)方法是將任何事物都看成一個對象,每個對象都是由數(shù)據(jù)和處理數(shù)據(jù)的操作方法構(gòu)成的。在程序設(shè)計(jì)時(shí),將整個程序分解成多個能夠完成獨(dú)立功能的對象,將要處理的數(shù)據(jù)分別屬于不同的對象,并封裝在對象中,對象與對象之間可以通過消息進(jìn)行通信,只要激發(fā)每個對象完成了相對獨(dú)立的操作功能,整個程序就會自然完成全部操作。可以這樣認(rèn)為,面向?qū)ο蟪绦蛟O(shè)計(jì)注重對象的結(jié)果,忽略對象內(nèi)部的具體過程。
面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,模仿了客觀世界中物體被組合在一起的方式,將人們習(xí)慣的思維和表達(dá)方式應(yīng)用在程序設(shè)計(jì)中,從而使程序設(shè)計(jì)可以按照人們通常習(xí)慣的思維方式進(jìn)行。使用這種設(shè)計(jì)方法,可以設(shè)計(jì)出安全可靠、易于理解、可重用性好的應(yīng)用程序。
例如,處理一個關(guān)于學(xué)生成績的問題。對象:學(xué)生;數(shù)據(jù):姓名、年齡、分?jǐn)?shù)、學(xué)號;消息:統(tǒng)計(jì)總分、平均分、排序。
對象、消息都可在面向?qū)ο蠓绞降某绦蛑畜w現(xiàn)為數(shù)值化形成。雖然“面向?qū)ο蟆边@個名詞是第一次出現(xiàn),但事實(shí)上每個人原來就是以“面向?qū)ο蟆钡姆椒ㄕJ(rèn)識、理解世界的。不管是自然界的萬物還是各種虛擬的事物,都可被視為具有各種數(shù)值化屬性,能產(chǎn)生各種不同行為的對象。
OOP的設(shè)計(jì)規(guī)則就是在程序中保留各種對象屬性,規(guī)劃出使用者與對象,以及對象與對象間的交互關(guān)系,來完成程序數(shù)據(jù)處理的功能,而不是只重視處理問題的步驟。
激發(fā)科學(xué)家們產(chǎn)生OOP原始動機(jī)就是在利用計(jì)算機(jī)來仿真模擬各種生物交互行為時(shí)所采用的方式。OOP認(rèn)為:現(xiàn)實(shí)世界是由一系列彼此相關(guān)且能夠相互通信的實(shí)體組成,這些實(shí)體就稱為對象。
采用此方法設(shè)計(jì)時(shí)一般要經(jīng)過三個步驟:
(1)確定對象,確定問題領(lǐng)域內(nèi)所含的對象;
(2)將對象分類,按一定的層次關(guān)系組織、定義;
(3)表達(dá)、組織對象與外界的交互。
OOP風(fēng)格的程序會弱化語句、操作序列的次序,強(qiáng)化模塊化的外在表現(xiàn)。不管是有形的或無形的事物,只要可形容其狀態(tài)、特征,都可視為對象。它創(chuàng)造了一種包裝的結(jié)構(gòu),將程序要處理的事物的方方面面組合在一起,形成程序中的一個有意義的軟件單元。所以,其程序具有抽象、封裝、繼承、多態(tài)的特征。
(1)抽象:將對象(程序要處理的事物)數(shù)值化。
(2)封裝:將所有涉及該對象的數(shù)據(jù)、行為組合在一個軟件單元(類)中。
(3)繼承:通過某個軟件單元的某些特征的再利用產(chǎn)生新對象。
(4)多態(tài):同樣的消息在不同對象中的響應(yīng)不同。
采用這樣的方式表達(dá)程序比較接近實(shí)際的對應(yīng)關(guān)系,不易被算法所分隔,因此程序容易理解,結(jié)構(gòu)較自然,比較容易維護(hù),適合編寫大型應(yīng)用程序。
本章將首先介紹類和對象的有關(guān)定義,接著講述類的共享、類的繼承和派生。
2.1類和對象
在現(xiàn)實(shí)生活中,人們習(xí)慣將具有相同本質(zhì)的事物劃分成一類,這是人類在認(rèn)識客觀世界時(shí)習(xí)慣采用的思維方法。例如,當(dāng)你看見一個人時(shí),你之所以認(rèn)為他是一個人,是因?yàn)樗哂腥祟惖耐庑、情感、語言等人類的本質(zhì)特征,而不管他是什么人種、是男人還是女人、是老人還是兒童等。不難看出,人們將客觀世界中的事物進(jìn)行分類的基本方法是忽略事物的非本質(zhì)特征(例如上述所說的人種、性別、年齡等),注意事物的本質(zhì)特征(如上述所說的外形、情感、語言等),只要是本質(zhì)特征相同的,就將這些事物劃分為一類,屬于同一類的事物應(yīng)該具有相同的基本特征。所以說,具體的人就是人類的對象,人類就是人的類型。
面向?qū)ο蟮某绦蛟O(shè)計(jì)方法認(rèn)為:對象是包含客觀世界中某一事物特征的抽象實(shí)體,現(xiàn)實(shí)世界中的每一個事物都可以看成對象。從計(jì)算機(jī)的角度來看,一個對象應(yīng)包括兩個要素:數(shù)據(jù)和處理這些數(shù)據(jù)的操作方法?梢赃@樣認(rèn)為:對象是一個包含數(shù)據(jù)和處理這些數(shù)據(jù)方法的集合。C++中,對象的類型稱為“類”(class),類集中體現(xiàn)了對象的特征和共性,是對象的抽象,是一種特殊的數(shù)據(jù)類型,對象是類的具體實(shí)例,是“類”類型的“變量”。對象和類是密切相關(guān)的,C++面向?qū)ο缶幊虒?shí)質(zhì)就是面向“類”類型變量編程。C++程序設(shè)計(jì)的重點(diǎn)應(yīng)在類的定義實(shí)現(xiàn)上。
2.1.1類的定義
類就是OOP風(fēng)格的程序所要反映的體現(xiàn)在程序中的軟件單元。類是每一個OOP風(fēng)格的程序不可缺少的成分,其作用是對數(shù)據(jù)進(jìn)行封裝、隱藏和處理。類之于C++就如同函數(shù)之于C語言。
函數(shù)是邏輯上相關(guān)的語句組合到一起,主要用于執(zhí)行;而類則是邏輯上相關(guān)的函數(shù)及數(shù)據(jù)的集合,它的集成程度更高,主要不是用來執(zhí)行,而是提供程序資源(數(shù)據(jù)和函數(shù))。
面向?qū)ο蟪绦蛟O(shè)計(jì)中的類都具有以下兩個屬性:
(1)狀態(tài):數(shù)據(jù)成員;
(2)行為:函數(shù)成員表示能改變數(shù)據(jù)成員的操作。
借助這兩者來抽象描述事物。
例如,以學(xué)生這個群體為例,當(dāng)它成為程序要處理的事物或是問題所涉及的事物后,就會形成學(xué)生類:
狀態(tài):姓名、學(xué)號、年齡、身高。
行為:統(tǒng)計(jì)分?jǐn)?shù),按學(xué)號查詢。
再例如,設(shè)計(jì)一程序?qū)﹄娞莸倪\(yùn)行進(jìn)行控制的電梯類:
狀態(tài):速度、載客數(shù)、樓層號。
行為:樓層選擇、計(jì)算人數(shù)、上下驅(qū)動。
面向?qū)ο蟪绦蛟O(shè)計(jì)中的“類”正是抽象出對象的共性而形成的,它為屬于該類的對象提供了抽象的描述。