第一章 C++編程概述.ppt_第1頁
第一章 C++編程概述.ppt_第2頁
第一章 C++編程概述.ppt_第3頁
第一章 C++編程概述.ppt_第4頁
第一章 C++編程概述.ppt_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1. Dont panic! All will become clear in time; 2. You dont have to know every detail of C+ to write good programs; 3. Focus on programming techniques, not on language features.,BjarneStroustrup對(duì)C+初學(xué)者的3條建議,C+程序設(shè)計(jì),學(xué)習(xí)目標(biāo):,初步了解面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念 理解一個(gè)典型的C+程序開發(fā)環(huán)境 能夠用C+寫簡單的程序 能夠運(yùn)用簡單的輸入和輸出語句 熟悉基本數(shù)據(jù)類型 能夠運(yùn)用算術(shù)運(yùn)算符 能夠編

2、寫簡單的判斷語句,第一章 C+編程概述 (Introduction to C+ Programming),1.1 從C到C+,C Hardware independent: portable programs Development language of UNIX 1989: ANSI standard, 1990: ANSI and ISO standard published,可移植性提示01:由于C是一種標(biāo)準(zhǔn)化的,與硬件無關(guān)的、廣泛使用的語言,所以用C編寫的應(yīng)用程序通常無需修改,或只需稍作修改,即可用于多種不同的計(jì)算機(jī)系統(tǒng)。,C語言的優(yōu)點(diǎn): 與硬件無關(guān),可移植性強(qiáng) 語言簡潔,使用方便

3、豐富的運(yùn)算符和數(shù)據(jù)類型 可直接訪問內(nèi)存地址 能進(jìn)行位操作 目標(biāo)代碼質(zhì)量高,運(yùn)行效率高,C語言的局限性: (1)數(shù)據(jù)類型檢查機(jī)制相對(duì)較弱,這使得程序中的一些錯(cuò)誤不能在編譯階段被發(fā)現(xiàn)。 (2)C本身幾乎沒有支持代碼重用的語言結(jié)構(gòu),因此一個(gè)程序員精心設(shè)計(jì)的程序,很難為其它程序所用。 (3)當(dāng)程序的規(guī)模達(dá)到一定程度時(shí),程序員很難控制程序的復(fù)雜性。,C+ owes(歸功于) most to C. Other ancestors are Simula67and Algol68. First versions of C+ in 1980 under the name “C with classes”. Si

4、nce 1983 the name C+ is used. 1990: ANSI/ISO 9899 defines a standard for C 1998: ISO/IEC 14882 specifies the standard for C+,Bjarne Stroustrup, C+是C的超集(Superset) Provides capabilities for object-oriented programming 一種混合語言(Hybrid language) Can program with, C-like style, Object-oriented style, or bo

5、th C+ programs Built from pieces called classes and functions C+ standard library Rich collections of existing classes and functions,軟件工程知識(shí)01:使用“組裝方法”創(chuàng)建程序,盡量不要重復(fù)別人已經(jīng)做過的工作,盡量利用現(xiàn)有部件這就是所謂的“軟件重用”,也是面向?qū)ο缶幊痰木杷凇?軟件工程知識(shí)02:進(jìn)行C+編程時(shí),通常使用如下構(gòu)件:C+標(biāo)準(zhǔn)庫中的類和函數(shù)、自行創(chuàng)建的類和函數(shù)以及由一些知名的第三方廠家提供的類和函數(shù)。,性能提示01:采用標(biāo)準(zhǔn)庫的函數(shù)和類,而不是自行編

6、寫相應(yīng)的版本,可有效提高程序性能,因?yàn)檫@些組件經(jīng)過精心的編寫,可保證高效而正確地運(yùn)行。,可移植性提示02:采用標(biāo)準(zhǔn)庫函數(shù)和類,而不編寫自己地相應(yīng)版本,可顯著改善程序地可移植性,這是由于在幾乎所有的C+實(shí)現(xiàn)方案中,都已包含了這些標(biāo)準(zhǔn)庫函數(shù)和類。,1.2 程序與語言,計(jì)算機(jī)的工作是用程序來控制的。 程序是指令的集合。 指令是計(jì)算機(jī)可以識(shí)別的命令。,What is Computer Programming?,It is the process of planning a sequence of steps (called instructions) for a computer to follow.

7、,. . .,Programming Life Cycle Phases,Problem-Solving Implementation Maintenance,What is a Programming Language?,It is a language with strict grammar rules, symbols, and special words used to construct a computer program.,A Tempting Shortcut?,GOAL,THINKING,CODE,REVISE,REVISE,REVISE,DEBUG,DEBUG,DEBUG,

