面向對象與可視化程序設計VisualC編程課件_第1頁
面向對象與可視化程序設計VisualC編程課件_第2頁
面向對象與可視化程序設計VisualC編程課件_第3頁
面向對象與可視化程序設計VisualC編程課件_第4頁
面向對象與可視化程序設計VisualC編程課件_第5頁
已閱讀5頁,還剩165頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

面向對象與可視化

程序設計

--VisualC++編程

主講教師:

唐龍教授(計算機科學與技術系)

黃維通博士

(計算機與信息管理中心)

清華大學

2001年2月12/3/20221面向對象與可視化

程序設計

--VisualC++編程面向對象與可視化程序設計面向全校本科生的選修課。主要內容是在學習了C/C++程序設計語言基礎上,進一步學會使用VisualC++6.0的編程。一門實踐性很強的實用課程,要花時間多上機,才能學到手。講解與上機學時安排為1:1。12/3/20222面向對象與可視化程序設計面向全校本科生的選修課。12/2/2主要參考教材

“VisuaiC++面向對象與可視化程序設計”黃維通編著,清華大學出版社出版.“VisuaiC++面向對象與可視化程序設計習題解析與編程”黃維通編著清華大學出版社出版.12/3/20223主要參考教材“VisuaiC++面向對象與可視化程序設本學上課時間和地點:講課每周六上午第二大節(jié)(9:50——12:15)五教5203。上機每周日上午,計算中心機房。分兩組,每組2小時。12/3/20224本學上課時間和地點:講課12/2/20224建議與忠告

如果您沒學過C和C++程序設計語言,暫且不要選修本課程。周六和周日有其他活動的同學(例如,上外語強化班等)不要選修本課程可選同樣的課,每周四晚上黃維通老師講課。12/3/20225建議與忠告如果您沒學過C和C++程序設計語言,暫且不要選修課程主要內容VisualC++編程基礎使用API函數的可視化編程(ApplicationProgrammingInterface)使用MFC庫的可視化編程(MicrosoftFoundationClass)12/3/20226課程主要內容VisualC++編程基礎12/2/2022課程教學指導思想上機操作為主,課堂講解為輔;鼓勵讀書自學,提倡上機實踐;掌握基本方法,學會正確編程;12/3/20227課程教學指導思想上機操作為主,課堂講解為輔;12/2/202學習成績考核考核主要依據課后作業(yè)兩個大作業(yè)。注意:請您定要按時交作業(yè)。共有9次作業(yè)每次作業(yè)布置后兩周內交過時就提交不了。12/3/20228學習成績考核考核主要依據12/2/20228第一章

C++基礎知識12/3/20229第一章

C++基礎知識12/2/20229內容提要C++是C的繼承與發(fā)展C++程序基本結構C++的數據類型、常量和變量表達式和語句類與對象的基本概念C++程序設計和實現用VisualC++開發(fā)程序12/3/202210內容提要C++是C的繼承與發(fā)展12/2/202210§1.1.

C++是C的繼承與發(fā)展12/3/202211§1.1.

C++是C的繼承與發(fā)展12/2/2022111.關于C語言的回顧BrianKernighan和DennisRitchie基于B語言首創(chuàng)的(1972)。一種描述程序語言,開發(fā)目的是編寫UNIX操作系統(tǒng)。靈巧的、模塊化的、結構化的程序設計語言有標準,易移植,廣泛推廣應用。12/3/2022121.關于C語言的回顧BrianKernighan和Denn1.關于C語言的回顧(續(xù))C語言的優(yōu)點:與硬件無關,可移植性強;語言簡潔,使用方便;豐富的運算符和數據類型;可直接訪問內存地址;能進行位操作;目標代碼質量高,運行效率高…...12/3/2022131.關于C語言的回顧(續(xù))C語言的優(yōu)點:12/2/20221.關于C語言的回顧(續(xù))C語言的弱點:檢查機制弱,編譯時不能發(fā)現編程錯誤;面向過程的語言,沒有支持代碼復用的機制;很難控制大規(guī)模程序的復雜性。12/3/2022141.關于C語言的回顧(續(xù))C語言的弱點:12/2/20222.C++是C超集BjarneStroustrup開發(fā).1983年7月正式對外發(fā)表。主要目的,是支持編寫一復雜事件驅動的仿真程序。目標之一,是保持與C語言兼容.12/3/2022152.C++是C超集BjarneStroustrup開發(fā).2.C++是C超集(續(xù))保留了C在解決軟件界面和底層程序設計方面的有效性、緊湊性和靈活性.提供了支持面向對象的程序設計和高層次問題抽象的方法與手段。C++是為了支持大規(guī)模的軟件(5~10萬行)開發(fā)而設計的,比C語言有更強的類型檢查能力,以減少錯誤。12/3/2022162.C++是C超集(續(xù))保留了C在解決軟件界面和底層程序設3.C++的程序設計方法具有雙重性既反映了過程的程序設計方法,又反映了面向對象的程序設計方法。它代表了早先的各種程度設計語言的優(yōu)點的發(fā)展和提煉。當然,它最接近于C語言。這種雙重性給初學者帶來了困難。12/3/2022173.C++的程序設計方法具有雙重性既反映了過程的程序設計方法4.C++的關鍵概念——類類(class)是一種可由用戶定義的、封裝有數據元素及其操作函數的類型。類的引入帶來許多好處:提供了數據隱藏;確保數據的初始化;對用戶定義的類型隱式類型轉換;動態(tài)聯編和用戶控制的內存管理;實現運算符和函數的重載機制:實現類的派生和繼承機制;……12/3/2022184.C++的關鍵概念——類類(class)是一種可由用戶定義5.C++繼承并發(fā)展了C彌補了C的不足之處,增加了對面向對象的程序設計的支持;保持了C的簡潔性和高效性;包含了C的所有語法;大多數C程序都可簡單地轉化為C++程序(不包含C++新特征)。12/3/2022195.C++繼承并發(fā)展了C彌補了C的不足之處,增加了對面向對象6.C++對初學者挑戰(zhàn)理解引入新概念:類和對象;運算符和函數的重載;數據和方法封裝與隱蔽性;派生和繼承及多態(tài)性;……12/3/2022206.C++對初學者挑戰(zhàn)理解引入新概念:12/2/2022206.C++對初學者挑戰(zhàn)適應的程序設計新思路和方法過程與對象的設計方法雙重性;類和類庫的建立與使用;隱蔽性與多態(tài)性導致二義性;…...12/3/2022216.C++對初學者挑戰(zhàn)適應的程序設計新思路和方法12/2/2§1.2.

