版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Visual_C++.NET程序設(shè)計(jì)教程與上機(jī)指導(dǎo)》課件《Visual_C++.NET程序設(shè)計(jì)教程與上機(jī)指導(dǎo)》課件1第1章概述教學(xué)提示:微軟推出.NET是為了適應(yīng)Internet的發(fā)展而作出的應(yīng)對(duì)決策,其中VisualC++.NET是微軟的VisualC++系列軟件的升級(jí)版本,用它來(lái)開(kāi)發(fā)本機(jī)應(yīng)用程序或InternetWeb程序都有顯著的增強(qiáng)。本章主要介紹VisualC++.NET的開(kāi)發(fā)界面及可以開(kāi)發(fā)的常用程序類型。教學(xué)目標(biāo):初步介紹VisualC++.NET開(kāi)發(fā)界面,使初學(xué)者對(duì)VisualC++.NET的開(kāi)發(fā)環(huán)境有一個(gè)整體的認(rèn)識(shí)。本書(shū)用的軟件版本為VisualStudio.NET2003中文版,如果機(jī)器上裝的不是這個(gè)版本,可能界面上有些差異,但是這些差異非常小,只要稍微注意一下,基本上不會(huì)妨礙學(xué)習(xí)。如果還是不太放心的話,請(qǐng)按第1章的步驟安裝此版本軟件,這樣就可以省去一些麻煩。第1章概述教學(xué)提示:微軟推出21.1VisualC++.NET簡(jiǎn)介微軟于2000年6月22日向全球發(fā)布了.NET,引起全球的轟動(dòng),.NET使程序員的編程方式產(chǎn)生了很大的變化。.NET平臺(tái)在以Internet為基礎(chǔ)的計(jì)算和通信激增的背景下,通過(guò)先進(jìn)的軟件技術(shù),利用網(wǎng)絡(luò)協(xié)議和格式協(xié)調(diào)眾多的智能設(shè)備與網(wǎng)站,從而提供更簡(jiǎn)單、更為個(gè)性化且更有效的Internet服務(wù)。微軟為了配合其.NET戰(zhàn)略,發(fā)布了VisualStudio.NET。VisualStudio.NET主要包括三套產(chǎn)品:VisualC#.NET、ViusalBasic.NET和VisualC++.NET。1.1VisualC++.NET簡(jiǎn)介微軟31.2安裝VisualC++.NETVisualC++.NET是VisualStudio.NET的一部分,表1.1以安裝VisualStudio.NET2003為例,列出了安裝系統(tǒng)需求。滿足上述要求的計(jì)算機(jī)可以進(jìn)行安裝了。VisualStudio.NET2003共有6張安裝光盤(pán),包括2張VisualStudio.NET安裝光盤(pán),1張系統(tǒng)必備盤(pán),3張MSDN安裝盤(pán)。將VisualStudio.NET的第一張安裝光盤(pán)放入光驅(qū),即出現(xiàn)如圖1.1所示的畫(huà)面。然后,讀者可以按照安裝程序的步驟,首先安裝系統(tǒng)必備,系統(tǒng)必備包括一些開(kāi)發(fā).NET程序必需的Internet組件和.NET應(yīng)用程序框架。安裝完系統(tǒng)必備后,按照提示一步步安裝VisualStudio.NET,由于過(guò)程比較簡(jiǎn)單,在此就不贅述了。前兩步安裝完成后,最好安裝MSDN產(chǎn)品文檔,因?yàn)镸SDN中包含多達(dá)1.9GB的文檔和例子,而且可以很方便地查詢。1.2安裝VisualC++.NET4表1.1安裝VisualStudio.NET2003的系統(tǒng)要求處理器450兆赫(MHz)PentiumII處理器,推薦600MHzPentiumIII處理器操作系統(tǒng)Windows2000SP3以上內(nèi)存64MB,建議128MB硬盤(pán)至少900MB可用空間,可選的MSDN文檔需要額外的1.9GB可用空間驅(qū)動(dòng)器光盤(pán)安裝需要光驅(qū)顯示器建議17寸顯示器(1024x768或更高分辨率,顏色設(shè)置至少為256色)返回表1.1安裝VisualStudio.NET2005圖1.1VisualStudio.NET安裝程序返回圖1.1VisualStudio.NET安裝程序返回61.3VisualC++.NET開(kāi)發(fā)界面簡(jiǎn)介單擊Windows的【開(kāi)始】|【程序】|MicrosoftVisualStudio.NET2003命令,MicrosoftVisualStudio.NET2003即可以啟動(dòng)。其啟動(dòng)的初始界面如圖1.2所示。圖1.2VisualStudio.NET的起始頁(yè)1.3VisualC++.NET開(kāi)發(fā)界面簡(jiǎn)介7下面來(lái)新建一個(gè)VisualC++.NET項(xiàng)目,以便于更詳細(xì)地了解VisualC++.NET程序開(kāi)發(fā)環(huán)境。按照以下步驟,一步步進(jìn)行:首先單擊如圖1.2中的選項(xiàng)【項(xiàng)目】,再單擊【新建項(xiàng)目】按鈕,出現(xiàn)【新建項(xiàng)目】對(duì)話框,選擇左邊【項(xiàng)目類型】|【VisualC++項(xiàng)目】|MFC選項(xiàng),在右邊的【模板】框中單擊【MFC應(yīng)用程序】,再在【名稱】文本框中輸入項(xiàng)目名稱Jiao1_1,如圖1.3所示。圖1.3【新建項(xiàng)目】對(duì)話框返回下面來(lái)新建一個(gè)VisualC++.NE8單擊【確定】按鈕,即可進(jìn)入如圖1.4所示的【MFC應(yīng)用程序向?qū)А繉?duì)話框。在這里共有7個(gè)步驟供選擇,由于后面會(huì)詳細(xì)講解向?qū)У膭?chuàng)建步驟,所以現(xiàn)在都用默認(rèn)值,直接單擊【完成】按鈕即可創(chuàng)建一個(gè)多文檔應(yīng)用程序項(xiàng)目。圖1.4【MFC應(yīng)用程序向?qū)А繉?duì)話框返回單擊【確定】按鈕,即可進(jìn)入如圖1.4所示的【9可以在【解決方案資源管理器】視圖中點(diǎn)開(kāi)所生成的項(xiàng)目,即可看到本項(xiàng)目所包含的文件(如果找不到,可以單擊菜單【視圖】|【解決方案資源管理器】即可出現(xiàn))??梢噪p擊文件Jiao1_1.cpp,在中央的編輯器界面中進(jìn)行代碼的編寫(xiě)。其界面如圖1.5所示。圖1.5VisualC++.NET的界面返回可以在【解決方案資源管理器】視圖中點(diǎn)開(kāi)所生成10VisualC++.NET的集成界面包括菜單欄、工具欄、解決方案資源管理器、類視圖、資源視圖、動(dòng)態(tài)幫助、屬性窗口、輸出窗口,下面將進(jìn)行詳細(xì)介紹。
1.3.1菜單欄
1.3.2工具欄
1.3.3解決方案資源管理器
1.3.4類視圖
1.3.5資源視圖
1.3.6動(dòng)態(tài)幫助
1.3.7屬性窗口
1.3.8任務(wù)列表及輸出等窗口VisualC++.NET的集成界111.3.1菜單欄VisualC++.NET的主菜單欄包括9個(gè)菜單項(xiàng),這些菜單項(xiàng)可以完成幾乎所有的任務(wù),因此了解并掌握這些菜單命令是必要的。請(qǐng)注意,VisualC++.NET的菜單會(huì)根據(jù)當(dāng)前打開(kāi)不同的對(duì)象而有一些變化,所以本節(jié)只講常見(jiàn)的菜單項(xiàng)命令。返回1.3.1菜單欄VisualC++.NE121.3.2工具欄由于工具欄上面的按鈕命令都可以在相應(yīng)的菜單中找到,所以不詳細(xì)講解了??梢钥纯磮D標(biāo)就知道它是干什么的,還可以把鼠標(biāo)移動(dòng)到按鈕上面停一下,就有相應(yīng)的提示對(duì)話框解釋按鈕的功能,使用很方便。而且還可以自己打開(kāi)或定制工具欄。在工具欄上面右擊,在出現(xiàn)的彈出式菜單中單擊相應(yīng)的命令即可以顯示或隱藏相應(yīng)的工具欄。圖1.15是標(biāo)準(zhǔn)工具欄的樣式。從左到右的命令依次為:新建項(xiàng)目、添加項(xiàng)目、打開(kāi)文件、保存、全部保存、剪切、復(fù)制、粘貼、撤消、重復(fù)、向后定位、向前定位、啟動(dòng)、解決方案配置、在文件中查找、查找、解決方案資源管理器、屬性窗口、對(duì)象瀏覽器、工具箱以及類視圖。返回1.3.2工具欄由于工具欄上面的按鈕命令13圖1.15標(biāo)準(zhǔn)工具欄返回圖1.15標(biāo)準(zhǔn)工具欄返回141.3.3解決方案資源管理器如圖1.16,【解決方案資源管理器】窗口以圖形方式顯示了組成項(xiàng)目的所有文件,VisualC++.NET中屬于同一應(yīng)用程序的所有項(xiàng)目稱作解決方案。以前版本(如VisualC++6.0)中同一應(yīng)用程序中的所有項(xiàng)目組成的一個(gè)整體叫作工程,它們的意思差不多,只是換了一個(gè)名字?!窘鉀Q方案資源管理器】窗口中顯示了每個(gè)解決方案中文件的樹(shù)狀查看列表,包括各個(gè)項(xiàng)目的引用、源文件、頭文件、資源文件、配置文件和幫助文件。雙擊相應(yīng)的選項(xiàng),VisualC++.NET自動(dòng)用合適的編輯器打開(kāi)它,可以進(jìn)行任意的修改。如果要給解決方案添加一些項(xiàng)目,可在解決方案上面右擊,選擇彈出式菜單中相應(yīng)的選項(xiàng)可以添加所要的項(xiàng)目。如果該窗口已經(jīng)被關(guān)閉,則可以菜單命令【視圖】|【解決方案資源管理器】來(lái)打開(kāi)。返回1.3.3解決方案資源管理器如圖1.115圖1.16【解決方案資源管理器】窗口返回圖1.16【解決方案資源管理器】窗口返回161.3.4類視圖VisualC++.NET中的項(xiàng)目都是由類來(lái)組織的。見(jiàn)圖1.17【類視圖】窗口,解決方案Jiao1_1下面由【宏和常數(shù)】、【全局函數(shù)和變量】、CAboutDlg類、CchildFrame(子框架窗口類)、CJiao1_1App(應(yīng)用程序類)、CJiao1_1DoC(文檔類)、CJiao1_1View(視圖類)、CmainFrame(框架窗口類)等組成(如果你看不懂,不要緊,這里只是稍微提一下,以后有詳細(xì)的說(shuō)明)。返回1.3.4類視圖VisualC++.17圖1.17【類視圖】窗口返回圖1.17【類視圖】窗口返回181.3.5資源視圖【資源視圖】窗口是程序員在VisualC++.NET中管理資源的地方,它以樹(shù)形視圖的結(jié)構(gòu)把解決方案中的所有資源都一項(xiàng)一項(xiàng)地列出來(lái)了,給人以非常直觀和清晰的感覺(jué)。返回1.3.5資源視圖【資源視圖】窗口是程序員191.3.6動(dòng)態(tài)幫助
圖1.19所示為【動(dòng)態(tài)幫助】窗口,它提供了非常強(qiáng)大的智能幫助功能來(lái)幫助開(kāi)發(fā)應(yīng)用程序,如果在編輯框中選中不清楚的類或者類的屬性或方法時(shí),幫助視圖中就提供選擇項(xiàng)的幫助提示功能,可以單擊相應(yīng)的提示項(xiàng)來(lái)詳細(xì)地了解該項(xiàng)的說(shuō)明,使用非常貼心,是程序員編程的好幫手。還可以單擊示例和開(kāi)始項(xiàng)下面的相應(yīng)項(xiàng)來(lái)學(xué)習(xí)有關(guān)知識(shí)。如果在VisualC++.NET編程遇到困難時(shí),第一個(gè)想到的幫助者就是VisualC++.NET提供的動(dòng)態(tài)幫助功能,也可以打開(kāi)MSDN2003來(lái)提供幫助。返回1.3.6動(dòng)態(tài)幫助圖1.19所示為【動(dòng)態(tài)20圖1.19【動(dòng)態(tài)幫助】窗口返回圖1.19【動(dòng)態(tài)幫助】窗口返回211.3.7屬性窗口可以這么說(shuō),一個(gè)人開(kāi)發(fā)VisualC++.NET的速度和熟練程度,和他對(duì)【屬性】窗口的熟練使用程度是息息相關(guān)的。讀者可能用過(guò)VisualC++以前的版本,如VisualC++6.0中提供的ClassWizard對(duì)話框,對(duì)類的管理是非常方便的(包括資源控件和類成員的對(duì)應(yīng)連接,數(shù)據(jù)傳遞路徑,消息處理等),可能對(duì)VisualC++.NET中取消了ClassWizard功能感到非常失望,但是這只是個(gè)習(xí)慣問(wèn)題,如果對(duì)【屬性】窗口熟悉以后,一定會(huì)為它提供的功能折服。眾所周知,VisualC++.NET里面所有的項(xiàng)目都是有屬性的,通過(guò)使用【屬性】窗口可以非常方便地修改屬性。返回1.3.7屬性窗口可以這么說(shuō),一個(gè)人開(kāi)發(fā)221.3.8任務(wù)列表及輸出等窗口圖1.21所示為任務(wù)列表及輸出等窗口。其中任務(wù)列表窗口可以瀏覽用戶任務(wù)、生成錯(cuò)誤??梢栽诖舜翱谥袉螕簟締螕舸颂幪砑有氯蝿?wù)】來(lái)添加新任務(wù),也可以在項(xiàng)目代碼中以特定的格式添加注釋。如果此窗口不可見(jiàn),可單擊菜單【視圖】|【其他窗口】|【任務(wù)列表】來(lái)顯示。圖1.21任務(wù)列表及輸出等窗口返回1.3.8任務(wù)列表及輸出等窗口圖1.21所示為任231.4利用VisualC++.NET向?qū)蓱?yīng)用程序VisualC++.NET為用戶提供了功能強(qiáng)大的應(yīng)用程序生成向?qū)?,用戶可以不編?xiě)一行代碼就能生成一個(gè)典型的Windows應(yīng)用程序框架。在1.3節(jié)涉及到了利用MFC應(yīng)用程序向?qū)沙绦騄iao1_1,下面重點(diǎn)講解利用向?qū)蓱?yīng)用程序的具體過(guò)程,并生成一個(gè)可以編輯文字的MFC多文檔應(yīng)用程序Jiao1_2。
1.4.1選擇新建項(xiàng)目類型1.4.2利用向?qū)Ы?yīng)用程序
1.4.3生成應(yīng)用程序1.4利用VisualC++.NET向?qū)蓱?yīng)用程序241.4.1選擇新建項(xiàng)目類型在起始頁(yè)上單擊【新建項(xiàng)目】按鈕,或者在菜單欄上選擇【文件】|【新建】|【項(xiàng)目】,就會(huì)彈出如圖1.3所示的【新建項(xiàng)目】對(duì)話框,用戶可以對(duì)所要的項(xiàng)目類型進(jìn)行選擇??梢钥吹?,VisualC++.NET開(kāi)發(fā)的程序類型幾乎覆蓋了所有的開(kāi)發(fā)類型,如Windows應(yīng)用程序、自定義類庫(kù)、控件庫(kù)、ASP.NETWeb應(yīng)用程序、ASP.NETWebService、Web控件庫(kù)、ATLServerWeb服務(wù)、控制臺(tái)應(yīng)用程序、Windows服務(wù)、空項(xiàng)目以及空Web項(xiàng)目等等。本書(shū)重點(diǎn)講解MFC應(yīng)用程序的開(kāi)發(fā)。返回1.4.1選擇新建項(xiàng)目類型在起始頁(yè)上單擊【新建251.應(yīng)用程序類型在【MFC應(yīng)用程序向?qū)А繉?duì)話框中,選擇左邊的【應(yīng)用程序類型】,在右邊的【應(yīng)用程序類型】選項(xiàng)組中選擇【多文檔】單選按鈕,其他選項(xiàng)用默認(rèn)值,如圖1.22所示??梢钥吹?,利用MFC可以創(chuàng)建基于對(duì)話框的應(yīng)用程序、單文檔應(yīng)用程序、多文檔應(yīng)用程序和多頂級(jí)文檔應(yīng)用程序。1.應(yīng)用程序類型在【MFC應(yīng)用程序向?qū)А繉?duì)話26圖1.22選擇應(yīng)用程序類型返回圖1.22選擇應(yīng)用程序類型返回272.復(fù)合文檔支持【復(fù)合文檔支持】是一個(gè)程序中能夠嵌入另一個(gè)應(yīng)用程序的功能,容器就是只能維護(hù)嵌入的對(duì)象;袖珍服務(wù)器指應(yīng)用程序不能獨(dú)立運(yùn)行,而是被調(diào)用使之為其他程序服務(wù);完全服務(wù)器指能夠獨(dú)立運(yùn)行,并能為其他應(yīng)用程序提供服務(wù);容器/完全服務(wù)器指應(yīng)用程序既可以作容器,也可以作完全服務(wù)器對(duì)象。保持默認(rèn)值不變,即不選擇任何復(fù)合文檔支持具體見(jiàn)圖1.23。2.復(fù)合文檔支持【復(fù)合文檔支持】是一個(gè)程序28圖1.23設(shè)置復(fù)合文檔支持返回圖1.23設(shè)置復(fù)合文檔支持返回293.文檔模板字符串選左邊的【文檔模板字符串】,右邊的選項(xiàng)都用默認(rèn)值。文件擴(kuò)展名指文件的后綴名,具體見(jiàn)圖1.24。3.文檔模板字符串選左邊的【文檔模板字符30圖1.24設(shè)置文檔模板字符串返回圖1.24設(shè)置文檔模板字符串返回314.數(shù)據(jù)庫(kù)支持在左邊選擇【數(shù)據(jù)庫(kù)支持】,將出現(xiàn)如圖1.25所示的界面。如果不編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,選擇【無(wú)】;如果想要訪問(wèn)數(shù)據(jù)庫(kù),但不想應(yīng)用程序從類CFormView派生視圖,或者其界面不含有記錄菜單,則選擇【僅支持頭文件】;如果想要應(yīng)用程序從類CFormView派生視圖,并且其界面含有記錄菜單,但不需要保存文檔,則選擇【不支持文件的數(shù)據(jù)庫(kù)視圖】;如果還需要文檔保存功能,則選擇【支持文件的數(shù)據(jù)庫(kù)視圖】。當(dāng)選擇第3、4項(xiàng)時(shí),你還要選擇客戶端的數(shù)據(jù)庫(kù)類型:OLEDB或者ODBC,并可以指定數(shù)據(jù)源及其他操作。4.數(shù)據(jù)庫(kù)支持在左邊選擇【數(shù)據(jù)庫(kù)支持】,32圖1.25設(shè)置數(shù)據(jù)庫(kù)支持返回圖1.25設(shè)置數(shù)據(jù)庫(kù)支持返回335.用戶界面功能選擇左邊的【用戶界面功能】,右邊的【主框架樣式】和【工具欄】都用默認(rèn)值,具體見(jiàn)圖1.26。5.用戶界面功能選擇左邊的【用戶界面功能34圖1.26設(shè)置用戶界面功能返回圖1.26設(shè)置用戶界面功能返回356.高級(jí)功能選擇左邊的【高級(jí)功能】,將出現(xiàn)如圖1.27所示的界面,保持默認(rèn)設(shè)置?!緟^(qū)分上下文的幫助】可以選擇WinHelp格式或HTML幫助格式,WinHelp格式是傳統(tǒng)的Windows幫助格式、幫助源文件為.RTF文件;而HTML幫助格式是Windows最新幫助格式,幫助源文件為.HTML文件?!咀罱募斜砩系奈募?shù)】為4。如圖1.27所示。6.高級(jí)功能選擇左邊的【高級(jí)功能】,將出36圖1.27設(shè)定高級(jí)功能返回圖1.27設(shè)定高級(jí)功能返回377.生成的類選擇左邊【生成的類】,將出現(xiàn)如圖1.28所示的界面。其中【基類】下拉列表框中有許多基類可供選擇,注意在【基類】中選擇CEditView。單擊【完成】按鈕,VisualC++.NET就自動(dòng)生成一個(gè)多文檔應(yīng)用程序。7.生成的類選擇左邊【生成的類】,將出現(xiàn)38圖1.28選擇生成的類返回圖1.28選擇生成的類返回391.4.3生成應(yīng)用程序選擇菜單欄上的【生成】|【生成解決方案】,然后選擇【調(diào)試】|【開(kāi)始執(zhí)行(不調(diào)試)】,或者直接按Ctrl+F5鍵編譯運(yùn)行,運(yùn)行界面如圖1.29所示。程序中可以對(duì)文字進(jìn)行簡(jiǎn)單的編輯。如果文檔有了更改,系統(tǒng)還會(huì)提示用戶是否保存文檔???,一個(gè)簡(jiǎn)單的文檔編輯器誕生了,不需要用戶寫(xiě)一行代碼。返回1.4.3生成應(yīng)用程序選擇菜單欄上的【生40圖1.29Jiao1_2程序運(yùn)行界面返回圖1.29Jiao1_2程序運(yùn)行界面返回411.5理解VisualC++.NET工程VisualC++.NET作為一種程序設(shè)計(jì)語(yǔ)言,同時(shí)也是一個(gè)集成開(kāi)發(fā)工具,提供了軟件代碼自動(dòng)生成和可視化的資源編輯功能。在使用VisualC++.NET開(kāi)發(fā)應(yīng)用程序的過(guò)程中,系統(tǒng)生成了大量的各種類型的文件,在本節(jié)中將要詳細(xì)介紹VisualC++.NET中這些不同類型的文件分別起什么樣的作用,在此基礎(chǔ)上對(duì)VisualC++.NET如何管理應(yīng)用程序所用到的各種文件有一個(gè)全面的認(rèn)識(shí)。1.5理解VisualC++.NET工程421.6上機(jī)指導(dǎo)程序員最重要的是動(dòng)手能力,如果只會(huì)構(gòu)思,但是不能把思想變成一個(gè)實(shí)實(shí)在在的程序,那么也是很遺憾的。勤于練習(xí)才能真正掌握編程的方法。在1.3小節(jié)我們已經(jīng)練習(xí)了利用MFC應(yīng)用程序向?qū)蒑FC應(yīng)用程序。下面來(lái)練習(xí)一下利用向?qū)煽刂婆_(tái)程序的方法。VisualC++.NET可以開(kāi)發(fā)基于.NET的控制臺(tái)程序和基于Win32的控制臺(tái)程序。.NET的控制臺(tái)應(yīng)用程序是基于通用語(yǔ)言運(yùn)行時(shí)環(huán)境的,而Win32控制臺(tái)程序是基于本機(jī)運(yùn)行環(huán)境的,直接生成本機(jī)機(jī)器碼。1.6.1.NET的控制臺(tái)程序開(kāi)發(fā)步驟1.6.2Win32的控制臺(tái)程序開(kāi)發(fā)步驟1.6上機(jī)指導(dǎo)程序員最重要的是動(dòng)手43第2章VisualC++.NET的基本語(yǔ)法教學(xué)提示:在本章,主要是對(duì)VisualC++.NET的基本語(yǔ)法要素進(jìn)行介紹,包括標(biāo)識(shí)符和關(guān)鍵字、基本數(shù)據(jù)類型、變量和常量、命名空間、預(yù)編譯指令、運(yùn)算符和表達(dá)式。但僅僅掌握這些還是不夠的。本章還進(jìn)一步介紹了控制語(yǔ)句、結(jié)構(gòu)體、聯(lián)合體、枚舉、指針和數(shù)組的詳細(xì)使用方法。學(xué)習(xí)完這些內(nèi)容后,讀者對(duì)其語(yǔ)言將會(huì)有一個(gè)比較全面的了解。教學(xué)目標(biāo):掌握VisualC++.NET語(yǔ)言的基本數(shù)據(jù)類型,熟悉常用的標(biāo)識(shí)符、運(yùn)算符、關(guān)鍵字;掌握常量和變量的定義方法;掌握數(shù)據(jù)類型的轉(zhuǎn)換方法;理解預(yù)編譯指令、命名空間;掌握各種控制語(yǔ)句的使用方法;掌握結(jié)構(gòu)體、聯(lián)合體和枚舉的定義及其使用方法;掌握指針和數(shù)組的使用方法,熟練掌握函數(shù)的使用方法。通過(guò)上機(jī)實(shí)踐,初步掌握上述內(nèi)容的靈活運(yùn)用。第2章VisualC++.NET的基本語(yǔ)法442.1標(biāo)識(shí)符和關(guān)鍵字任何一門(mén)語(yǔ)言都有它自己的標(biāo)識(shí)符和關(guān)鍵字,C++也不例外。標(biāo)識(shí)符(identifier)是指常量、變量、語(yǔ)句標(biāo)號(hào)、自定義函數(shù)、對(duì)象等能被編譯器識(shí)別而提供的惟一名稱,所有標(biāo)識(shí)符的首字符必須以字母(a~z,A~Z)或下劃線(_)開(kāi)始,后面的字符可以是字母、下劃線或數(shù)字(0~9)。C++語(yǔ)言區(qū)分大小寫(xiě),因此,大寫(xiě)的英文字母與其對(duì)應(yīng)的小寫(xiě)英文字母是表示不同的標(biāo)識(shí)符的,如localString和localstring代表兩個(gè)不同的標(biāo)識(shí)符。關(guān)鍵字是C++語(yǔ)言保留的標(biāo)識(shí)符,每個(gè)關(guān)鍵字都有特殊的意義,不能當(dāng)作其他用途使用。2.1標(biāo)識(shí)符和關(guān)鍵字任何一門(mén)語(yǔ)言都有它自452.2基本數(shù)據(jù)類型C++語(yǔ)言使用確定的數(shù)據(jù)類型來(lái)組織各種數(shù)據(jù),并根據(jù)各種數(shù)據(jù)類型來(lái)存儲(chǔ)和操作這些數(shù)據(jù)?;镜臄?shù)據(jù)類型是C++預(yù)定義的類型,編程人員可以直接利用這些類型來(lái)定義數(shù)據(jù)。下面來(lái)看看C++中的基本數(shù)據(jù)類型:Bool(邏輯型)、char(字符型)、short(短整型)、int(整型)、long(長(zhǎng)整型)、float(浮型)、double(雙精度型)、longdouble(長(zhǎng)雙精度型)。bool類型用true和false代表真與假,其占用空間是8位。char是字符型類型,它在計(jì)算機(jī)里面是以ASCII表示的,占8位。short、int和long都是整型,只是數(shù)據(jù)的位數(shù)不一樣:short占8位;int在DOS環(huán)境下占16位,在Windows下面占32位;long占32位。還可以在這三個(gè)類型前面加unsigned,表示無(wú)符號(hào)整數(shù)(即只表示正數(shù))。Float、double、longdouble都是浮點(diǎn)型類型,只是位數(shù)不一樣,float占32位,double占64位,longdouble占80位。2.2基本數(shù)據(jù)類型C++語(yǔ)言使用確定的數(shù)462.3常量和變量常量是指C++語(yǔ)言中表示固定數(shù)值或字符值的標(biāo)識(shí)符,并且在程序的執(zhí)行過(guò)程中不允許修改。通過(guò)使用關(guān)鍵字const,可以將一個(gè)變量(下面會(huì)講變量)定義為一個(gè)常量,并且const可以位于數(shù)據(jù)類型前或者數(shù)據(jù)類型后面。其定義的一般格式為:typeconst變量名=值或者consttype變量名=值在定義變量時(shí),應(yīng)給出該變量的數(shù)據(jù)類型和名字,還可以給這個(gè)變量賦一個(gè)初始值,也可以在以后再賦值,系統(tǒng)在編譯時(shí)就會(huì)分配給該變量一個(gè)合適的內(nèi)存空間。變量的一般定義為:數(shù)據(jù)類型變量名=值(可選)2.3常量和變量常量是指C++語(yǔ)言中表示固472.4命名空間命名空間是為了處理不同公司或個(gè)人使用相同的標(biāo)識(shí)符這種情況而使用的一個(gè)概念。假設(shè)AAA公司使用了自己的一套標(biāo)志符,BBB公司也使用自己的一套標(biāo)識(shí)符,現(xiàn)在如果要使用這兩家公司的某些標(biāo)識(shí)符,且兩個(gè)公司都提供了變量標(biāo)識(shí)符INTEGER,那么在程序中使用INTEGER到底是使用AAA公司的,還是BBB公司的呢?這是個(gè)棘手的問(wèn)題,VisualC++.NET編譯器也會(huì)報(bào)錯(cuò)。2.4命名空間命名空間是為了處理不482.5運(yùn)算符、表達(dá)式和語(yǔ)句在C++語(yǔ)言中,運(yùn)算符是指對(duì)操作數(shù)進(jìn)行操作的符號(hào),按照運(yùn)算功能,C++運(yùn)算符可分為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符和賦值運(yùn)算符等,按優(yōu)先級(jí)順序,C++運(yùn)算符如表2.3所示。2.5運(yùn)算符、表達(dá)式和語(yǔ)句在C++語(yǔ)言中,運(yùn)算符492.6預(yù)編譯指令預(yù)編譯指令指在程序正式編譯前就由編譯器進(jìn)行編譯的操作,可以放在程序中的任何位置。常見(jiàn)的預(yù)編譯指令有:#include"頭文件"或#include<頭文件>:該指令指示編譯器將頭文件的全部?jī)?nèi)容插入此處。若用<>括起頭文件則在系統(tǒng)的INCLUDE目錄中尋找文件,若用“”括起文件則在當(dāng)前目錄中尋找文件。一般來(lái)說(shuō),頭文件后綴名都為.h,其中主要內(nèi)容為各種變量的聲明。2.6預(yù)編譯指令預(yù)編譯指令指在程序正式編502.7數(shù)據(jù)類型轉(zhuǎn)換在進(jìn)行程序的開(kāi)發(fā)過(guò)程中,數(shù)據(jù)類型的轉(zhuǎn)換是會(huì)經(jīng)常碰到的。在一個(gè)表達(dá)式當(dāng)中,所有的變量必須是相同類型才能進(jìn)行運(yùn)算,但是在一般的表達(dá)式中很難有相同類型的變量來(lái)進(jìn)行運(yùn)算。因此,不同類別的變量進(jìn)行運(yùn)算時(shí),C++會(huì)先將較低類型的操作數(shù)轉(zhuǎn)換為較高類型的操作數(shù)再進(jìn)行運(yùn)算。在計(jì)算機(jī)中,數(shù)據(jù)都是用二進(jìn)制位來(lái)存放的,較低類型是指存儲(chǔ)位數(shù)較少的類型,較高類型則是指存儲(chǔ)位數(shù)較多的類型。如定義變量inta和longb,則進(jìn)行a+b的運(yùn)算時(shí),要先將a轉(zhuǎn)換為long型,再與b相加。數(shù)據(jù)類型的高低順序依序?yàn)椋簂ongdouble、double、float、long、int、short、char。2.7數(shù)據(jù)類型轉(zhuǎn)換在進(jìn)行程序的開(kāi)發(fā)過(guò)程中512.8數(shù)據(jù)的基本輸入與輸出數(shù)據(jù)的基本輸入與輸出是程序與用戶進(jìn)行交互的重要手段,可以設(shè)想一下,如果一個(gè)程序既不能輸入也不能輸出,那么這會(huì)是個(gè)什么程序?用戶什么數(shù)據(jù)都輸不進(jìn)去,也看不到程序的運(yùn)行結(jié)果。所以處理好程序的輸入輸出是很重要的。C++中提供了兩個(gè)基本的輸入和輸出的函數(shù):cout(輸出)及cin(輸入)。2.8數(shù)據(jù)的基本輸入與輸出數(shù)據(jù)的基本輸入522.9控制語(yǔ)句程序控制語(yǔ)句控制程序的執(zhí)行過(guò)程和方向,因此是非常重要的。靈活運(yùn)用各種控制語(yǔ)句可以輕松地完成你想要做的事情。C++中的控制語(yǔ)句包括條件語(yǔ)句、循環(huán)語(yǔ)句、判斷和跳轉(zhuǎn)語(yǔ)句,下面具體介紹它們的用法。
2.9.1條件(選擇)語(yǔ)句
2.9.2循環(huán)語(yǔ)句
2.9.3判斷和跳轉(zhuǎn)語(yǔ)句(轉(zhuǎn)移語(yǔ)句)2.9控制語(yǔ)句程序控制語(yǔ)句控制程序的執(zhí)行532.9.1條件(選擇)語(yǔ)句C++語(yǔ)言支持幾種基本的條件語(yǔ)句:if語(yǔ)句、if…else語(yǔ)句、?:語(yǔ)句、switch語(yǔ)句。
1.if語(yǔ)句
2.if…else語(yǔ)句
3.?:條件語(yǔ)句
4.switch語(yǔ)句返回2.9.1條件(選擇)語(yǔ)句C++語(yǔ)言支持541.if語(yǔ)句if語(yǔ)句用于在程序中有條件地執(zhí)行某一語(yǔ)句序列,語(yǔ)法形式如下:if(表達(dá)式)執(zhí)行語(yǔ)句;//滿足表達(dá)式時(shí)執(zhí)行的語(yǔ)句其中表達(dá)式是一個(gè)關(guān)系或邏輯表達(dá)式,執(zhí)行語(yǔ)句是指當(dāng)表達(dá)式為真時(shí)執(zhí)行,為假時(shí)跳過(guò)執(zhí)行。如果執(zhí)行語(yǔ)句包含多個(gè)語(yǔ)句,則必須用{}包圍起來(lái)作為一個(gè)整體來(lái)執(zhí)行。例如:如果變量a大于變量b,則把a(bǔ)與b之和賦給變量c,其語(yǔ)句如下:if(a>b)c=a+b;返回1.if語(yǔ)句if語(yǔ)句用于在程序中有條件地執(zhí)行某552.if…else語(yǔ)句它的一般格式是:if(表達(dá)式)執(zhí)行語(yǔ)句1;//如果表達(dá)式為真,則執(zhí)行語(yǔ)句1else執(zhí)行語(yǔ)句2;//如果表達(dá)式為假,則執(zhí)行語(yǔ)句2if…else語(yǔ)句的變體結(jié)構(gòu)(可以判斷兩種以上的情況):if(表達(dá)式1)執(zhí)行語(yǔ)句1;//如果表達(dá)式1為真,則執(zhí)行語(yǔ)句1elseif(表達(dá)式2)執(zhí)行語(yǔ)句2;//如果表達(dá)式2為真,則執(zhí)行語(yǔ)句2…..…..//如果表達(dá)式i為真,則執(zhí)行語(yǔ)句i…...else執(zhí)行語(yǔ)句n;//其他情況,則執(zhí)行語(yǔ)句n返回2.if…else語(yǔ)句它的一般格式是:返回563.?:條件語(yǔ)句?:條件語(yǔ)句是if…else條件語(yǔ)句的簡(jiǎn)化形式,其格式如下:(a>b)?c:d;//如果表達(dá)式a>b為真,則其結(jié)果為c,否則為d返回3.?:條件語(yǔ)句?:條件語(yǔ)句是if…else條件語(yǔ)句的簡(jiǎn)574.switch語(yǔ)句switch語(yǔ)句與if…else的變體結(jié)構(gòu)類似,都是從多種供選擇的情況中選擇一種執(zhí)行,其語(yǔ)法形式為:switch(表達(dá)式){case:值1:語(yǔ)句段1;//如果表達(dá)式與值1相等,則執(zhí)行語(yǔ)句段1break;case:值2:語(yǔ)句段2;//如果表達(dá)式與值2相等,則執(zhí)行語(yǔ)句段2break;……;//如果表達(dá)式與值i相等,則執(zhí)行語(yǔ)句段idefault://default語(yǔ)句段可以不要語(yǔ)句段n://如果表達(dá)式與值n相等,則執(zhí)行語(yǔ)句段nbreak;}返回4.switch語(yǔ)句switch語(yǔ)句與i582.9.2循環(huán)語(yǔ)句程序結(jié)構(gòu)中的重復(fù)性操作的語(yǔ)句可以用循環(huán)語(yǔ)句來(lái)完成,循環(huán)語(yǔ)句可以根據(jù)循環(huán)變量來(lái)執(zhí)行指定的次數(shù)。C++語(yǔ)言提供while、for、do…while三種循環(huán)語(yǔ)句,它們之間的不同之處在于while和for先判斷條件,再執(zhí)行語(yǔ)句;而do…while是先執(zhí)行語(yǔ)句,再判斷條件。這樣可以看出while和for循環(huán)有可能一次都不執(zhí)行,而do…while至少執(zhí)行一次。它們的共同點(diǎn)是當(dāng)條件語(yǔ)句為非零時(shí)為真,而為零時(shí)則為假。這三種循環(huán)語(yǔ)句可以相互轉(zhuǎn)換。
1.while語(yǔ)句
2.for語(yǔ)句
3.do…while循環(huán)語(yǔ)句返回2.9.2循環(huán)語(yǔ)句程序結(jié)構(gòu)中的重復(fù)性操作591.while語(yǔ)句當(dāng)循環(huán)次數(shù)無(wú)法計(jì)算或者很難確定時(shí),可以考慮用while循環(huán)語(yǔ)句。它的語(yǔ)法結(jié)構(gòu)為:while(表達(dá)式){循環(huán)體語(yǔ)句;}返回1.while語(yǔ)句當(dāng)循環(huán)次數(shù)無(wú)法計(jì)算或者602.for語(yǔ)句for語(yǔ)句通常用于處理具有固定長(zhǎng)度的數(shù)據(jù)結(jié)構(gòu),for循環(huán)語(yǔ)句的語(yǔ)法結(jié)構(gòu)如下:for((表達(dá)式1)初始化部分;(表達(dá)式2)循環(huán)條件部分;(表達(dá)式3)增量部分){循環(huán)體語(yǔ)句;//如果是單條語(yǔ)句,可以省略外面的大括弧}返回2.for語(yǔ)句for語(yǔ)句通常用于處理具有613.do…while循環(huán)語(yǔ)句do…while也叫“直到型”循環(huán)結(jié)構(gòu),即一直執(zhí)行到條件為假時(shí)退出循環(huán)。其格式為:do{循環(huán)語(yǔ)句}while(循環(huán)條件表達(dá)式);返回3.do…while循環(huán)語(yǔ)句do…whi622.9.3判斷和跳轉(zhuǎn)語(yǔ)句(轉(zhuǎn)移語(yǔ)句)當(dāng)執(zhí)行該類語(yǔ)句時(shí),它要改變程序的執(zhí)行順序,即不依次執(zhí)行緊跟其后的語(yǔ)句,而跳到另一個(gè)語(yǔ)句處接著執(zhí)行。從表面上看循環(huán)語(yǔ)句或條件語(yǔ)句也改變了程序的執(zhí)行順序,但由于整個(gè)循環(huán)可以看作一個(gè)語(yǔ)句(條件語(yǔ)句也一樣),因此它們也仍然是順序執(zhí)行的。C++中的轉(zhuǎn)移語(yǔ)句有break、continue和goto語(yǔ)句。
1.break語(yǔ)句
2.continue語(yǔ)句
3.goto語(yǔ)句返回2.9.3判斷和跳轉(zhuǎn)語(yǔ)句(轉(zhuǎn)移語(yǔ)句)當(dāng)執(zhí)631.break語(yǔ)句break語(yǔ)句用于強(qiáng)制退出循環(huán)語(yǔ)句以及case語(yǔ)句的執(zhí)行,用在while和do…while、for循環(huán)語(yǔ)句中,使它們終止執(zhí)行,即用于從循環(huán)體內(nèi)跳出,提前結(jié)束循環(huán)。用于switch…case中則是執(zhí)行對(duì)應(yīng)的case語(yǔ)句后跳出switch…case。返回1.break語(yǔ)句break語(yǔ)句用于強(qiáng)制642.continue語(yǔ)句continue語(yǔ)句用于while、do…while、for循環(huán)語(yǔ)句中,當(dāng)執(zhí)行到continue語(yǔ)句時(shí),終止后面的循環(huán)執(zhí)行語(yǔ)句,直接進(jìn)行循環(huán)條件語(yǔ)句的判斷,如果為真則開(kāi)始下一輪循環(huán),如果為假則終止循環(huán)。continue與break語(yǔ)句不同,它并不終止整個(gè)循環(huán)語(yǔ)句,而僅僅終止當(dāng)前這一次循環(huán)的執(zhí)行。返回2.continue語(yǔ)句continu653.goto語(yǔ)句goto語(yǔ)句一般很少使用,一般有人認(rèn)為大量使用goto語(yǔ)句會(huì)使程序的執(zhí)行過(guò)程混亂且容易出錯(cuò),這是對(duì)的,但是在程序中適當(dāng)?shù)厥褂胓oto語(yǔ)句可以使程序簡(jiǎn)單明了。如果有一個(gè)多重嵌套循環(huán),須從最里層跳到最外層,若用break來(lái)實(shí)現(xiàn),則每一層循環(huán)中都要調(diào)用break語(yǔ)句,很麻煩。但是如果在最里層用goto語(yǔ)句的話,就可以一下子跳到外面的一個(gè)標(biāo)號(hào)處,并把流程跳轉(zhuǎn)到該處,很方便。它的格式為:goto語(yǔ)句標(biāo)號(hào)返回3.goto語(yǔ)句goto語(yǔ)句一般很少使用662.10指針、數(shù)組與字符串2.10.1指針2.10.2數(shù)組2.10.3字符串2.10指針、數(shù)組與字符串2.10.1指針672.10.1指針在計(jì)算機(jī)中,內(nèi)存儲(chǔ)器是由若干存儲(chǔ)單元組成的,每個(gè)存儲(chǔ)單元均有一個(gè)惟一的編號(hào)用于標(biāo)識(shí)該存儲(chǔ)單元,該編號(hào)稱為存儲(chǔ)單元的地址。在C++中,數(shù)據(jù)是用變量存放在存儲(chǔ)單元中的,而指針就是一個(gè)保存著某變量在內(nèi)存中的存儲(chǔ)單元中的位置變量,即指針是指向變量在內(nèi)存中的地址,可以通過(guò)指針來(lái)指向變量在內(nèi)存中的地址來(lái)訪問(wèn)和控制變量。指針的定義形式為:數(shù)據(jù)類型*指針名;返回2.10.1指針在計(jì)算機(jī)中,內(nèi)存儲(chǔ)器是由682.10.2數(shù)組數(shù)組就是把一系列有序的相同類型的數(shù)據(jù)組合起來(lái)的數(shù)據(jù)集合。數(shù)組都有一個(gè)名字即數(shù)組名。數(shù)組中的每一個(gè)數(shù)據(jù)稱為數(shù)組元素,數(shù)組元素在數(shù)組中的位置由下標(biāo)確定。根據(jù)數(shù)組元素下標(biāo)的個(gè)數(shù),數(shù)組分為一維數(shù)組、二維數(shù)組和多維數(shù)組。當(dāng)數(shù)組元素的數(shù)據(jù)類型為字符型時(shí),該數(shù)組稱為字符數(shù)組。當(dāng)數(shù)組元素的數(shù)據(jù)類型為整型時(shí),該數(shù)組稱為整型數(shù)組。返回2.10.2數(shù)組數(shù)組就是把一系列有序的相同類型692.10.3字符串字符串就是用一對(duì)雙引號(hào)括起來(lái)的字符序列。例如“Iamastudent!”是一個(gè)字符串。字符串中的字符可以是能顯示的字符,也可以是轉(zhuǎn)義字符,如‘\t’表示跳格。在C++中,為了判斷字符串是否結(jié)束,系統(tǒng)自動(dòng)在字符串的末尾加上一個(gè)字符‘\0’,作為字符串的結(jié)束標(biāo)志。如字符串“Iamastudent!”共15個(gè)字符,但實(shí)際上在計(jì)算機(jī)內(nèi)存里占用16個(gè)存儲(chǔ)單元。最后一個(gè)存儲(chǔ)單元存放‘\0’,作為字符串的結(jié)束標(biāo)志,所以字符串的存儲(chǔ)空間比實(shí)際的字符數(shù)要多1。注意字符串常量和字符常量是有區(qū)別的,字符串常量是用雙引號(hào)括起來(lái)的字符序列,而字符常量則是用單引號(hào)括起來(lái)的單個(gè)字符,它們所占的內(nèi)存空間也不同。字符串一般存放在字符數(shù)組中,字符數(shù)組就是存放字符的數(shù)組返回2.10.3字符串字符串就是用一對(duì)雙702.11函數(shù)—個(gè)C++程序可由一個(gè)或多個(gè)源程序文件組成,一個(gè)源程序文件可由一個(gè)或多個(gè)函數(shù)組成;函數(shù)是構(gòu)成C++程序的基礎(chǔ),任意—個(gè)C++源程序都是由若干個(gè)函數(shù)組成的。C++中的函數(shù)分為庫(kù)函數(shù)與自定義函數(shù)兩類,庫(kù)函數(shù)是由C++系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)(如求一個(gè)數(shù)的絕對(duì)值可用函數(shù):“intabs(intn);”);自定義函數(shù)是需要自己寫(xiě)的函數(shù)。C++中的函數(shù)是這樣定義的:返回值數(shù)據(jù)類型函數(shù)名(參數(shù)表){語(yǔ)句;}2.11函數(shù)—個(gè)C++程序可由一712.12結(jié)構(gòu)、聯(lián)合和枚舉
2.12.1結(jié)構(gòu)2.12.2聯(lián)合體2.12.3枚舉類型2.12結(jié)構(gòu)、聯(lián)合和枚舉
2.12.1結(jié)構(gòu)722.12.1結(jié)構(gòu)有時(shí)候需要將不同類型的數(shù)據(jù)組合成有機(jī)整體,以方便引用這些數(shù)據(jù)。這些數(shù)據(jù)之間是相互聯(lián)系的,例如,一個(gè)人的基本信息包括姓名、性別、年齡、身高、體重等;一個(gè)學(xué)生的基本信息包括學(xué)號(hào)、姓名、年齡、某些課程成績(jī)、住址等。如果將這些數(shù)據(jù)分別存放在不同的數(shù)據(jù)變量中,就不能體現(xiàn)它們之間的內(nèi)在聯(lián)系,并且在引用這些數(shù)據(jù)時(shí)也會(huì)由于它們之間的聯(lián)系不明確而變得很復(fù)雜,容易出錯(cuò)??梢酝ㄟ^(guò)使用結(jié)構(gòu)體將這些不同類型的數(shù)據(jù)定義為一個(gè)特殊的數(shù)據(jù)類型,這樣就能很方便地使用這些數(shù)據(jù)了。結(jié)構(gòu)體是指由不同類型的一組變量組成的一個(gè)數(shù)據(jù)單位,在C和C++語(yǔ)言中,使用保留字struct來(lái)構(gòu)造一個(gè)結(jié)構(gòu)體,定義一個(gè)結(jié)構(gòu)體類型的形式如下:struct結(jié)構(gòu)體名{結(jié)構(gòu)體成員列表}返回2.12.1結(jié)構(gòu)有時(shí)候需要將不同類型的數(shù)732.12.2聯(lián)合體聯(lián)合體是指幾個(gè)不同類型的變量共用一個(gè)內(nèi)存單元的一種數(shù)據(jù)類型,這樣的變量可以在一個(gè)運(yùn)算中構(gòu)成一個(gè)整數(shù),在另外一個(gè)運(yùn)算中構(gòu)成一個(gè)實(shí)數(shù)。定義聯(lián)合體類型需要用到保留字union,定義的一般形式如下:union聯(lián)合體名{成員列表}變量列表返回2.12.2聯(lián)合體聯(lián)合體是指幾個(gè)不同類型742.12.3枚舉類型在實(shí)際生活中,經(jīng)常會(huì)遇到只有有限個(gè)取值的變量,例如,每一天只可能是星期一到星期天7種之間的一種,一個(gè)布袋里只有紅、黃、藍(lán)、綠、黑5種顏色的玻璃球等等。針對(duì)這樣的變量,可以定義其為枚舉類型,即變量的值可以一一列舉出來(lái)。定義枚舉類型需要用到保留字enum返回2.12.3枚舉類型在實(shí)際生活中,經(jīng)常會(huì)752.13上機(jī)指導(dǎo)本章講述了VisualC++.NET的基本語(yǔ)法。在本次的上機(jī)指導(dǎo)中,將針對(duì)上述內(nèi)容進(jìn)行實(shí)際上機(jī)練習(xí)。主要內(nèi)容為:基本的輸出輸入語(yǔ)法的使用;命名空間的引入;基本控制語(yǔ)句的使用;函數(shù)的使用等。2.13.1if語(yǔ)句的使用2.13.2switch語(yǔ)句的使用2.13.3函數(shù)的使用2.13上機(jī)指導(dǎo)本章講述了Visu76第3章類和對(duì)象教學(xué)提示:類和對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心概念,繼承性和多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性,本章對(duì)VisualC++.NET中的類和對(duì)象、繼承和派生、多態(tài)和虛函數(shù)、模板類和模板函數(shù)進(jìn)行了詳細(xì)介紹。教學(xué)目標(biāo):掌握類和對(duì)象的定義,熟悉VisualC++.NET語(yǔ)言中的繼承機(jī)制,能熟練地通過(guò)重載、虛函數(shù)、抽象類等手段實(shí)現(xiàn)多態(tài)性。第3章類和對(duì)象教學(xué)提示:類和對(duì)象773.1類和對(duì)象類和對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心,所以理解類和對(duì)象的概念是學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)的關(guān)鍵。
3.1.1類和對(duì)象的定義
3.1.2對(duì)象與對(duì)象的定義
3.1.3成員變量和成員函數(shù)
3.1.4構(gòu)造函數(shù)和析構(gòu)函數(shù)3.1類和對(duì)象類和對(duì)象是面向?qū)ο蟪?83.1.1類和對(duì)象的定義類是一種復(fù)雜的數(shù)據(jù)類型,它是將不同類型的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的操作封裝在一起的集合體。類的定義格式一般分為說(shuō)明部分和實(shí)現(xiàn)部分。說(shuō)明部分是用來(lái)說(shuō)明該類中的成員,包括數(shù)據(jù)成員的說(shuō)明和成員函數(shù)的說(shuō)明。其中,成員函數(shù)是用來(lái)對(duì)數(shù)據(jù)成員進(jìn)行操作的,又稱為“方法”。實(shí)現(xiàn)部分是用來(lái)對(duì)成員函數(shù)的定義。類的一般定義格式如下:class<類名>{public:<成員函數(shù)或數(shù)據(jù)成員的說(shuō)明>private:<成員函數(shù)或數(shù)據(jù)成員的說(shuō)明>}<各個(gè)成員函數(shù)的實(shí)現(xiàn)>返回3.1.1類和對(duì)象的定義類是一種復(fù)雜的數(shù)793.1.2對(duì)象與對(duì)象的定義對(duì)象是類的實(shí)例。對(duì)象是屬于某個(gè)已知的類。因此,定義對(duì)象之前,一定要先定義好該對(duì)象的類。對(duì)象在確定了它的類以后,其定義格式如下:<類名><對(duì)象名表>其中,<類名>是要定義的對(duì)象所屬類的名字,即所定義的對(duì)象是該類類型的對(duì)象。<對(duì)象名表>中可以有一個(gè)或多個(gè)對(duì)象,多個(gè)對(duì)象名是用逗號(hào)分隔。返回3.1.2對(duì)象與對(duì)象的定義對(duì)象是類的實(shí)例803.1.3成員變量和成員函數(shù)一個(gè)對(duì)象的成員就是該對(duì)象的類所定義的成員。對(duì)象成員有數(shù)據(jù)成員和成員函數(shù),其表示方法如下:<對(duì)象名>.<數(shù)據(jù)成員名>或者<對(duì)象>.<成員函數(shù)名>(<參數(shù)表>)返回3.1.3成員變量和成員函數(shù)一個(gè)對(duì)象的成813.1.4構(gòu)造函數(shù)和析構(gòu)函數(shù)1.構(gòu)造函數(shù)和析構(gòu)函數(shù)2.默認(rèn)構(gòu)造函數(shù)和默認(rèn)析構(gòu)函數(shù)3.復(fù)制初始化構(gòu)造函數(shù)返回3.1.4構(gòu)造函數(shù)和析構(gòu)函數(shù)1.構(gòu)造函數(shù)和析構(gòu)函數(shù)返821.構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)是在類體中說(shuō)明的兩種特殊成員函數(shù)。構(gòu)造函數(shù)的功能是在創(chuàng)建對(duì)象時(shí),使用給定的值來(lái)初始化對(duì)象。析構(gòu)函數(shù)的功能是用來(lái)釋放一個(gè)對(duì)象,在對(duì)象刪除前,用它來(lái)做一些清理工作,它與構(gòu)造函數(shù)的功能正好相反。返回1.構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)832.默認(rèn)構(gòu)造函數(shù)和默認(rèn)析構(gòu)函數(shù)在類定義過(guò)程中,如果沒(méi)有定義任何構(gòu)造函數(shù),則編譯器自動(dòng)生成一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造函數(shù),其格式如下:<類名>::<默認(rèn)構(gòu)造函數(shù)名>(){…}返回2.默認(rèn)構(gòu)造函數(shù)和默認(rèn)析構(gòu)函數(shù)在類定義過(guò)843.復(fù)制初始化構(gòu)造函數(shù)復(fù)制初始化構(gòu)造函數(shù)是一種特殊的成員函數(shù),它的功能是用一個(gè)已知的對(duì)象來(lái)初始化一個(gè)被創(chuàng)建的同類對(duì)象。復(fù)制初始化構(gòu)造函數(shù)實(shí)際上也是構(gòu)造函數(shù),它是在初始化時(shí)被調(diào)用來(lái)將一個(gè)已知對(duì)象的數(shù)據(jù)成員值復(fù)制給正在創(chuàng)建的另一個(gè)同類對(duì)象。返回3.復(fù)制初始化構(gòu)造函數(shù)復(fù)制初始化構(gòu)造函數(shù)853.2類的繼承和派生繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)中最重要的機(jī)制。這種機(jī)制改變了過(guò)去傳統(tǒng)的非面向?qū)ο蟪绦蛟O(shè)計(jì)中那種對(duì)不再適合要求的用戶定義數(shù)據(jù)類型進(jìn)行改寫(xiě)甚至重寫(xiě)的方法,克服了傳統(tǒng)程序設(shè)計(jì)方法對(duì)編寫(xiě)出來(lái)的程序無(wú)法重復(fù)使用而造成的資源浪費(fèi)。通過(guò)C++語(yǔ)言中的繼承機(jī)制,可以擴(kuò)充和完善舊的程序設(shè)計(jì)以適應(yīng)新的需求,這樣不僅可以節(jié)省程序開(kāi)發(fā)時(shí)間和資源,并且為將來(lái)程序設(shè)計(jì)增添了新的資源。
3.2.1基類和派生類
3.2.2單一繼承
3.2.3虛基類3.2類的繼承和派生繼承性是面向?qū)ο蟪绦?63.2.1基類和派生類通過(guò)繼承機(jī)制,可以利用已有的數(shù)據(jù)類型來(lái)定義新的數(shù)據(jù)類型。所定義的新數(shù)據(jù)類型不僅擁有新定義的成員,而且還同時(shí)擁有舊的成員,則稱已存在的用來(lái)派生新類的類為基類,又稱為父類。由已存在的類派生派生出的新類稱為派生類,又稱為子類。返回3.2.1基類和派生類通過(guò)繼承機(jī)制,可873.2.2單一繼承在單繼承中,每個(gè)類可以有多個(gè)派生類,但是每個(gè)派生類只能有一個(gè)基類,從而形成樹(shù)型結(jié)構(gòu)。1.成員訪問(wèn)權(quán)限的控制2.構(gòu)造函數(shù)和析構(gòu)函數(shù)返回3.2.2單一繼承在單繼承中,每個(gè)類可以881.成員訪問(wèn)權(quán)限的控制在公有繼承(public)時(shí),派生類的public、private、protected型的成員函數(shù)可以訪問(wèn)基類中的公有成員和保護(hù)成員;而派生類的對(duì)象僅可訪問(wèn)基類中的公有成員。在私有繼承(private)時(shí),派生類的對(duì)象不可訪問(wèn)基類中的任何成員。另外使用class關(guān)鍵字定義類時(shí),默認(rèn)的繼承方式是private。也就是說(shuō),當(dāng)繼承方式為私有繼承時(shí),可以省略private。在保護(hù)繼承(protected)時(shí),把繼承方式public改為protected,把protected變?yōu)閜rivate成員,private不變。返回1.成員訪問(wèn)權(quán)限的控制在公有繼承(pub892.構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類對(duì)象的數(shù)據(jù)結(jié)構(gòu)是由基類中說(shuō)明的數(shù)據(jù)成員和派生類中說(shuō)明的數(shù)據(jù)成員共同構(gòu)成。將派生類對(duì)象中由基類中說(shuō)明的數(shù)據(jù)成員和操作構(gòu)成的封裝體稱為基類子對(duì)象,它由基類中的構(gòu)造函數(shù)進(jìn)行初始化。構(gòu)造函數(shù)不能夠被繼承,因此,派生類的構(gòu)造函數(shù)必須通過(guò)調(diào)用基類的構(gòu)造函數(shù)來(lái)初始化基類子對(duì)象。所以,在定義派生類的構(gòu)造函數(shù)時(shí)除了對(duì)自己的數(shù)據(jù)成員進(jìn)行初始化外,還必須負(fù)責(zé)調(diào)用基類構(gòu)造函數(shù)使基類數(shù)據(jù)成員得以初始化。如果派生類中還有子對(duì)象時(shí),還應(yīng)包含對(duì)子對(duì)象初始化的構(gòu)造函數(shù)。派生類構(gòu)造函數(shù)的一般格式如下:<派生類名>(<派生類構(gòu)造函數(shù)總參數(shù)表>):<參數(shù)表1>,(子對(duì)象名)(<參數(shù)表2>){<派生類中數(shù)據(jù)成員初始化>};返回2.構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類對(duì)象的數(shù)據(jù)結(jié)903.2.3虛基類引進(jìn)虛基類的目的是為了解決二義性問(wèn)題,其說(shuō)明格式如下:virtual<繼承方式><基類名>返回3.2.3虛基類引進(jìn)虛基類的目的是為了解決913.3多態(tài)和虛函數(shù)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之一,它與前面講過(guò)的封裝性和繼承性構(gòu)成了面向?qū)ο蟪绦蛟O(shè)計(jì)的三大特性。這三大特性是相互關(guān)聯(lián)的,封裝性是基礎(chǔ),繼承性是關(guān)鍵,多態(tài)性是補(bǔ)充,而多態(tài)性又必須存在于繼承的環(huán)境之中。所謂多態(tài)性是指發(fā)出同樣的消息被不同類型的對(duì)象接收時(shí)導(dǎo)致完全不同的行為。這里所說(shuō)的消息主要是指對(duì)類的成員函數(shù)的調(diào)用,而不同的行為是指不同的實(shí)現(xiàn)。利用多態(tài)性,用戶只需要發(fā)送一般形式的消息,而將所有的實(shí)現(xiàn)留給接收消息的對(duì)象。對(duì)象根據(jù)所接收到的消息而做出相應(yīng)的動(dòng)作(即操作)。函數(shù)重載和運(yùn)算符重載是簡(jiǎn)單的多態(tài)性。重要的多態(tài)性是建立在虛函數(shù)的概念和方法基礎(chǔ)上的。3.3多態(tài)和虛函數(shù)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)923.4上機(jī)指導(dǎo)在本次上機(jī)指導(dǎo)中,針對(duì)前面幾節(jié)中的內(nèi)容進(jìn)行實(shí)際上機(jī)練習(xí)。其主要內(nèi)容包括:類和對(duì)象使用、派生類的使用、類的多態(tài)性編程以及模板類和模板函數(shù)編程等。3.4.1類和對(duì)象編程實(shí)例3.4.2派生類編程實(shí)例3.4.3類的多態(tài)編程實(shí)例3.4.4模板類和模板函數(shù)編程實(shí)例3.4上機(jī)指導(dǎo)在本次上機(jī)指導(dǎo)中,針對(duì)前面93第4章Windows程序設(shè)計(jì)教學(xué)提示:本章說(shuō)明了Windows應(yīng)用程序的特點(diǎn),即用戶圖形界面、硬件無(wú)關(guān)特性及消息驅(qū)動(dòng)機(jī)制,介紹了VisualC++.NET的MFC類及如何應(yīng)用VisualC++.NET開(kāi)發(fā)Windows程序。教學(xué)目標(biāo):熟悉Windows應(yīng)用程序的特點(diǎn)及流程,特別是消息驅(qū)動(dòng)機(jī)制,了解MFC的基本概念,掌握應(yīng)用VisualC++.NET開(kāi)發(fā)Windows程序的方法。第4章Windows程序設(shè)計(jì)教學(xué)提示:944.1Windows程序設(shè)計(jì)基礎(chǔ)Windows操作系統(tǒng)是由Microsoft推出的基于PC的圖形操作系統(tǒng)。Windows應(yīng)用程序具有下列幾個(gè)特點(diǎn):一是它的標(biāo)準(zhǔn)用戶圖形界面——窗口;二是應(yīng)用程序與硬件的無(wú)關(guān)特性;三是所有的Windows應(yīng)用程序都是采用消息驅(qū)動(dòng)機(jī)制。應(yīng)用程序的設(shè)備無(wú)關(guān)性將在第10章中進(jìn)行介紹,本章簡(jiǎn)單介紹一下窗口和消息的概念。
4.1.1Windows窗口的概念
4.1.2Windows程序的消息響應(yīng)機(jī)制
4.1.3Windows程序流程4.1Windows程序設(shè)計(jì)基礎(chǔ)Wind954.1.1Windows窗口的概念1.WindowsAPI2.Windows窗口返回4.1.1Windows窗口的概念1.Windows961.WindowsAPIWindows應(yīng)用程序是通過(guò)在應(yīng)用程序中調(diào)用WindowsAPI實(shí)現(xiàn)的。WindowsAPI是Windows操作系統(tǒng)提供的應(yīng)用程序編程接口,包括幾百個(gè)函數(shù)加上數(shù)據(jù)常量、宏、結(jié)構(gòu)以及許多其他項(xiàng)。大多數(shù)API在Windows.h頭文件中定義。Windows95以上的操作系統(tǒng)都是32位的,因此在目前常用的Windows中都使用Win32API。返回1.WindowsAPIWindows應(yīng)972.Windows窗口“窗口”是Windows操作系統(tǒng)標(biāo)準(zhǔn)的圖形界面,一個(gè)典型的窗口如圖4.1所示。應(yīng)用程序在創(chuàng)建某個(gè)類型的窗口前,必須首先注冊(cè)該“窗口類”(WindowsClass)。注冊(cè)時(shí)把窗口過(guò)程、窗口類型以及其他類型信息和要登記的窗口類關(guān)聯(lián)起來(lái)。應(yīng)用程序接著通過(guò)調(diào)用WindowsAPI來(lái)創(chuàng)建窗口。創(chuàng)建一個(gè)窗口實(shí)際調(diào)用的函數(shù)需要下列參數(shù):屏幕位置、窗口大小以及即將創(chuàng)建的窗口風(fēng)格。返回2.Windows窗口“窗口”是Wind98圖4.1一個(gè)典型的窗口返回圖4.1一個(gè)典型的窗口返回994.1.2Windows程序的消息響應(yīng)機(jī)制Windows程序與其他類型程序的不同點(diǎn)就是消息。例如DOS程序,要等待(有時(shí)也稱為檢測(cè))可能的輸入,如鍵盤(pán)或鼠標(biāo),如果程序檢測(cè)不到鼠標(biāo),就不會(huì)對(duì)鼠標(biāo)的動(dòng)作做出相應(yīng)的反應(yīng)。而在Windows程序中以消息作為媒介,在操作系統(tǒng)中用消息來(lái)告訴應(yīng)用程序有情況發(fā)生了。例如,用戶按下了某個(gè)鍵,單擊或移動(dòng)了鼠標(biāo)、打印機(jī)可用了等等。一個(gè)窗口(每一個(gè)元素都是一個(gè)窗口)也可以發(fā)送消息給另一個(gè)窗口,大多數(shù)窗口對(duì)消息的反應(yīng)是發(fā)送一條略微不同的消息給另外一個(gè)窗口。返回4.1.2Windows程序的消息響應(yīng)機(jī)制Win1004.1.3Windows程序流程用Windows平臺(tái)軟件開(kāi)發(fā)工具包(SDK)的Win32API編寫(xiě)各種Windows應(yīng)用程序,有其共同的規(guī)律:首先是編寫(xiě)WinMain函數(shù),編寫(xiě)處理消息和事件的窗口過(guò)程WndProc,在WinMain里頭注冊(cè)窗口(RegisterWindow),創(chuàng)建窗口,然后開(kāi)始應(yīng)用程序的消息循環(huán)。返回4.1.3Windows程序流程用Window1014.2怎樣用VisualC++.NET設(shè)計(jì)Windows程序在VisualC++.NET中,開(kāi)發(fā)Windows應(yīng)用程序有以下幾種方法:直接調(diào)用Windows環(huán)境提供的Win32API函數(shù)來(lái)編寫(xiě)Windows應(yīng)用程序。實(shí)際上該方法適用于任何Windows環(huán)境下的C/C++語(yǔ)言編程。使用MFC類庫(kù)和活動(dòng)模板庫(kù)(ATL)直接編寫(xiě)Windows應(yīng)用程序。既使用MFC類庫(kù)和ATL,也使用向?qū)?Wizard)來(lái)編寫(xiě)Windows應(yīng)用程序。在這種情況下用MFC應(yīng)用程序、MFCActiveX控件等向?qū)?lái)生成Windows應(yīng)用程序的基本源文件,然后在程序框架的基礎(chǔ)上建立應(yīng)用程序的類和消息處理代碼并定義控件的屬性、事件和方法,最后把各應(yīng)用程序所要求的功能添加到程序中。使用C++托管擴(kuò)展程序編寫(xiě)Windows應(yīng)用程序。這是基于通用語(yǔ)言運(yùn)行時(shí)環(huán)境的Windows應(yīng)用程序。其實(shí),不管程序使用何種開(kāi)發(fā)方式編寫(xiě)Windows應(yīng)用程序,最終都要調(diào)用到WindowsAPI,因此,大家一起來(lái)看看在VisualC++.NET中如何用Win32API編寫(xiě)Windows程序,以進(jìn)一步了解Windows程序的流程。4.2怎樣用VisualC++.NET設(shè)計(jì)Windo1024.3VisualC++.NET的基礎(chǔ)類庫(kù)(MFC)介紹4.3.1MFC庫(kù)簡(jiǎn)介4.3.2MFC中的常用類4.3.3MFC中類的消息機(jī)制4.3.4MFC的程序流程4.3VisualC++.NET的基礎(chǔ)類庫(kù)(MFC)1034.3.1MFC庫(kù)簡(jiǎn)介Windows程序與其他類型程序的不同點(diǎn)就是消息。例如DOS程序,要等待(有時(shí)也稱為檢測(cè))可能的輸入,如鍵盤(pán)或鼠標(biāo),如果程序檢測(cè)不到鼠標(biāo),就不會(huì)對(duì)鼠標(biāo)的動(dòng)作做出相應(yīng)的反應(yīng)。而在Windows程序中以消息作為媒介,在操作系統(tǒng)中用消息來(lái)告訴應(yīng)用程序有情況發(fā)生了。例如,用戶按下了某個(gè)鍵,單擊或移動(dòng)了鼠標(biāo)、打印機(jī)可用了等等。一個(gè)窗口(每一個(gè)元素都是一個(gè)窗口)也可以發(fā)送消息給另一個(gè)窗口,大多數(shù)窗口對(duì)消息的反應(yīng)是發(fā)送一條略微不同的消息給另外一個(gè)窗口。返回4.3.1MFC庫(kù)簡(jiǎn)介Windows程序1044.3.2MFC中的常用類用Windows平臺(tái)軟件開(kāi)發(fā)工具包(SDK)的Win32API編寫(xiě)各種Windows應(yīng)用程序,有其共同的規(guī)律:首先是編寫(xiě)WinMain函數(shù),編寫(xiě)處理消息和事件的窗口過(guò)程WndProc,在WinMain里頭注冊(cè)窗口(RegisterWindow),創(chuàng)建窗口,然后開(kāi)始應(yīng)用程序的消息循環(huán)。返回4.3.2MFC中的常用類用Window1054.3.3MFC中類的消息機(jī)制Windows程序與其他類型程序的不同點(diǎn)就是消息。例如DOS程序,要等待(有時(shí)也稱為檢測(cè))可能的輸入,如鍵盤(pán)或鼠標(biāo),如果程序檢測(cè)不到鼠標(biāo),就不會(huì)對(duì)鼠標(biāo)的動(dòng)作做出相應(yīng)的反應(yīng)。而在Windows程序中以消息作為媒介,在操作系統(tǒng)中用消息來(lái)告訴應(yīng)用程序有情況發(fā)生了。例如,用戶按下了某個(gè)鍵,單擊或移動(dòng)了鼠標(biāo)、打印機(jī)可用了等等。一個(gè)窗口(每一個(gè)元素都是一個(gè)窗口)也可以發(fā)送消息給另一個(gè)窗口,大多數(shù)窗口對(duì)消息的反應(yīng)是發(fā)送一條略微不同的消息給另外一個(gè)窗口。返回4.3.3MFC中類的消息機(jī)制Windo1064.3.4MFC的程序流程用Windows平臺(tái)軟件開(kāi)發(fā)工具包(SDK)的Win32API編寫(xiě)各種Windows應(yīng)用程序,有其共同的規(guī)律:首先是編寫(xiě)WinMain函數(shù),編寫(xiě)處理消息和事件的窗口過(guò)程WndProc,在WinMain里頭注冊(cè)窗口(RegisterWindow),創(chuàng)建窗口,然后開(kāi)始應(yīng)用程序的消息循環(huán)。返回4.3.4MFC的程序流程用Window1074.4上機(jī)指導(dǎo)下面提供一個(gè)HELLOAPP示例,該示例定義了應(yīng)用程序類的派生類和窗體的派生類,用很少幾行代碼在屏幕上顯示一個(gè)窗口。同任何用MFC編寫(xiě)的應(yīng)用程序一樣,HELLOAPP也包含一個(gè)從應(yīng)用程序類派生的類。此應(yīng)用程序類提供InitInstance的最小實(shí)現(xiàn),該實(shí)現(xiàn)構(gòu)造一個(gè)(應(yīng)用程序特定的CMainWindow類的)框架窗體對(duì)象,然后調(diào)用該窗口的ShowWindow和UpdateWindow函數(shù)。4.4上機(jī)指導(dǎo)下面提供一個(gè)HEL108第5章文檔/視圖模型教學(xué)提示:在本章中,主要講述利用VisualC++.NET編寫(xiě)Windows應(yīng)用程序時(shí),經(jīng)常會(huì)用到的一個(gè)非常重要的模型:文檔/視圖模型,它對(duì)應(yīng)著CDocument和CView類。本章還結(jié)合這兩個(gè)類和VisualC++.NET的應(yīng)用程序向?qū)б龑?dǎo)讀者如何快速建立單文檔和多文檔的窗口應(yīng)用程序。學(xué)習(xí)完這些內(nèi)容后,讀者將會(huì)對(duì)VisualC++.NET中的文檔/視圖模型有一個(gè)比較全面的了解。教學(xué)目標(biāo):掌握文檔視圖模型的概念;掌握CDocument和CView類的使用方法;掌握使用向?qū)С绦騺?lái)構(gòu)造單文檔和多文檔應(yīng)用程序。通過(guò)上機(jī)實(shí)踐,初步掌握上述內(nèi)容。第5章文檔/視圖模型教學(xué)提示:在本章中1095.1文檔/視圖模型概念了解文檔和視圖的概念及相互作用關(guān)系是學(xué)習(xí)編寫(xiě)VisualC++.NET的MFC程序的基本功。由于MFC的應(yīng)用程序框架把文檔和視圖之間的關(guān)系封裝了起來(lái),作為初學(xué)者可以通過(guò)VisualC++.NET向?qū)Э焖俚厣梢粋€(gè)完整的擁有文檔、視圖框架的應(yīng)用程序。不過(guò)大多數(shù)初學(xué)者在學(xué)習(xí)時(shí)只知道使用向?qū)蓱?yīng)用程序,而沒(méi)有領(lǐng)悟框架中文檔、視圖的真正意義。接下來(lái)先介紹框架、文檔、視圖的基本概念。在MFC中Microsoft引入了框架、文檔、視圖結(jié)構(gòu)的概念,并且在這些概念中又引出與其相關(guān)聯(lián)的概念,如文檔模板、單文檔(SDI)、多文檔(MDI)、序列化等。
5.1.1文檔視圖體系的核心類
5.1.2訪問(wèn)當(dāng)前活動(dòng)文檔和視圖5.1文檔/視圖模型概念了解文檔和視圖的概1105.1.1文檔視圖體系的核心類在通過(guò)向?qū)?chuàng)建應(yīng)用程序時(shí),向?qū)閼?yīng)用程序創(chuàng)建文檔、視圖和框架類的基本結(jié)構(gòu)。剛創(chuàng)建好的一個(gè)完整框架的應(yīng)用程序一般由CWinApp應(yīng)用類、CFrameWnd窗口框架類、CDocument文檔類和CView視類四個(gè)基類組成。創(chuàng)建的文檔類是從CDocument類派生的,視圖類是從CView類派生的,框架類是從CFrameWnd類派生的。CDocument類為應(yīng)用程序定義的文檔類提供基本功能,CView類為應(yīng)用程序定義的視圖類提供基本功能。視圖和用戶的文檔間是緊密相連的。文檔類用于管理應(yīng)用程序的數(shù)據(jù),包括對(duì)數(shù)據(jù)的讀取、存儲(chǔ)和修改;視圖類用于顯示文檔并管理與用戶的交互,包括將存在的數(shù)據(jù)以某種方式顯示出來(lái)、接收用戶的輸入以及將這些輸入交給文檔類進(jìn)行處理等。接下來(lái)通過(guò)分析向?qū)傻拇a來(lái)了解向?qū)槲覀冏隽诵┦裁?,從而更好地體會(huì)應(yīng)用類、文檔類和視圖類。返回5.1.1文檔視圖體系的核心類在通過(guò)向?qū)?115.1.2訪問(wèn)當(dāng)前活動(dòng)文檔和視圖對(duì)于SDI程序,主框架窗口就是文檔框窗體,可以采用以下的方法取得當(dāng)前文檔和視圖:●取得活動(dòng)文檔CMyDocument*pDoc;pDoc=(CMyDocument*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveDocument());●取得活動(dòng)視圖CMyView*pView;pView=(CMyView*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView());返回5.1.2訪問(wèn)當(dāng)前活動(dòng)文檔和視圖對(duì)于SD1125.2設(shè)計(jì)單文檔界面窗口現(xiàn)在通過(guò)上一節(jié)的學(xué)習(xí),相信讀者已經(jīng)對(duì)SDI的基本概念有了一個(gè)初步的了解,在這一節(jié)中,主要是引導(dǎo)讀者用向?qū)?chuàng)建一個(gè)單文檔界面窗口的應(yīng)用程序,其具體步驟如下:(1)啟動(dòng)MicrosoftDevelopmentEnviroment,指定一名為SDISample的MFC工程。(2)進(jìn)入MFC應(yīng)用程序向?qū)?,如圖5.1所示。(3)MFC應(yīng)用程序向?qū)У钠渌麑傩皂?yè)均采用默認(rèn)設(shè)置,單擊【完成】按鈕,向?qū)閼?yīng)用程序生成必要的框架文件,并在工作區(qū)窗口中打開(kāi)生成的項(xiàng)目,如圖5.2所示。(4)通過(guò)【生成】|【生成SDISample】菜單命令,編譯源程序,編譯成功后按Ctrl+F5鍵運(yùn)行程序,即可見(jiàn)初步的界面效果,如圖5.3所示。5.2設(shè)計(jì)單文檔界面窗口現(xiàn)在通過(guò)上一113通過(guò)上面的4個(gè)步驟,可以得一個(gè)標(biāo)準(zhǔn)的SDI應(yīng)用程序,而它只是一個(gè)能和菜單相關(guān)聯(lián)的空窗口的應(yīng)用程序。接下來(lái),在此基礎(chǔ)上添加一些代碼,使之能產(chǎn)生一個(gè)經(jīng)典的HelloWord程序。首先,在類視圖中找到CSDISampleView類,如圖5.2所示,可以看到CSDISampleView是最后一個(gè)類。單擊該類,可以擴(kuò)展該樹(shù)型目錄,從中找到OnDraw(CDC*pDC)成員方法。如圖5.4所示。返回通過(guò)上面的4個(gè)步驟,可以得一個(gè)標(biāo)準(zhǔn)的SDI應(yīng)114雙擊該函數(shù),這時(shí)VisualStudio.NETIDE將會(huì)自動(dòng)打開(kāi)CSDISampleView類的OnDraw成員函數(shù)。這時(shí)我們編輯OnDraw函數(shù),代碼如下:voidCSDISampleView::OnDraw(CDC*pDC){ CSDISampleDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); if(!pDoc) return; pDC->TextOut(0,0,"HelloWorld!");}然后按Ctrl+S鍵存盤(pán)。接著按F5鍵運(yùn)行該程序,運(yùn)行結(jié)果如圖5.5所示。返回雙擊該函數(shù),這時(shí)VisualStudio115圖5.1MFC應(yīng)用程序向?qū)Х祷貓D5.1MFC應(yīng)用程序向?qū)Х祷?16圖5.2工作區(qū)窗口返回圖5.2工作區(qū)窗口返回117圖5.2工作區(qū)窗口返回圖5.2工作區(qū)窗口返回118圖5.3初步的運(yùn)行界面效果返回圖5.3初步的運(yùn)行界面效果返回119圖5.4類視圖返回圖5.4類視圖返回120圖5.5程序運(yùn)行結(jié)果返回圖5.5程序運(yùn)行結(jié)果返回1215.3設(shè)計(jì)多文檔界面窗口在上一小節(jié)中學(xué)習(xí)了如何制作單文檔界面窗口的應(yīng)用程序,在本小節(jié)中,將要學(xué)習(xí)如何創(chuàng)建一個(gè)多文檔界面窗口的應(yīng)用程序。主要步驟如下:(1)啟動(dòng)MicrosoftDevelopmentEnviroment,指定一個(gè)名為MDISample的MFC工程。(2)進(jìn)入MFC應(yīng)用程序向?qū)?,如圖5.6所示。在該向?qū)е械摹緫?yīng)用程序類型】屬性頁(yè)中,選擇【應(yīng)用程序類型】為【多文檔】,其他選項(xiàng)采用默認(rèn)設(shè)置。(3)MFC應(yīng)用程序向?qū)У钠渌麑傩皂?yè)均采用默認(rèn)設(shè)置,單擊【完成】按鈕,向?qū)閼?yīng)用程序生成必要的框架文件,并在工作區(qū)窗口中打開(kāi)生成的項(xiàng)目,如圖5.7所示。(4)通過(guò)【生成】|【生成MDISample】菜單命令,編譯源程序,編譯成功后按Ctrl+F5鍵運(yùn)行程序,即可見(jiàn)初步的界面效果。如圖5.8所示。在上機(jī)指導(dǎo)一節(jié)中將會(huì)有MDI的程序?qū)嵗谱鞯闹v述,讀者可以參照上機(jī)指導(dǎo)來(lái)對(duì)MDI程序進(jìn)行演練。5.3設(shè)計(jì)多文檔界面窗口在上一小節(jié)中學(xué)習(xí)122圖5.6MFC應(yīng)用程序向?qū)Х祷貓D5.6MFC應(yīng)用程序向?qū)Х祷?23圖5.7工作區(qū)窗口返回圖5.7工作區(qū)窗口返回124圖5.8初步的運(yùn)行界面效果返回圖5.8初步的運(yùn)行界面效果返回1255.4上機(jī)指導(dǎo)在本次上機(jī)指導(dǎo)中,針對(duì)前面幾節(jié)中的內(nèi)容進(jìn)行實(shí)際上機(jī)練習(xí)。其主要內(nèi)容包括:如何通過(guò)向?qū)蓡挝臋n和多文檔應(yīng)用程序,以及對(duì)CDocument類和CView類的使用等。5.4.1MFC應(yīng)用程序向?qū)У氖褂?.4.2在文檔視圖類中編程的一些技巧5.4.3實(shí)戰(zhàn)MDI5.4上機(jī)指導(dǎo)在本次上機(jī)指導(dǎo)中,針126第6章VisualC++.NET使用資源教學(xué)提示:前
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)療機(jī)構(gòu)醫(yī)療設(shè)備管理規(guī)范
- 會(huì)議室開(kāi)會(huì)制度
- 物流配送中心運(yùn)營(yíng)管理優(yōu)化方案(標(biāo)準(zhǔn)版)
- 人力資源管理信息化建設(shè)與實(shí)施(標(biāo)準(zhǔn)版)
- 車(chē)站客運(yùn)服務(wù)設(shè)施維護(hù)與管理制度
- 北宋中央制度
- 辦公室員工離職原因分析制度
- 安全生產(chǎn)制度
- 2026年湖南省演出公司公開(kāi)招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 2026年長(zhǎng)郡中學(xué)國(guó)際部誠(chéng)聘全球精英教師備考題庫(kù)及一套完整答案詳解
- 阿拉伯語(yǔ)課程講解
- 噴油部管理制度
- 2025江漢藝術(shù)職業(yè)學(xué)院輔導(dǎo)員考試題庫(kù)
- 《齊魯文化》期末筆記
- 非煤地下礦山機(jī)電知識(shí)
- 化工原理課程設(shè)計(jì)說(shuō)明書(shū)-2778kg-h苯-甲苯篩板式精餾塔設(shè)計(jì)
- 《高危作業(yè)培訓(xùn)》課件
- 97S501-1-井蓋及踏步圖集
- 設(shè)備清包工合同模板
- 電動(dòng)自行車(chē)車(chē)棚設(shè)計(jì)施工規(guī)劃方案
- 【暑假閱讀】小升初非連續(xù)性文本閱讀銜接講義 專題07 車(chē)票路線類(有答案解析)
評(píng)論
0/150
提交評(píng)論