8、TEST,CODE,Shortcut?,Evolution of Programming Languages,Early computers programmed in machine languages - All binary numbers Assembly language used mnemonic(記憶的) codes - Codes translated into machine language by a program called the assembler,High level languages are portable user writes program in l

9、anguage similar to natural language examples - FORTRAN, COBOL, Pascal, Ada, Modula-2, C+, Java most are standardized by ISO/ANSI to provide an official description of the language,Evolution of Programming Languages,主要的面向?qū)ο笳Z言 C+ Smalltalk Eiffel CLOS Java,早期的程序設(shè)計(jì)方法 結(jié)構(gòu)化程序設(shè)計(jì)方法 面向?qū)ο蟪绦蛟O(shè)計(jì)方法,1.3 程序設(shè)計(jì)方法,早期的

10、程序設(shè)計(jì)方法追求程序的高效率,編程過份依賴技巧,而不注重所編寫程序的結(jié)構(gòu),也就是沒有固定程序設(shè)計(jì)方法的時(shí)期。程序的可讀性、可重用性都很差。其中一個(gè)典型問題是頻繁使用goto語句。 雖然這種方法存在很多問題,但對(duì)于單人完成較為簡單的任務(wù),事實(shí)上還是經(jīng)常被采用的。,早期的程序設(shè)計(jì)方法,結(jié)構(gòu)化方法出現(xiàn)在70年代中期,我們可以這樣理解它: 結(jié)構(gòu)化程序設(shè)計(jì)方法是從程序要實(shí)現(xiàn)的功能的角度出發(fā)的。一般按照自頂向下、逐步求精的方式,將程序要完成的功能逐級(jí)劃分成許多小的功能模塊,象搭積木一樣搭起來。這些小的功能模塊最終都可以轉(zhuǎn)化成三種基本控制結(jié)構(gòu)的組合。 所謂的功能可以理解為對(duì)數(shù)據(jù)的操作。在程序?qū)崿F(xiàn)中,特定的功

11、能或功能模塊一般用函數(shù)來實(shí)現(xiàn),它們要對(duì)特定的數(shù)據(jù)進(jìn)行操作。,結(jié)構(gòu)化程序設(shè)計(jì)方法,結(jié)構(gòu)化設(shè)計(jì)方法的特點(diǎn),結(jié)構(gòu)化程序設(shè)計(jì)方法的主要技術(shù)是自頂向下、逐步求精,采用單入口、單出口的控制結(jié)構(gòu) 自頂向下是一種分解問題的技術(shù),逐步求精指結(jié)構(gòu)化程序的連續(xù)分解,最終成為下面三種基本控制結(jié)構(gòu)的組合 三種基本控制結(jié)構(gòu):順序、分支、循環(huán),分支結(jié)構(gòu),語句1,語句2,語句3,條件,語句2,語句1,語句1,語句2,順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),例: 從鍵盤輸入一個(gè)學(xué)生的信息(包括姓名、年齡、性別、學(xué)號(hào)等)和一個(gè)老師的信息(包括姓名、年齡、性別、是否授課等),然后將信息輸出到屏幕。,一個(gè)簡單的例子,分析: 根據(jù)需求(題目要求),我們可

12、以把問題劃分為兩個(gè)功能模塊,一個(gè)是輸入模塊,一個(gè)是輸出模塊,做完了輸入模塊,再做輸出模塊。再具體考慮每個(gè)模塊如何實(shí)現(xiàn)(逐步求精)。 我們用C語言來寫,參看下面的代碼:,/ int main()/ 主函數(shù)開始 / 聲明用于存儲(chǔ)學(xué)生信息的變量 char strStudentName20;/ 學(xué)生姓名 int nStudentAge;/ 學(xué)生年齡 char cStudentSex;/ 學(xué)生性別 int nStudentNumber; / 學(xué)生學(xué)號(hào) / 聲明用于存儲(chǔ)老師信息的變量 char strTeacherName20;/ 老師姓名 int nTeacherAge;/ 老師年齡 char cTea