C++程序基本結構12/3/202222§1.2.

C++程序基本結構12/2/2022221.C++語言成分C++語言由特定的文字符號組成。包括:字母(a-z,A-Z)數字(0-9)及其他符號(+-*/%><=!’”{}[]()#?^&.:;,SP)字符可遵循一定的語法規(guī)則組成各種數、標識符、運算表達式,如:12345.67-12800.123scoresummerpeoplego_home1+2+3 (56-12)/34sum=n1+n212/3/2022231.C++語言成分C++語言由特定的文字符號組成。12/2/1.C++語言成分(續(xù))每個變量或函數都應有其唯一的名稱,用一串字符表達,稱為標識符。應當用合法的標識符,作為函數或變量正確的名稱,例如:_abc、people、go_home、Seg7、Lev_5。12/3/2022241.C++語言成分(續(xù))每個變量或函數都應有其唯一的名稱,1.C++語言成分(續(xù))

標識符有嚴格限制必須以字母或下劃線開頭;必須由字母,數字或下劃線組成;大小寫字母是有區(qū)別的;不允許用若干保留字(或關鍵字)。

不允許用非合法的標示符命名函數或變量,例如:-abc、go-home、3H、7_Seg、sUm#、$5012/3/2022251.C++語言成分(續(xù))標識符有嚴格限制12/2/20221.C++語言成分(續(xù))C++語言預先定義好的標識符,稱為保留字(即關鍵字)。ANSIC++中有61個,如下所示:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoid volatilewhileboolcatchclassconst_castdeletdynamic_castexplicitfalsefriendinlinemutablenamespacenewoperatorprivateprotectedpublicreinterpret_caststatic_casttemplatethisthrowturetrytypeidtypenameusingvirtnalwchar12/3/2022261.C++語言成分(續(xù))C++語言預先定義好的標識符,稱為保1.C++語言成分(續(xù))程序由語句組成。每個語句由標識符、常數、運算符號等組成,并以分號結束,例如:

intnum1,num2,sum;

num1=num2=3;

sun=num1+num2;12/3/2022271.C++語言成分(續(xù))程序由語句組成。每個語句由標識符、1.C++語言成分(續(xù))C++程序可劃分為多個模塊這些模塊就是函數和類。函數由一些相關的語句組成。類由一些相關的數據和函數組成起。12/3/2022281.C++語言成分(續(xù))C++程序可劃分為多個模塊12/22.程序的基本結構一個簡單的實例/**************************************一個簡單的C++程序,該程序在標準輸出設備上輸出一句問候語“hello”***************************************/#include<iostream.h>intmain(){ cout<<"hello!"; return0; //正常返回}12/3/2022292.程序的基本結構一個簡單的實例12/2/2022292.程序的基本結構(續(xù))它由三個部分組成:注釋編譯預處理命令行main函數。12/3/2022302.程序的基本結構(續(xù))它由三個部分組成:12/2/20223.注釋開始幾行是注釋,說明的程序的目的和功能。“//正常返回”也是注釋。使用注釋符時的注意事項:標志符‘/’和‘*’,‘/’和‘/’之間不可以分開。注釋符對“/*”和“*/”不可以嵌套。注釋符//之后的注釋結束于本行。12/3/2022313.注釋開始幾行是注釋,說明的程序的目的和功能。12/2/2思考題:下列程序是否正確?#include<iostream.h>intmain(){ /*下面程序將在終端上輸出/*你好*/的字樣*/ cout<<“您好!"; return0; //正常返回}12/3/202232思考題:下列程序是否正確?#include<iostrea4.編譯預處理命令“#include<iostream.h>”告訴C++編譯器,將文件iostream.h內容插到此程序中。iostream.h中定義了一組標準類輸入輸出流(I/Ostream)類。cout是標準輸出流類的一個預定義的對象。12/3/2022334.編譯預處理命令“#include<iostream.h5.函數在C++語言中,函數是具有如下定義形式的語法單位:

返回值類型函數名(函數參數表){

語句組

}函數頭——定義了函數的名字,函數參數和返回值。函數體——一對花括號及其中若干語句組成語句組。12/3/2022345.函數在C++語言中,函數是具有如下定義形式的語法單位:

5.函數(續(xù))C++程序是由若干個互相調用的函數組成的。一個程序必須有,且只能有一個主體——主函數main()。其他函數都是由main函數直接或者間接地調用。12/3/2022355.函數(續(xù))C++程序是由若干個互相調用的函數組成的。125.程序實例/***********************************

**計算給定半徑計算圓的周長**

***********************************/

#include<iostream.h>

voidmain()

{

/******定義變量和常量*****/

constfloatPI=3.14;//表示圓周率floatradius=4.15; //圓的半徑

floatcircum; //圓的周長12/3/2022365.程序實例/***********************5.程序實例(續(xù))

//計算圓的周長

circum=2*PI*radius;

//輸出計算結果

cout<<“radoiusis:“<<radius<<endl;

cout<<”circumferenceis:”<<circum<<endl;12/3/2022375.程序實例(續(xù))//計算圓的周長

circum=2§1.3.

C++的數據類型、

常量和變量12/3/202238§1.3.

C++的數據類型、

常量和變量12/2/202基本數據類型構造數據類型整型(int)實數型字符型(char)無值(void)(空類型)布爾型(bool)引申數據類型結構化數據類型指針(*)引用(&)數組([])結構(struct)聯合(union)位域枚舉(enum)類(class)浮點型(float)雙精度型(double)1.C++數據類型12/3/202239基本數據類型構造數據類型整型(int)引申數據類型結構化數據1.C++數據類型C++的基本數據類型包括有:整數型(int),例如:12,0,-127實數型,例如:3.14,12.0,0.234浮點類型(單精度型)(float)雙精度型(double)字符型(char)例如:‘A’,‘4’,‘%’無值型(空類型)(void)布爾型(bool),true,false12/3/2022401.C++數據類型C++的基本數據類型包括有:12/2/21.

C++數據類型由基本數據引申或組合構造而成數據類型,稱為構造數據類型。構造數據類型可分為兩大類:引申類型指針、引用結構化類型數組、結構、聯合、位域、枚舉、類12/3/2022411.C++數據類型由基本數據引申或組合構造而成數據類型,稱2.常量用來代表常數的標識符稱為常量。例如PI來代表3.14。定義常量的方式為:const常量類型常量名=初始化值例如:constfloatPI=3.14;//表示圓周率constcharBEST=‘A’;12/3/2022422.常量用來代表常數的標識符稱為常量。例如PI來代表3.143.變量變量來表示可以變化的值,應先定義,后使用,定義的方式為:

變量類型變量名;//變量說明變量既可以初始化,也可以賦值。例如:

intage; //年齡,age大于等于0

chargrade;//成績,分A-E五個等級floatradius=2.5;//半徑,初值2.5注意:和常量不同,變量能被賦值。12/3/2022433.變量變量來表示可以變化的值,應先定義,后使用,定義的方式3.變量(續(xù))變量名是變量的標識,由字母、數字和下劃線組成,才合法。合法的變量名,例如:

sumstudent_name_Y2K非法的變量名,例如:

2end1998us$student%12/3/2022443.變量(續(xù))變量名是變量的標識,由字母、數字和下劃線組成,§1.4.

表達式和語句12/3/202245§1.4.

表達式和語句12/2/2022451.表達式操作數和操作符組成的式子稱為表達式,其值是操作符施于操作數,所得的結果。最簡單的表達式就是單個的常量、變量或常數。數學運算符:+、-、*、/、%(取模)是簡單的操作符。12/3/2022461.表達式操作數和操作符組成的式子稱為表達式,其值是操作符施1.表達式(續(xù))表達式實例:aa+b*c-2002*PI*radius(x+y)/(a–b)12/3/2022471.表達式(續(xù))表達式實例:12/2/2022472.語句及其分類語句是程序中可執(zhí)行的基本單元,以分號結尾。語句的分類:說明和定義語句;表達式語句;流程控制語句;其他:12/3/2022482.語句及其分類語句是程序中可執(zhí)行的基本單元,以分號結尾。13.說明和定義語句說明或定義程序中用到的變量、常量、函數、類。例如:intgrade; //變量說明constfloatPI=3.14; //常量定義voidswap(int&a,int&b); //函數說明classPeople{ //類定義 ......};12/3/2022493.說明和定義語句說明或定義程序中用到的變量、常量、函數、類4.表達式語句進行數據輸入、輸出、運算或者賦值輸入語句 cin>>a;賦值語句 a=b+c;運算語句 a++;輸出語句 cout<<a;函數調用語句 swap(a,b);返回語句 returna+b;空語句 ;//什么也不做12/3/2022504.表達式語句進行數據輸入、輸出、運算或者賦值12/2/205.流程控制語句程序中一般語句是順序的方式執(zhí)行,流程控制語句可改變執(zhí)行的順序,包括:分支語句(if,switch)循環(huán)語句(for,while,do-while)跳轉語句(break,continue,goto)12/3/2022515.流程控制語句程序中一般語句是順序的方式執(zhí)行,流程控制語句6.程序的執(zhí)行流程順序 分支 循環(huán)語句1語句2語句3條件語句2語句1語句1語句212/3/2022526.程序的執(zhí)行流程順序 分支 §1.5.

類與對象的基本概念12/3/202253§1.5.

類與對象的基本概念12/2/2022531.對象及其屬性和操作對象是一件事物,屬性和操作屬性:狀態(tài),特征,組成成員;操作:修改屬性,訪問屬性,執(zhí)行命令。例如:文件具有文件名、長度、修改日期、內容等屬性;文件可進行復制、更名、打印等操作。12/3/2022541.對象及其屬性和操作對象是一件事物,屬性和操作12/2/22.類的定義類是具有相似特征的對象的抽象,例如:文件類所有具體文件對象的抽象書類所有具體書對象的抽象學生類所有具體學生對象的抽象類(class)是一種可由用戶定義的、封裝有數據元素及其操作函數的類型。因此,類是一種數據結構,含有數據及其操作函數的封裝體。12/3/2022552.類的定義類是具有相似特征的對象的抽象,例如:12/2/22.類的定義類的定義一般格式:

class類名{

類定義體

};關鍵字class引出一個類的定義或說明。類名是類的代表。類定義體是類的數據成員和函數成員的說明。函數成員用來對這些數據成員進行操作12/3/2022562.類的定義類的定義一般格式:

class類名{

類定3.類與對象的區(qū)別類是抽象的,對象是具體的類是類型,對象是變量類是模型,對象是實例12/3/2022573.類與對象的區(qū)別類是抽象的,對象是具體的12/2/20224.類和對象的好處將數據和操作組織在一起易于理解易于修改與維護類為對象提供了模板各個對象可以共享類的特征復用12/3/2022584.類和對象的好處將數據和操作組織在一起12/2/20225classFile{char file_name[100];int length;Date modify_date;char*contents; bool copy(File&target);bool rename(char*new_name);bool print();};屬性操作注意分號5.File類的定義12/3/202259classFile{屬性操作注意分號5.File類的bool File::copy(File&destineFile){ ......}bool

File::rename(char*new_name){ ......}boolFile::print(){ .......}5.File類的定義(續(xù))12/3/202260bool File::copy(File&destine//修改文件名為new_namebool File::rename(char*new_name){ strcpy(file_name,new_name);}5.File類的定義(續(xù))12/3/202261//修改文件名為new_name5.File類的定義(續(xù))//復制當前文件內容到指定文件中bool File::copy(File&target){ char*&pTarget=target.contents; delete[]pTarget;//釋放原來的空間

pTarget=newchar[length

+1]; strcpy(pTarget,contents);}5.File類的定義(續(xù))12/3/202262//復制當前文件內容到指定文件中5.File類的定義(續(xù))6.對象的創(chuàng)建直接創(chuàng)建變量Filef1,f2;動態(tài)創(chuàng)建變量File*pFile;pFile=newFile;......12/3/2022636.對象的創(chuàng)建直接創(chuàng)建變量12/2/2022637.類與結構的異同相同點成員的訪問控制;數據加操作;可以繼承。不同點類關鍵字為class,結構關鍵字為struct;類成員默認私有,結構成員默認公有; 結構一般用于描述數據的集合,類一般用于描述數據和操作的集合。12/3/2022647.類與結構的異同相同點12/2/2022648.其它概念和特性及功能構造函數和析構函數函數重載和操作符重載友元類和友元函數派生類和繼承性多態(tài)性和虛函數…...12/3/2022658.其它概念和特性及功能構造函數和析構函數12/2/2022§1.6.

C++程序設計和實現12/3/202266§1.6.

C++程序設計和實現12/2/2022661.結構化程序設計把程序設計看成處理數據的一系列過程;數據和程序分開存儲;追蹤函數調用及數據;功能分解并逐步求精。12/3/2022671.結構化程序設計把程序設計看成處理數據的一系列過程;12/2.面向對象程序設計把數據和處理數據過程看成一個整體——對象定義處理對象——類;支持封裝和數據隱藏;支持繼承和重載及多態(tài)性可實現軟件復用。12/3/2022682.面向對象程序設計把數據和處理數據過程看成一個整體——對象3.C++的三個重要機制類(class)函數重載(functionoverloading)操作符重載(operatoroverloading)。12/3/2022693.C++的三個重要機制類(class)12/2/202264.C++的設計方法對象及其操作必須先定義,類及其子類必須先建立。細節(jié)方面的設計又應當在整體結構及相應的關系被確定之后,才能進行。宜采用自底向上和自頂向下相結合的方法。12/3/2022704.C++的設計方法對象及其操作必須先定義,類及其子類必須先5.程序從概念到運行高級語言源程序到可執(zhí)行程序用編輯器輸入源程序,以源文件的形式存放。源程序文件用編譯器翻譯成目標代碼,以目標代碼文件存放。連接器將組成程序的各個目標代碼文件和一些庫函數連接在一起,組成一個完整的可執(zhí)行程序。12/3/2022715.程序從概念到運行高級語言源程序到可執(zhí)行程序12/2/25.程序從概念到運行(續(xù))C++和C語言程序的生成和使用過程類似。12/3/2022725.程序從概念到運行(續(xù))C++和C語言程序的生成和使用過6.實現集成化可視化的開發(fā)使用“集成開發(fā)環(huán)境(IDE)”(IntegratedDevelopmentEnvironment)。VisualC++是Microsoft公司的VisualStudio開發(fā)工具箱中C++程序開發(fā)包。包括:編輯器、C++編譯器、連接器、調試器、所有的庫、例子和創(chuàng)建Windows應用程序所需要的文檔。利用計算機圖形技術和方法實現可視化的開發(fā)。12/3/2022736.實現集成化可視化的開發(fā)使用“集成開發(fā)環(huán)境(IDE)”12§1.7.

用VisualC++

開發(fā)程序過程實例12/3/202274§1.7.

用VisualC++

開發(fā)程序過程實例12/1.VisualC++程序開發(fā)步驟啟動DeveloperStudio;創(chuàng)建新的程序項目(Project):項目中加C++源程序文件;輸入編輯C++源程序文件;編譯、連接為可執(zhí)行程序;運行程序。12/3/2022751.VisualC++程序開發(fā)步驟啟動Developer2.開發(fā)應用程序步驟之一點擊MicrosoftVisualC++6.0的圖標。(開始-程序-MicrosoftVisualC++6.0文件夾-圖標)進入VisualC++啟動的界面.12/3/2022762.開發(fā)應用程序步驟之一點擊MicrosoftVisualVisualC++啟動的界面12/3/202277VisualC++啟動的界面12/2/2022772.開發(fā)應用程序步驟之二主菜單中選擇File|New;New對話框中選擇Projects;單擊列表中Win32ConsoleApplication;在“Location”編輯框中鍵入存放程序文件的目錄,例如c:\testVC;12/3/2022782.開發(fā)應用程序步驟之二主菜單中選擇File|New;12/3.開發(fā)應用程序步驟之二(續(xù))在“projectname”編輯框中鍵入項目的名字,單擊OK;選擇項目類型“anemptyproject”,單擊Finish對話框中選OK結束配置,系統(tǒng)創(chuàng)建新程序(項目)所用到的各種文件。12/3/2022793.開發(fā)應用程序步驟之二(續(xù))在“projectname4.開發(fā)應用程序步驟之三主菜單中選擇File|New;New對話框中選擇File;單擊“C++SourceFile”;選中AddtoProject復選框;在Filename編輯框編輯框中鍵入文件名,如Hello,系統(tǒng)將自動創(chuàng)建并打開新文件Hello.cpp。12/3/2022804.開發(fā)應用程序步驟之三主菜單中選擇File|New;12/5.開發(fā)應用程序步驟之四打開的文件中輸入以下內容:

#include<iostream.h>

intmain(){

cout<<“hello!”<<endl;

return0;

}單擊工具欄中的”save”圖標,或選擇File|Save來保存文件。12/3/2022815.開發(fā)應用程序步驟之四打開的文件中輸入以下內容:

#inc6.開發(fā)應用程序步驟之五選擇主菜單的Build|CompileHello.cpp來編譯文件。若輸入的內容沒有錯誤,那么,輸出窗口將會顯示:hello.obj–0error(s),0warning(s)如在編譯時有錯誤或警告,表明源文件出現錯誤,應改正之。12/3/2022826.開發(fā)應用程序步驟之五選擇主菜單的Build|Compil6.開發(fā)應用程序步驟之五(續(xù))選擇主菜單的Build|BuildHello.exe來進行連接。若連接正確,得到了一個可執(zhí)行程序hello.exe,則在屏幕下方的輸出窗口將會顯示:hello.exe–0error(s),0warning(s)12/3/2022836.開發(fā)應用程序步驟之五(續(xù))選擇主菜單的Build|Bui7.開發(fā)應用程序步驟之六Build|Executehello.exe(或者Ctrl+F5),開發(fā)環(huán)境中執(zhí)行程序。在一個類似于DOS的窗口中顯示一行hello緊接著系統(tǒng)提示顯示Pressanykeytocontinue。按任意鍵,窗口關閉,退回到VisualC++開發(fā)環(huán)境。12/3/2022847.開發(fā)應用程序步驟之六Build|Executehell(第一章)

完12/3/202285(第一章)

完12/2/202285面向對象與可視化

程序設計

--VisualC++編程

主講教師:

唐龍教授(計算機科學與技術系)

黃維通博士

(計算機與信息管理中心)

清華大學

2001年2月12/3/202286面向對象與可視化

程序設計

--VisualC++編程面向對象與可視化程序設計面向全校本科生的選修課。主要內容是在學習了C/C++程序設計語言基礎上,進一步學會使用VisualC++6.0的編程。一門實踐性很強的實用課程,要花時間多上機,才能學到手。講解與上機學時安排為1:1。12/3/202287面向對象與可視化程序設計面向全校本科生的選修課。12/2/2主要參考教材

“VisuaiC++面向對象與可視化程序設計”黃維通編著,清華大學出版社出版.“VisuaiC++面向對象與可視化程序設計習題解析與編程”黃維通編著清華大學出版社出版.12/3/202288主要參考教材“VisuaiC++面向對象與可視化程序設本學上課時間和地點:講課每周六上午第二大節(jié)(9:50——12:15)五教5203。上機每周日上午,計算中心機房。分兩組,每組2小時。12/3/202289本學上課時間和地點:講課12/2/20224建議與忠告

如果您沒學過C和C++程序設計語言,暫且不要選修本課程。周六和周日有其他活動的同學(例如,上外語強化班等)不要選修本課程可選同樣的課,每周四晚上黃維通老師講課。12/3/202290建議與忠告如果您沒學過C和C++程序設計語言,暫且不要選修課程主要內容VisualC++編程基礎使用API函數的可視化編程(ApplicationProgrammingInterface)使用MFC庫的可視化編程(MicrosoftFoundationClass)12/3/202291課程主要內容VisualC++編程基礎12/2/2022課程教學指導思想上機操作為主,課堂講解為輔;鼓勵讀書自學,提倡上機實踐;掌握基本方法,學會正確編程;12/3/202292課程教學指導思想上機操作為主,課堂講解為輔;12/2/202學習成績考核考核主要依據課后作業(yè)兩個大作業(yè)。注意:請您定要按時交作業(yè)。共有9次作業(yè)每次作業(yè)布置后兩周內交過時就提交不了。12/3/202293學習成績考核考核主要依據12/2/20228第一章

C++基礎知識12/3/202294第一章

C++基礎知識12/2/20229內容提要C++是C的繼承與發(fā)展C++程序基本結構C++的數據類型、常量和變量表達式和語句類與對象的基本概念C++程序設計和實現用VisualC++開發(fā)程序12/3/202295內容提要C++是C的繼承與發(fā)展12/2/202210§1.1.

C++是C的繼承與發(fā)展12/3/202296§1.1.

C++是C的繼承與發(fā)展12/2/2022111.關于C語言的回顧BrianKernighan和DennisRitchie基于B語言首創(chuàng)的(1972)。一種描述程序語言,開發(fā)目的是編寫UNIX操作系統(tǒng)。靈巧的、模塊化的、結構化的程序設計語言有標準,易移植,廣泛推廣應用。12/3/2022971.關于C語言的回顧BrianKernighan和Denn1.關于C語言的回顧(續(xù))C語言的優(yōu)點:與硬件無關,可移植性強;語言簡潔,使用方便;豐富的運算符和數據類型;可直接訪問內存地址;能進行位操作;目標代碼質量高,運行效率高…...12/3/2022981.關于C語言的回顧(續(xù))C語言的優(yōu)點:12/2/20221.關于C語言的回顧(續(xù))C語言的弱點:檢查機制弱,編譯時不能發(fā)現編程錯誤;面向過程的語言,沒有支持代碼復用的機制;很難控制大規(guī)模程序的復雜性。12/3/2022991.關于C語言的回顧(續(xù))C語言的弱點:12/2/20222.C++是C超集BjarneStroustrup開發(fā).1983年7月正式對外發(fā)表。主要目的,是支持編寫一復雜事件驅動的仿真程序。目標之一,是保持與C語言兼容.12/3/20221002.C++是C超集BjarneStroustrup開發(fā).2.C++是C超集(續(xù))保留了C在解決軟件界面和底層程序設計方面的有效性、緊湊性和靈活性.提供了支持面向對象的程序設計和高層次問題抽象的方法與手段。C++是為了支持大規(guī)模的軟件(5~10萬行)開發(fā)而設計的,比C語言有更強的類型檢查能力,以減少錯誤。12/3/20221012.C++是C超集(續(xù))保留了C在解決軟件界面和底層程序設3.C++的程序設計方法具有雙重性既反映了過程的程序設計方法,又反映了面向對象的程序設計方法。它代表了早先的各種程度設計語言的優(yōu)點的發(fā)展和提煉。當然,它最接近于C語言。這種雙重性給初學者帶來了困難。12/3/20221023.C++的程序設計方法具有雙重性既反映了過程的程序設計方法4.C++的關鍵概念——類類(class)是一種可由用戶定義的、封裝有數據元素及其操作函數的類型。類的引入帶來許多好處:提供了數據隱藏;確保數據的初始化;對用戶定義的類型隱式類型轉換;動態(tài)聯編和用戶控制的內存管理;實現運算符和函數的重載機制:實現類的派生和繼承機制;……12/3/20221034.C++的關鍵概念——類類(class)是一種可由用戶定義5.C++繼承并發(fā)展了C彌補了C的不足之處,增加了對面向對象的程序設計的支持;保持了C的簡潔性和高效性;包含了C的所有語法;大多數C程序都可簡單地轉化為C++程序(不包含C++新特征)。12/3/20221045.C++繼承并發(fā)展了C彌補了C的不足之處,增加了對面向對象6.C++對初學者挑戰(zhàn)理解引入新概念:類和對象;運算符和函數的重載;數據和方法封裝與隱蔽性;派生和繼承及多態(tài)性;……12/3/20221056.C++對初學者挑戰(zhàn)理解引入新概念:12/2/2022206.C++對初學者挑戰(zhàn)適應的程序設計新思路和方法過程與對象的設計方法雙重性;類和類庫的建立與使用;隱蔽性與多態(tài)性導致二義性;…...12/3/20221066.C++對初學者挑戰(zhàn)適應的程序設計新思路和方法12/2/2§1.2.

C++程序基本結構12/3/2022107§1.2.

C++程序基本結構12/2/2022221.C++語言成分C++語言由特定的文字符號組成。包括:字母(a-z,A-Z)數字(0-9)及其他符號(+-*/%><=!’”{}[]()#?^&.:;,SP)字符可遵循一定的語法規(guī)則組成各種數、標識符、運算表達式,如:12345.67-12800.123scoresummerpeoplego_home1+2+3 (56-12)/34sum=n1+n212/3/20221081.C++語言成分C++語言由特定的文字符號組成。12/2/1.C++語言成分(續(xù))每個變量或函數都應有其唯一的名稱,用一串字符表達,稱為標識符。應當用合法的標識符,作為函數或變量正確的名稱,例如:_abc、people、go_home、Seg7、Lev_5。12/3/20221091.C++語言成分(續(xù))每個變量或函數都應有其唯一的名稱,1.C++語言成分(續(xù))

標識符有嚴格限制必須以字母或下劃線開頭;必須由字母,數字或下劃線組成;大小寫字母是有區(qū)別的;不允許用若干保留字(或關鍵字)。

不允許用非合法的標示符命名函數或變量,例如:-abc、go-home、3H、7_Seg、sUm#、$5012/3/20221101.C++語言成分(續(xù))標識符有嚴格限制12/2/20221.C++語言成分(續(xù))C++語言預先定義好的標識符,稱為保留字(即關鍵字)。ANSIC++中有61個,如下所示:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoid volatilewhileboolcatchclassconst_castdeletdynamic_castexplicitfalsefriendinlinemutablenamespacenewoperatorprivateprotectedpublicreinterpret_caststatic_casttemplatethisthrowturetrytypeidtypenameusingvirtnalwchar12/3/20221111.C++語言成分(續(xù))C++語言預先定義好的標識符,稱為保1.C++語言成分(續(xù))程序由語句組成。每個語句由標識符、常數、運算符號等組成,并以分號結束,例如:

intnum1,num2,sum;

num1=num2=3;

sun=num1+num2;12/3/20221121.C++語言成分(續(xù))程序由語句組成。每個語句由標識符、1.C++語言成分(續(xù))C++程序可劃分為多個模塊這些模塊就是函數和類。函數由一些相關的語句組成。類由一些相關的數據和函數組成起。12/3/20221131.C++語言成分(續(xù))C++程序可劃分為多個模塊12/22.程序的基本結構一個簡單的實例/**************************************一個簡單的C++程序,該程序在標準輸出設備上輸出一句問候語“hello”***************************************/#include<iostream.h>intmain(){ cout<<"hello!"; return0; //正常返回}12/3/20221142.程序的基本結構一個簡單的實例12/2/2022292.程序的基本結構(續(xù))它由三個部分組成:注釋編譯預處理命令行main函數。12/3/20221152.程序的基本結構(續(xù))它由三個部分組成:12/2/20223.注釋開始幾行是注釋,說明的程序的目的和功能?!?/正常返回”也是注釋。使用注釋符時的注意事項:標志符‘/’和‘*’,‘/’和‘/’之間不可以分開。注釋符對“/*”和“*/”不可以嵌套。注釋符//之后的注釋結束于本行。12/3/20221163.注釋開始幾行是注釋,說明的程序的目的和功能。12/2/2思考題:下列程序是否正確?#include<iostream.h>intmain(){ /*下面程序將在終端上輸出/*你好*/的字樣*/ cout<<“您好!"; return0; //正常返回}12/3/2022117思考題:下列程序是否正確?#include<iostrea4.編譯預處理命令“#include<iostream.h>”告訴C++編譯器,將文件iostream.h內容插到此程序中。iostream.h中定義了一組標準類輸入輸出流(I/Ostream)類。cout是標準輸出流類的一個預定義的對象。12/3/20221184.編譯預處理命令“#include<iostream.h5.函數在C++語言中,函數是具有如下定義形式的語法單位:

返回值類型函數名(函數參數表){

語句組

}函數頭——定義了函數的名字,函數參數和返回值。函數體——一對花括號及其中若干語句組成語句組。12/3/20221195.函數在C++語言中,函數是具有如下定義形式的語法單位:

5.函數(續(xù))C++程序是由若干個互相調用的函數組成的。一個程序必須有,且只能有一個主體——主函數main()。其他函數都是由main函數直接或者間接地調用。12/3/20221205.函數(續(xù))C++程序是由若干個互相調用的函數組成的。125.程序實例/***********************************

**計算給定半徑計算圓的周長**

***********************************/

#include<iostream.h>

voidmain()

{

/******定義變量和常量*****/

constfloatPI=3.14;//表示圓周率floatradius=4.15; //圓的半徑

floatcircum; //圓的周長12/3/20221215.程序實例/***********************5.程序實例(續(xù))

//計算圓的周長

circum=2*PI*radius;

//輸出計算結果

cout<<“radoiusis:“<<radius<<endl;

cout<<”circumferenceis:”<<circum<<endl;12/3/20221225.程序實例(續(xù))//計算圓的周長

circum=2§1.3.

C++的數據類型、

常量和變量12/3/2022123§1.3.

C++的數據類型、

常量和變量12/2/202基本數據類型構造數據類型整型(int)實數型字符型(char)無值(void)(空類型)布爾型(bool)引申數據類型結構化數據類型指針(*)引用(&)數組([])結構(struct)聯合(union)位域枚舉(enum)類(class)浮點型(float)雙精度型(double)1.C++數據類型12/3/2022124基本數據類型構造數據類型整型(int)引申數據類型結構化數據1.C++數據類型C++的基本數據類型包括有:整數型(int),例如:12,0,-127實數型,例如:3.14,12.0,0.234浮點類型(單精度型)(float)雙精度型(double)字符型(char)例如:‘A’,‘4’,‘%’無值型(空類型)(void)布爾型(bool),true,false12/3/20221251.C++數據類型C++的基本數據類型包括有:12/2/21.

C++數據類型由基本數據引申或組合構造而成數據類型,稱為構造數據類型。構造數據類型可分為兩大類:引申類型指針、引用結構化類型數組、結構、聯合、位域、枚舉、類12/3/20221261.C++數據類型由基本數據引申或組合構造而成數據類型,稱2.常量用來代表常數的標識符稱為常量。例如PI來代表3.14。定義常量的方式為:const常量類型常量名=初始化值例如:constfloatPI=3.14;//表示圓周率constcharBEST=‘A’;12/3/20221272.常量用來代表常數的標識符稱為常量。例如PI來代表3.143.變量變量來表示可以變化的值,應先定義,后使用,定義的方式為:

變量類型變量名;//變量說明變量既可以初始化,也可以賦值。例如:

intage; //年齡,age大于等于0

chargrade;//成績,分A-E五個等級floatradius=2.5;//半徑,初值2.5注意:和常量不同,變量能被賦值。12/3/20221283.變量變量來表示可以變化的值,應先定義,后使用,定義的方式3.變量(續(xù))變量名是變量的標識,由字母、數字和下劃線組成,才合法。合法的變量名,例如:

sumstudent_name_Y2K非法的變量名,例如:

2end1998us$student%12/3/20221293.變量(續(xù))變量名是變量的標識,由字母、數字和下劃線組成,§1.4.

表達式和語句12/3/2022130§1.4.

表達式和語句12/2/2022451.表達式操作數和操作符組成的式子稱為表達式,其值是操作符施于操作數,所得的結果。最簡單的表達式就是單個的常量、變量或常數。數學運算符:+、-、*、/、%(取模)是簡單的操作符。12/3/20221311.表達式操作數和操作符組成的式子稱為表達式,其值是操作符施1.表達式(續(xù))表達式實例:aa+b*c-2002*PI*radius(x+y)/(a–b)12/3/20221321.表達式(續(xù))表達式實例:12/2/2022472.語句及其分類語句是程序中可執(zhí)行的基本單元,以分號結尾。語句的分類:說明和定義語句;表達式語句;流程控制語句;其他:12/3/20221332.語句及其分類語句是程序中可執(zhí)行的基本單元,以分號結尾。13.說明和定義語句說明或定義程序中用到的變量、常量、函數、類。例如:intgrade; //變量說明constfloatPI=3.14; //常量定義voidswap(int&a,int&b); //函數說明classPeople{ //類定義 ......};12/3/20221343.說明和定義語句說明或定義程序中用到的變量、常量、函數、類4.表達式語句進行數據輸入、輸出、運算或者賦值輸入語句 cin>>a;賦值語句 a=b+c;運算語句 a++;輸出語句 cout<<a;函數調用語句 swap(a,b);返回語句 returna+b;空語句 ;//什么也不做12/3/20221354.表達式語句進行數據輸入、輸出、運算或者賦值12/2/205.流程控制語句程序中一般語句是順序的方式執(zhí)行,流程控制語句可改變執(zhí)行的順序,包括:分支語句(if,switch)循環(huán)語句(for,while,do-while)跳轉語句(break,continue,goto)12/3/20221365.流程控制語句程序中一般語句是順序的方式執(zhí)行,流程控制語句6.程序的執(zhí)行流程順序 分支 循環(huán)語句1語句2語句3條件語句2語句1語句1語句212/3/20221376.程序的執(zhí)行流程順序 分支 §1.5.

類與對象的基本概念12/3/2022138§1.5.

類與對象的基本概念12/2/2022531.對象及其屬性和操作對象是一件事物,屬性和操作屬性:狀態(tài),特征,組成成員;操作:修改屬性,訪問屬性,執(zhí)行命令。例如:文件具有文件名、長度、修改日期、內容等屬性;文件可進行復制、更名、打印等操作。12/3/20221391.對象及其屬性和操作對象是一件事物,屬性和操作12/2/22.類的定義類是具有相似特征的對象的抽象,例如:文件類所有具體文件對象的抽象書類所有具體書對象的抽象學生類所有具體學生對象的抽象類(class)是一種可由用戶定義的、封裝有數據元素及其操作函數的類型。因此,類是一種數據結構,含有數據及其操作函數的封裝體。12/3/20221402.類的定義類是具有相似特征的對象的抽象,例如:12/2/22.類的定義類的定義一般格式:

class類名{

類定義體

};關鍵字class引出一個類的定義或說明。類名是類的代表。類定義體是類的數據成員和函數成員的說明。函數成員用來對這些數據成員進行操作12/3/20221412.類的定義類的定義一般格式:

class類名{

類定3.類與對象的區(qū)別類是抽象的,對象是具體的類是類型,對象是變量類是模型,對象是實例12/3/20221423.類與對象的區(qū)別類是抽象的,對象是具體的12/2/20224.類和對象的好處將數據和操作組織在一起易于理解易于修改與維護類為對象提供了模板各個對象可以共享類的特征復用12/3/20221434.類和對象的好處將數據和操作組織在一起12/2/20225classFile{char file_name[100];int length;Date modify_date;char*contents; bool copy(File&target);bool rename(char*new_name);bool print();};屬性操作注意分號5.File類的定義12/3/2022144classFile{屬性操作注意分號5.File類的bool File::copy(File&destineFile){ ......}bool

File::rename(char*new_name){ ......}boolFile::print(){ .......}5.File類的定義(續(xù))12/3/2022145bool File::copy(File&destine//修改文件名為new_namebool File::rename(char*new_name){ strcpy(file_name,new_name);}5.File類的定義(續(xù))12/3/2022146//修改文件名為new_name5.File類的定義(續(xù))//復制當前文件內容到指定文件中bool File::copy(File&target){ char*&pTarget=target.contents; delete[]pTarget;//釋放原來的空間

pTarget=newchar[length

+1]; strcpy(pTarget,contents);}5.File類的定義(續(xù))12/3/2022147//復制當前文件內容到指定文件中5.File類的定義(續(xù))6.對象的創(chuàng)建直接創(chuàng)建變量Filef1,f2;動態(tài)創(chuàng)建變量File*pFile;pFile=newFile;......12/3/20221486.對象的創(chuàng)建直接創(chuàng)建變量12/2/2022637.類與結構的異同相同點成員的訪問控制;數據加操作;可以繼承。不同點類關鍵字為class,結構關鍵字為struct;類成員默認私有,結構成員默認公有; 結構一般用于描述數據的集合,類一般用于描述數據和操作的集合。12/3/20221497.類與結構的異同相同點12/2/2022648.其它概念和特性及功能構造函數和析構函數函數重載和操作符重載友元類和友元函數派生類和繼承性多態(tài)性和虛函數…...12/3/20221508.其它概念和特性及功能構造函數和析構函數12/2/2022§1.6.

C++程序設計和實現12/3/2022151§1.6.

C++程序設計和實現12/2/2022661.結構化程序設計把程序設計看成處理數據的一系列過程;數據和程序分開存儲;追蹤函數調用及數據;功能分解并逐步求精。12/3/20221521.結構

溫馨提示

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

最新文檔

評論

0/150

提交評論