本書以VisualStudio2010為開發(fā)環(huán)境,主要介紹了C++面向對象程序設計和Windows程序開發(fā)的技巧和方法。主要內容包括:C++語言基礎,C++面向對象程序設計的類、對象、繼承、重載、多態(tài)、虛函數和流等,對話框、菜單、工具欄和狀態(tài)欄、常用控件、圖形和文本處理、文檔/視圖、ADO數據庫編程技術,以及學生信息管理系統(tǒng)項目開發(fā)實例。同時,本書每章配備了大量的例題、習題和實驗題,并有項目開發(fā)案例,能幫助讀者快速掌握VisualC++程序設計及其應用。本書通俗易懂,重點突出,注重實際應用,主要培養(yǎng)學生程序設計應用能力和項目開發(fā)綜合能力。本書不僅可以作為高等院校計算機專業(yè)或相關專業(yè)的教材,也可作為用戶的自學和參考書。為了方便教學,本書還配有教學課件等教學資源包,任課教師和學生可以登錄“我們愛讀書”網(www.ibook4us.com)免費注冊并瀏覽,任課教師可以發(fā)郵件至hustpeiit@163.com免費索取。本書教學資源包中提供的源代碼全部經過精心測試,能夠在WindowsXP、Windows8系統(tǒng)下編譯和運行。
編者通過多年C++面向對象程序設計教學實踐和Visual C++項目開發(fā)經歷,結合高校應用型人才培養(yǎng)教學模式,突出理論性、實踐性,先進性,通俗性,精選案例,側重以C++語言為基礎,實現Windows應用程序開發(fā)為目標,培養(yǎng)學生項目開發(fā)的應用能力。
本書以Visual Studio 2010為開發(fā)環(huán)境。第1至3章介紹C++面向對象程序設計,第1章C++語言基礎,第2章C++面向對象程序設計,第3章多態(tài)性與虛函數,選例完整,突出重點。第4至7章介紹Windows圖形界面資源的創(chuàng)建和編程方法,重點介紹MFC應用程序的編程。第4章對話框,第5章菜單、工具欄和狀態(tài)欄設計,第6章常用控件,第7章圖形和文本處理。第8章文檔/視圖程序設計,讓讀者加深對Windows應用程序的來龍去脈的理解。第9章數據庫應用及項目開發(fā)實例,設計思路清晰,設計過程完整,所有實例代碼均調試通過。
本書各章提供了一定數量的習題和實驗題,習題主要考查學生對基本知識點的理解程度;實驗題是對能力的考查,要求學生具有一定的設計能力。實驗題有完整的操作步驟和代碼,便于學生掌握操作過程和代碼編寫。
本書不僅適合于教學,也適合于用Visual C++編程和開發(fā)應用程序的開發(fā)人員學習和參考。
本書在編寫過程中得到了武昌理工學院信息工程學院魏紹炎教授指導,由武昌理工學院彭玉華和黃薇、武漢工程科技學院劉艷擔任主編。武漢工程科技學院馮春華、武昌理工學院陽小蘭和吳亮、青島理工大學琴島學院江連海擔任副主編。其中第2、4、9章由彭玉華編寫,第6章由黃薇編寫,第7章由劉艷編寫,第8章由馮春華編寫,第1章由陽小蘭編寫,第3章由吳亮編寫,第5章由江連海編寫。高翠芬、趙永霞、溫靜、李娟、向紫欣、毛玲、謝文亮、陶楓、汪瀟、朱逢園、曾秀蓮、李嬋飛、陳靜為本書編寫提供了不少素材。全書由彭玉華統(tǒng)稿。
為了方便教學,本書還配有教學課件等教學資源包,任課教師和學生可以登錄“我們愛讀書”網(www.ibook4us.com)免費注冊并瀏覽,任課教師可以發(fā)郵件至hustpeiit 163.com免費索取。本書教學資源包中提供的源代碼全部經過精心測試,能夠在Windows XP、Windows 8系統(tǒng)下編譯和運行。
在本書編寫、修改過程中,作者參考了參考文獻中列舉的書籍及資料,在此向這些資料的作者表示誠摯的謝意!鑒于作者水平有限,書中難免有不當和錯誤之處,敬請廣大讀者批評、指正。
第1章C++語言基礎(1)
1.1C++概述(1)
1.2C++的輸入與輸出(5)
1.3C++的函數(16)
1.4指針和引用(26)
1.5C++新增運算符(31)
1.6Visual Studio.NET 集成開發(fā)環(huán)境(34)習題1(36)
實驗1學生成績計算(41)第2章C++面向對象程序設計(43)
2.1類和對象(44)
2.2類的共享(61)
2.3類的繼承和派生(69)習題2(87)
實驗2使用面向對象方法實現學生成績計算(94)第3章多態(tài)性與虛函數(103)
3.1類的多重繼承(103)
3.2類的多態(tài)性(106)
3.3運算符的重載(111)
3.4模板(119)習題3(123)
實驗3使用面向對象方法實現學生成績計算(131)第4章對話框(138)
4.1MFC應用程序(138)
4.2對話框的使用(140)
4.3消息對話框(155)
4.4通用對話框(158)習題4(165)
實驗4登錄對話框(165)第5章菜單、工具欄和狀態(tài)欄設計(169)
5.1菜單設計(169)
5.2工具欄(180)
5.3狀態(tài)欄(184)
5.4菜單、工具欄和狀態(tài)欄綜合實例(187)習題5(190)
實驗5菜單、工具欄和狀態(tài)欄綜合應用的單文檔程序(191)第6章常用控件(193)
6.1控件概述(193)
6.2靜態(tài)控件和按鈕(196)
6.3編輯框和旋轉按鈕(201)
6.4列表框(209)
6.5組合框(215)
6.6滾動條(220)
6.7滑動條(225)
6.8進度條(229)
6.9日期時間控件、圖像列表和標簽控件(234)
6.10文件系統(tǒng)控件(242)習題6(245)
實驗6常用控件使用(246)第7章圖形和文本處理(252)
7.1圖形設備接口概述(252)
7.2簡單圖形繪制(259)
7.3文本處理(263)
7.4圖像處理(269)習題7(270)
實驗7繪圖對象使用(271)第8章文檔/視圖程序設計(276)
8.1文檔/視圖結構(276)
8.2文檔和視圖應用示例(287)習題8(291)
實驗8文檔/視圖打印的應用程序(292)第9章數據庫應用及項目開發(fā)實例(298)
9.1數據庫應用技術概述(298)
9.2使用ADO訪問數據庫(299)
9.3學生信息管理系統(tǒng)項目開發(fā)實例(318)習題9(374)參考文獻(375)
第2章C++面向對象程序設計
第2
章
C++面向對象程序設計
本章要點
■類和對象的概念
■構造函數和析構函數的定義及作用
■靜態(tài)成員變量和靜態(tài)成員函數
■友元函數和友元類
■派生類的定義
C++是一種面向對象的程序設計語言,與傳統(tǒng)的面向過程的程序設計語言相比,C++引入了面向對象的程序設計方法。在面向對象的程序設計方法出現以前,程序設計一直采用面向過程的設計方法,要求程序設計人員必須全面考慮程序執(zhí)行的每一個步驟和具體要求,如先做什么、后做什么、怎么做、如何做,面對的是程序的整個過程,并且在整個程序中,數據和處理數據的過程是分離的、相互獨立的,當數據的結構發(fā)生局部改變時,整個程序中與其相關的處理過程也必須做相應的修改,程序的可重用性差,不適合編寫現代大型應用程序。面向對象的程序設計方法與面向過程的程序設計方法不同的是,在認識問題、處理問題時,不再將問題實現的步驟放在首位考慮,而是將客觀世界看作是由對象組成,向對象發(fā)送消息,將激活對象所具有的行為。這種被稱為“對象”的事物就是所要處理的問題。
面向對象的程序設計方法是將任何事物都看成一個對象,每個對象都是由數據和處理數據的操作方法構成的。在程序設計時,將整個程序分解成多個能夠完成獨立功能的對象,將要處理的數據分別屬于不同的對象,并封裝在對象中,對象與對象之間可以通過消息進行通信,只要激發(fā)每個對象完成了相對獨立的操作功能,整個程序就會自然完成全部操作?梢赃@樣認為,面向對象程序設計注重對象的結果,忽略對象內部的具體過程。
面向對象的程序設計方法,模仿了客觀世界中物體被組合在一起的方式,將人們習慣的思維和表達方式應用在程序設計中,從而使程序設計可以按照人們通常習慣的思維方式進行。使用這種設計方法,可以設計出安全可靠、易于理解、可重用性好的應用程序。
例如,處理一個關于學生成績的問題。對象:學生;數據:姓名、年齡、分數、學號;消息:統(tǒng)計總分、平均分、排序。
對象、消息都可在面向對象方式的程序中體現為數值化形成。雖然“面向對象”這個名詞是第一次出現,但事實上每個人原來就是以“面向對象”的方法認識、理解世界的。不管是自然界的萬物還是各種虛擬的事物,都可被視為具有各種數值化屬性,能產生各種不同行為的對象。
OOP的設計規(guī)則就是在程序中保留各種對象屬性,規(guī)劃出使用者與對象,以及對象與對象間的交互關系,來完成程序數據處理的功能,而不是只重視處理問題的步驟。
激發(fā)科學家們產生OOP原始動機就是在利用計算機來仿真模擬各種生物交互行為時所采用的方式。OOP認為:現實世界是由一系列彼此相關且能夠相互通信的實體組成,這些實體就稱為對象。
采用此方法設計時一般要經過三個步驟:
(1)確定對象,確定問題領域內所含的對象;
(2)將對象分類,按一定的層次關系組織、定義;
(3)表達、組織對象與外界的交互。
OOP風格的程序會弱化語句、操作序列的次序,強化模塊化的外在表現。不管是有形的或無形的事物,只要可形容其狀態(tài)、特征,都可視為對象。它創(chuàng)造了一種包裝的結構,將程序要處理的事物的方方面面組合在一起,形成程序中的一個有意義的軟件單元。所以,其程序具有抽象、封裝、繼承、多態(tài)的特征。
(1)抽象:將對象(程序要處理的事物)數值化。
(2)封裝:將所有涉及該對象的數據、行為組合在一個軟件單元(類)中。
(3)繼承:通過某個軟件單元的某些特征的再利用產生新對象。
(4)多態(tài):同樣的消息在不同對象中的響應不同。
采用這樣的方式表達程序比較接近實際的對應關系,不易被算法所分隔,因此程序容易理解,結構較自然,比較容易維護,適合編寫大型應用程序。
本章將首先介紹類和對象的有關定義,接著講述類的共享、類的繼承和派生。
2.1類和對象
在現實生活中,人們習慣將具有相同本質的事物劃分成一類,這是人類在認識客觀世界時習慣采用的思維方法。例如,當你看見一個人時,你之所以認為他是一個人,是因為他具有人類的外形、情感、語言等人類的本質特征,而不管他是什么人種、是男人還是女人、是老人還是兒童等。不難看出,人們將客觀世界中的事物進行分類的基本方法是忽略事物的非本質特征(例如上述所說的人種、性別、年齡等),注意事物的本質特征(如上述所說的外形、情感、語言等),只要是本質特征相同的,就將這些事物劃分為一類,屬于同一類的事物應該具有相同的基本特征。所以說,具體的人就是人類的對象,人類就是人的類型。
面向對象的程序設計方法認為:對象是包含客觀世界中某一事物特征的抽象實體,現實世界中的每一個事物都可以看成對象。從計算機的角度來看,一個對象應包括兩個要素:數據和處理這些數據的操作方法?梢赃@樣認為:對象是一個包含數據和處理這些數據方法的集合。C++中,對象的類型稱為“類”(class),類集中體現了對象的特征和共性,是對象的抽象,是一種特殊的數據類型,對象是類的具體實例,是“類”類型的“變量”。對象和類是密切相關的,C++面向對象編程實質就是面向“類”類型變量編程。C++程序設計的重點應在類的定義實現上。
2.1.1類的定義
類就是OOP風格的程序所要反映的體現在程序中的軟件單元。類是每一個OOP風格的程序不可缺少的成分,其作用是對數據進行封裝、隱藏和處理。類之于C++就如同函數之于C語言。
函數是邏輯上相關的語句組合到一起,主要用于執(zhí)行;而類則是邏輯上相關的函數及數據的集合,它的集成程度更高,主要不是用來執(zhí)行,而是提供程序資源(數據和函數)。
面向對象程序設計中的類都具有以下兩個屬性:
(1)狀態(tài):數據成員;
(2)行為:函數成員表示能改變數據成員的操作。
借助這兩者來抽象描述事物。
例如,以學生這個群體為例,當它成為程序要處理的事物或是問題所涉及的事物后,就會形成學生類:
狀態(tài):姓名、學號、年齡、身高。
行為:統(tǒng)計分數,按學號查詢。
再例如,設計一程序對電梯的運行進行控制的電梯類:
狀態(tài):速度、載客數、樓層號。
行為:樓層選擇、計算人數、上下驅動。
面向對象程序設計中的“類”正是抽象出對象的共性而形成的,它為屬于該類的對象提供了抽象的描述。