13、cherSex;/ 老師性別 int nIsTeaching; / 是否授課 / 輸入模塊 GetStudentInfo();/ 輸入學(xué)生信息 GetTeacherInfo();/ 輸入老師信息 / 輸出模塊 PrintStudentInfo();/ 輸出學(xué)生信息 PrintStudentInfo();/ 輸出老師信息 return(0); ,描述學(xué)生的數(shù)據(jù),描述老師的數(shù)據(jù),函數(shù),函數(shù),上面的例子中,我們可以進(jìn)一步將屬于學(xué)生和老師的變量放入結(jié)構(gòu)中。這樣可以在一定程度上完成對(duì)數(shù)據(jù)的封裝。但在結(jié)構(gòu)化程序設(shè)計(jì)中,數(shù)據(jù)與對(duì)其進(jìn)行操作的函數(shù)仍是分離的。,/ 聲明學(xué)生結(jié)構(gòu)Student struct St

14、udent char strStudentName20;/ 學(xué)生姓名 int nStudentAge;/ 學(xué)生年齡 char cStudentSex;/ 學(xué)生性別 int nStudentNumber; / 學(xué)生學(xué)號(hào) ; / 聲明老師結(jié)構(gòu)Teacher struct Teacher char strTeacherName20;/ 老師姓名 int nTeacherAge;/ 老師年齡 char cTeacherSex;/ 老師性別 int nIsTeaching; / 是否教書 ;,問題: 函數(shù)用于完成一定的功能,它們都是針對(duì)特定的數(shù)據(jù)進(jìn)行操作的。那么我們能不能以特定的數(shù)據(jù)為中心,將數(shù)據(jù)與對(duì)其

15、進(jìn)行操作的函數(shù)封裝起來呢?,面向?qū)ο蟪绦蛟O(shè)計(jì)方法,面向?qū)ο蟪绦蛟O(shè)計(jì)出現(xiàn)在80年代中后期 面向?qū)ο蟪绦蛟O(shè)計(jì)是建立在結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)上的,但它不再是從功能入手,而是從對(duì)象(人、地方、事情等)入手 面向?qū)ο蟪绦蛟O(shè)計(jì)以類作為構(gòu)造程序的基本單位,它具有封裝、數(shù)據(jù)抽象、繼承、多態(tài)等特點(diǎn),簡單地說,對(duì)象就是現(xiàn)實(shí)世界中的各種實(shí)體,包括人、地點(diǎn)和事物等。例如,桌子、椅子、教室、學(xué)生、老師、電話、汽車等等。一般都要從屬性和行為兩個(gè)方面來對(duì)它們加以描述。在這里,我們認(rèn)為對(duì)象和對(duì)象的實(shí)例是同一個(gè)概念。,什么是對(duì)象?,對(duì)象都具有某些特征,并展現(xiàn)某些行為,對(duì)象具有的一些特征稱為屬性,以一個(gè)人為例,他的姓名、年齡、身高、

16、體重等可以作為他的屬性。這些屬性會(huì)有其對(duì)應(yīng)的值,一般至少會(huì)有一項(xiàng)區(qū)別于其它對(duì)象,它們?cè)诔绦蛟O(shè)計(jì)中對(duì)應(yīng)的是一定的數(shù)據(jù)。 為了達(dá)到目的,對(duì)象必須提供的功能(或必須提供的服務(wù))稱為對(duì)象的行為,在程序設(shè)計(jì)中對(duì)應(yīng)一定的方法(函數(shù))。,屬性和行為,Object = Data + Methods,數(shù)據(jù) 員工詳細(xì)資料 工資結(jié)算表 票據(jù) 憑證 收據(jù),函數(shù) 計(jì)算工資 支付工資 支付帳單 記帳 銀行交易,會(huì)計(jì),類描述了一組具有相同屬性(數(shù)據(jù)元素)和相同行為(函數(shù))的對(duì)象。 類的數(shù)據(jù)成員是對(duì)對(duì)象屬性的抽象,類的函數(shù)成員是對(duì)對(duì)象行為的抽象,而類本身就是對(duì)對(duì)象的抽象。,什么是類?,多邊形對(duì)象,多邊形類,屬性頂點(diǎn)邊的顏色填

17、充顏色,方法繪制擦除移動(dòng),抽象為,class Student/ Student類的聲明 public: / 公有成員 Student();/ 構(gòu)造函數(shù) Student();/ 析構(gòu)函數(shù) char*GetName();/ 查詢姓名 intGetAge();/ 查詢年齡 charGetSex();/ 查詢姓名 intGetNumber();/ 查詢學(xué)號(hào) boolSetName(char* n);/ 設(shè)置姓名 boolSetAge(int age);/ 設(shè)置年齡 boolSetSex(char* s);/ 設(shè)置性別 boolSetNumber(int num);/ 設(shè)置學(xué)號(hào) protected: /

18、 保護(hù)成員 charm_strName20;/ 姓名,字符串?dāng)?shù)組 intm_nAge;/ 年齡,整型 charm_cSex;/ 性別,字符型 intm_nNumber;/ 學(xué)號(hào),整型 ;,例:C+中類的聲明Student類,成員函數(shù),成員函數(shù),成員變量, Student A;/ 聲明Student的對(duì)象A A.SetName(“張三”);/ 設(shè)置A的名字 A.SetAge(20);/ 設(shè)置A的年齡 ,例:C+中類的使用,總的來說, 結(jié)構(gòu)化程序設(shè)計(jì)方法是一種模塊化程序設(shè)計(jì)方法,它在解決問題時(shí)是以功能為中心的,一定的功能模塊雖然也作用于特定的數(shù)據(jù),但它們并沒有被封裝在一起。 面向?qū)ο蟪绦蛟O(shè)計(jì)方法則

19、是以對(duì)象為中心來解決問題的。屬于同種對(duì)象的屬性(數(shù)據(jù))和服務(wù)(功能)被抽象出來封裝到一起。,Why do we care about objects?,Modularity(模塊化) - large software projects can be split up in smaller pieces. Reuseability(可重用性) - Programs can be assembled from pre-written software components. Extensibility(可擴(kuò)展性) - New software components can be written o

20、r developed from existing ones.,軟件工程知識(shí)03:大量可重用軟件組件的類庫可以通過Internet得到,許多這樣的類庫都是免費(fèi)的。,Abstraction(抽象) is the representation of the essential features of an object. These are encapsulated into an abstract data type. Encapsulation(封裝) is the practice of including in an object everything it needs hidden fr

21、om other objects. The internal state is usually not accessible by other objects.,1.4 基本術(shù)語(Basic Terminology),Encapsulation(封裝),Basic Terminology:Inheritance(繼承),Inheritance means that one class inherits the characteristics of another class.This is also called a “is a” relationship:,A car is a vehicl

22、e,A teacher is a person,A dog is an animal,可重用性通過繼承來實(shí)現(xiàn),Basic Terminology:Polymorphism(多態(tài)性),Polymorphism means “having many forms”. It allows different objects to respond to the same message in different ways, the response specific to the type of the object.,類:形狀 方法: 繪制 移動(dòng) 初始化,子類,Basic Terminology:Ag

23、gregation(聚合),Aggregation describes a “has a” relationship. One object is a part of another object.,A car has wheels.,Basic Terminology:Behaviour(行為) and Messages(消息),The most important aspect of an object is its behaviour (the things it can do). A behaviour is initiated by sending a message to the

24、object (usually by calling a method).,The two steps of Object Oriented Programming,Making Classes: Creating, extending or reusing abstract data types. Making Objects interact(交互): Creating objects from abstract data types and defining their relationships.,1.5 C+的基本開發(fā)環(huán)境,Phases of C+ Programs: 1. Edit

25、(編輯) 2. Preprocess(預(yù)處理) 3. Compile(編譯) 4. Link(連接) 5. Load(裝載) 6. Execute(執(zhí)行),Three C+ Program Stages,常見編程錯(cuò)誤01:“被零除”這樣的錯(cuò)誤是在程序運(yùn)行時(shí)發(fā)生的,所以這類錯(cuò)誤叫做運(yùn)行期錯(cuò)誤(runtime error)或執(zhí)行期錯(cuò)誤。通常認(rèn)為“被零除”是一種致命錯(cuò)誤,也就是說,是一種會(huì)導(dǎo)致程序立即終止,無法成功地完成其工作的錯(cuò)誤。非致命錯(cuò)誤則允許程序運(yùn)行至結(jié)束,但通常會(huì)產(chǎn)生不正確的結(jié)果。(注意:在某些系統(tǒng)上,被零除并不是致命錯(cuò)誤,詳情可參見系統(tǒng)文檔。),良好編程習(xí)慣01:C+程序應(yīng)以簡單和直接的

26、方式編寫。有時(shí),也稱為KIS(“keep it simple”)。千萬不要嘗試一些古怪的用法,濫用這種語言。,可移植性提示03:盡管有可能寫出可移植的程序,但在不同的C和C+編譯器以及不同的計(jì)算機(jī)之間,會(huì)產(chǎn)生許多問題。這些問題的存在,加大了移植程序的難度。并不是說用C和C+編寫程序就能保證移植性。程序員通常需要直接同各種編譯器和計(jì)算機(jī)打交道。,良好編程習(xí)慣02:仔細(xì)閱讀所用C+版本的用戶手冊(cè)。經(jīng)常查閱這些手冊(cè),確保自己能了解并正確使用C+豐富的特性。,良好編程習(xí)慣03:計(jì)算機(jī)和編譯器是最好的老師。在仔細(xì)閱讀了C+語言手冊(cè)之后,如果不能確定一項(xiàng)C+的特性是如何起作用的,不妨用一個(gè)短小的”測試程序

27、“進(jìn)行試驗(yàn),然后觀察試驗(yàn)效果。設(shè)置編譯器選項(xiàng),令其報(bào)告的警告數(shù)最多。研究程序編譯時(shí)出現(xiàn)的每一條錯(cuò)誤信息,并對(duì)程序進(jìn)行糾正,最終消除這些消息。,/ Program: Display greetings / Author(s): Ima Programmer / Date: 1/24/2001 #include using namespace std; int main() cout Hello world! endl; return 0; ,A First Program - Greeting.cpp,Preprocessor directives,Insertion statement,End

28、s executions of main() which ends program,Comments,Function,Function named main() indicates start of program,Provides simple access,上一程序中幾種不同的include方法,1. #include ,2. #include using namespace std;,4. #include 在程序中使用cout時(shí)需要寫成如下形式: std:cout ;,3. #include using std:cout;,良好編程習(xí)慣04:每個(gè)程序都應(yīng)該以注釋開頭,由于描述該程序的

29、用途、作者、日期和時(shí)間。,/ Program: Display greetings / Author(s): Ima Programmer / Date: 1/24/2001,#include using namespace std;,常見編程錯(cuò)誤02:在一個(gè)需要從鍵盤輸入數(shù)據(jù),或者需要將數(shù)據(jù)輸出至屏幕的程序中,假如忘了包含iostream文件,會(huì)導(dǎo)致編譯器報(bào)告一條錯(cuò)誤信息。,int main() cout Hello world! endl; return 0; ,常見編程錯(cuò)誤03:遺漏語句末尾的分號(hào)是一種語法錯(cuò)誤。當(dāng)編譯器不能正確識(shí)別語句時(shí),便會(huì)導(dǎo)致語法錯(cuò)誤。語法錯(cuò)誤是對(duì)語言規(guī)則的違背。語

30、法錯(cuò)誤也叫編譯錯(cuò)誤,因?yàn)樗鼈兌际窃诰幾g階段出現(xiàn)的。,良好編程習(xí)慣05:許多程序員讓函數(shù)打印的最后一個(gè)字符是換行符(n)。這樣可保證函數(shù)將屏幕光標(biāo)定位在下一行的開頭。這樣一個(gè)自發(fā)的約定可促進(jìn)軟件的重用性。,良好編程習(xí)慣06:針對(duì)每個(gè)函數(shù)的主體,令其在定義函數(shù)主體的花括號(hào)內(nèi)部,縮進(jìn)一級(jí)位置。這樣可使程序的函數(shù)結(jié)構(gòu)更清晰,增強(qiáng)其可讀性。,良好編程習(xí)慣07:先約定喜歡采用的縮進(jìn)距離,然后一致遵循這一約定。,std:cout -Standard output stream object -“Connected” to the screen -std: specifies the namespace wh

31、ich cout belongs to std: can be removed through the use of using statements -Stream insertion operator -Value to the right of the operator (right operand) inserted into output stream (which is connected to the screen) -std:cout “Welcome to C+!n”; -Escape character -Indicates that a “special” charact

32、er is to be output,Enter first integer 45 Enter second integer 72 Sum is 117,良好編程習(xí)慣08:有的程序員喜歡一行聲明一個(gè)變量。采用這種格式,可方便地在每個(gè)聲明后插入說明性的注釋內(nèi)容。,良好編程習(xí)慣09:每個(gè)逗號(hào)(,)后都應(yīng)該插入一個(gè)空格,以增強(qiáng)程序可讀性。,良好編程習(xí)慣10:選擇有意義的變量名,將有助于保障程序的“自編檔能力”。,良好編程習(xí)慣11:避免使用以下劃線和雙下劃線開頭的標(biāo)識(shí)符,因?yàn)镃+編譯器可能采用這種形式的名稱作為內(nèi)部使用。,可移植性提示04:C+語言本身允許任意長度的標(biāo)識(shí)符,但你的系統(tǒng)和/或具體的C+實(shí)現(xiàn)有可能對(duì)標(biāo)識(shí)符的長度進(jìn)行了某種限制。因此,請(qǐng)使用31個(gè)字符

溫馨提示

  • 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)論