版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、12OOP(C+)前言第1章C+語言概述第2章數(shù)據(jù)類型和表達(dá)式第3章預(yù)處理和語句第4章函數(shù)和作用域第5章類和對象(一)第6章類和對象(二)第7章繼承性和派生類第8章多態(tài)性和虛函數(shù)第9章C+的I/O流庫3地位與作用 是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)及軟件工程本科生的一門必修課程 面向?qū)ο筌浖_發(fā)集抽象性、封裝性、繼承性和多態(tài)性于一體,可以幫助人們開發(fā)出模塊化、數(shù)據(jù)抽象程度高的,體現(xiàn)信息隱蔽、可復(fù)用、易修改、易擴(kuò)充等特性的程序 4內(nèi)容簡介 面向?qū)ο蟮幕舅枷?C+語言的基本概念、基本語法和編程方法 C+語言的面向?qū)ο筇卣鱧類與對象k繼承與派生k多態(tài)性與虛函數(shù)5學(xué)習(xí)方法 多練習(xí),掌握基本概念 多讀程序,學(xué)習(xí)編
2、程方法與技巧 多上機(jī)實(shí)踐,加強(qiáng)動(dòng)手能力 多剖析范例,積累編程經(jīng)驗(yàn)6面向過程的程序設(shè)計(jì)(以C語言為例)1、自上而下(top-down)的設(shè)計(jì)方式:是一個(gè)自頂向下,逐步求精的過程;2、以main函數(shù)概括出整個(gè)應(yīng)用程序需要做的事情,而main函數(shù)由對一系列的子函數(shù)的調(diào)用組成; main中的每一個(gè)子函數(shù)都可以被精煉成更小的函數(shù)。重復(fù)這個(gè)過程,即可完成一個(gè)過程式的設(shè)計(jì);3、特征是以函數(shù)為中心,以函數(shù)作為劃分程序的基本單位,數(shù)據(jù)往往處于從屬地位。7過程式設(shè)計(jì)的優(yōu)缺點(diǎn):優(yōu)點(diǎn):易于掌握與理解,符合人們的思維習(xí)慣;缺點(diǎn):1、不能適應(yīng)問題比較復(fù)雜,或者需求經(jīng)常變化的情況;2、數(shù)據(jù)與操作分離開,對數(shù)據(jù)與操作的修改變
3、得很困難;3、程序架構(gòu)的依賴關(guān)系不合理:main函數(shù)依賴于子函數(shù),子函數(shù)又依賴于更小的子函數(shù); 程序的核心邏輯依賴于外延的細(xì)節(jié),一個(gè)細(xì)節(jié)上的小改動(dòng),會引起一系列的變動(dòng)。8什么是面向?qū)ο蟪绦蛟O(shè)計(jì)什么是面向?qū)ο蟪绦蛟O(shè)計(jì) ?面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-oriented programming,OOP),指一種程序設(shè)計(jì)范型,同時(shí)也是一種程序開發(fā)的方法論。它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。9面向?qū)ο蟪绦蛟O(shè)計(jì) 1歷史回顧1967年挪威計(jì)算中心的Kisten Nygaard和Ole Johan Dahl開發(fā)了Simula67語言,它提供了比子程序更高一
4、級的抽象和封裝,引入了數(shù)據(jù)抽象和類的概念,它被認(rèn)為是第一個(gè)面向?qū)ο笳Z言。102面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念 面向?qū)ο蟪绦蛟O(shè)計(jì)中的概念主要包括:對象、類、數(shù)據(jù)抽象、繼承、動(dòng)態(tài)綁定、數(shù)據(jù)封裝、多態(tài)性、消息傳遞。通過這些概念面向?qū)ο蟮乃枷氲玫搅司唧w的體現(xiàn)。面向?qū)ο蠓椒ㄊ乔蠼鈫栴}的一種新方法,它面向?qū)ο蠓椒ㄊ乔蠼鈫栴}的一種新方法,它把求解問題中客觀存在的事物看作各自不把求解問題中客觀存在的事物看作各自不同的對象,再把具有相同特性的一些對象同的對象,再把具有相同特性的一些對象歸屬為一個(gè)類。歸屬為一個(gè)類。 113面向?qū)ο笳Z言 一個(gè)語言要稱為面向?qū)ο笳Z言必須支持幾個(gè)主要面向?qū)ο蟮母拍睢8鶕?jù)支持程度的不同,通常
5、所說的面向?qū)ο笳Z言可以分成兩類:基于對象的語言,面向?qū)ο蟮恼Z言。 基于對象的語言僅支持類和對象, 如Ada、Alphard、CLU、Euclid、Modula等,它們不支持繼承、多態(tài)。 而面向?qū)ο蟮恼Z言支持的概念包括:類與對象、繼承、多態(tài)。例如Smalltalk、Java。 另外一些則是對現(xiàn)有的語言進(jìn)行改造,增加面向?qū)ο蟮奶卣餮莼鴣淼摹H鏑+,由Ada發(fā)展而來的Ada 95等,這些語言保留著對原有語言的兼容,并不是純粹的面向?qū)ο笳Z言,。 12教材及參考書目 C+語言基礎(chǔ)教程(第3版)呂鳳翥編著電子工業(yè)出版社2011 C+語言及其程序設(shè)計(jì)教程(修訂版)張國峰編著電子工業(yè)出版社1997 C+語言
6、程序設(shè)計(jì)鄭莉等編著清華大學(xué)出版社1999 C+程序設(shè)計(jì)教程錢能編著清華大學(xué)出版社199913第1章C+語言概述 基本要求了解:面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想及基本概念;面向?qū)ο笳Z言的分類和c+中支持面向?qū)ο蟮奶攸c(diǎn);面向?qū)ο蟮能浖_發(fā)環(huán)境;visual c+開發(fā)工作臺的主要功能。 14第1章C+語言概述 1.1C+的起源及特點(diǎn) 1.2面向?qū)ο蟮姆椒?1.3面向?qū)ο蟮某绦蛟O(shè)計(jì)語言C+ 1.4C+程序的編輯、編譯和運(yùn)行 1.5C+的詞法及詞法規(guī)則 1.6C+程序的結(jié)構(gòu)151.1.1面向?qū)ο蟮挠蓙砗桶l(fā)展 機(jī)器語言(二進(jìn)制碼) 匯編語言 20世紀(jì)50年代中期,F(xiàn)ORTRAN語言 20世紀(jì)50年代中期,Alg
7、ol語言在計(jì)算機(jī)語言發(fā)展史上具有劃時(shí)代的意義,引入了許多程序設(shè)計(jì)概念。如變量、數(shù)組、循環(huán)、分支等。提出塊(BeginEnd)思想,對數(shù)據(jù)進(jìn)行保護(hù),是一種初級封裝。161.1.1面向?qū)ο蟮挠蓙砗桶l(fā)展(續(xù)) 20世紀(jì)60年代中期,Simula 67語言面向?qū)ο笳Z言的鼻祖,提出了對象、類的概念,并支持類的繼承。 20世紀(jì)70年代中期,Ada語言支持?jǐn)?shù)據(jù)抽象類型的最重要的語言之一,但不完全支持繼承。 20世紀(jì)70年代中期,Smalltalk語言最有影響的面向?qū)ο笳Z言之一,豐富了面向?qū)ο蟮母拍睢?20世紀(jì)80年代中期后出現(xiàn)C+等多種面向?qū)ο笳Z言1752 54 56 58 60 62 64 66 68 7
8、0 72 74 76 78 80 82 84 86 88 90 92 94 96AdaALGOL60ALGOL68PascalModula-2CPLBCPL BCC+JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula 67Smalltalk 80BASICANSI-BASICQBASIC VBFORTRAN90181.1.2C+的起源和特點(diǎn)一、C+的起源 在C語言基礎(chǔ)上為支持面向?qū)ο蟮某绦蛟O(shè)計(jì)研制的一個(gè)通用目的的程序設(shè)計(jì)語言; 由AT&T貝爾實(shí)驗(yàn)室Bjarne Stroustrup博士開發(fā);二、C+的特點(diǎn) 與C兼容,既保持了C的簡潔、高效和接近匯
9、編的特點(diǎn),又比C更安全,結(jié)構(gòu)化程度更高; 既支持面向過程的程序設(shè)計(jì),又支持面向?qū)ο蟮某绦蛟O(shè)計(jì);注意其兩面性191.2面向?qū)ο蟮姆椒ū仨毾妊芯渴挛?,而后才能研究過程。必須先知道一個(gè)事物是什么,而后才能覺察這個(gè)事物中所發(fā)生的變化。路德維希費(fèi)爾巴哈和德國古典文學(xué)的終結(jié)恩格斯20面向過程的程序設(shè)計(jì)面向過程的程序設(shè)計(jì)1、特點(diǎn)、特點(diǎn)模塊化的設(shè)計(jì)方法模塊化的設(shè)計(jì)方法 (自頂向下、功能抽象、分而治之)(自頂向下、功能抽象、分而治之)面向數(shù)據(jù)流面向數(shù)據(jù)流 (數(shù)據(jù)流動(dòng)、數(shù)據(jù)和處理過程分離)(數(shù)據(jù)流動(dòng)、數(shù)據(jù)和處理過程分離)采用瀑布模型采用瀑布模型21The Waterfall Model222、缺點(diǎn)、缺點(diǎn) 不能完全
10、貫徹不能完全貫徹“功能抽象功能抽象”的思想的思想 數(shù)據(jù)數(shù)據(jù)/處理分離處理分離需要了解數(shù)據(jù)結(jié)構(gòu)需要了解數(shù)據(jù)結(jié)構(gòu) 全局變量全局變量 從功能出發(fā)劃分模塊從功能出發(fā)劃分模塊 所劃分模塊千差萬別,可復(fù)用性不高所劃分模塊千差萬別,可復(fù)用性不高231.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)例例1.1:輸入任意短語或句子,計(jì)算該短語包含多少個(gè)字(word)和字符(character)。注意:輸入短語時(shí),必須在字和字之間只空一格。241.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù))面向過程的方法#include #include void main() char ch; int wdcount,chcount; wdcou
11、nt=1; chcount=0; printf(*:Please input any phrasen); while(ch=getche()!=r) chcount+;251.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù)) if(ch= ) wdcount+; printf(n*:The number of word is %dn,wdcount); printf(n*:The number of char is %dn,chcount);面向?qū)ο蟮姆椒?include #include class countpublic: 定義類公有成員261.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù)) count()
12、; void process(); void display();private: int wdcount,chcount;count:count() wdcount=1; chcount=0;void count:process()私有成員構(gòu)造函數(shù)成員函數(shù)數(shù)據(jù)成員271.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù)) char ch; cout*:Please input any phraseendl; while(ch=getche()!=r) chcount+; if(ch= ) wdcount+; coutendl;void count:display() printf(n*:The numb
13、er of word is %dn,wdcount);281.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù)) printf(n*:The number of char is %dn,chcount);void main() count A; A.process(); A.display();運(yùn)行結(jié)果*Please input any phrase.I am a teacher*:The number of word is 4*:The number of char is 15定義對象調(diào)用公有成員函數(shù)291.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù)) 是一種數(shù)學(xué)思維或計(jì)算機(jī)思維方法,與人們認(rèn)識世界的方法不同
14、 以不穩(wěn)定的、多變的“過程”和“操作” 為中心來構(gòu)造系統(tǒng) 可重用性較差 是建立在認(rèn)識方法學(xué)基礎(chǔ)上的一項(xiàng)技術(shù)科學(xué),比較自然地模擬了人類認(rèn)識客觀世界的方式; 以相對穩(wěn)定的“對象”和“數(shù)據(jù)結(jié)構(gòu)”為中心來構(gòu)造系統(tǒng) 可重用性較好面向過程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)301.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù))面向過程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)P1P2P3P4P5O1O2O3O4O5P6311.2.1面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)(續(xù))面向過程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)P1P2P3P5O1O2O3O4O5P6O4321.2.2抽象在面向?qū)ο笾械淖饔靡?、抽象的概?抽象代表著一個(gè)對象的本質(zhì)特征,這個(gè)特征將這個(gè)對象與所有
15、其他種類的對象區(qū)別開來; 抽象是通過從特定的實(shí)例中抽取共同的性質(zhì)以形成一般化的概念的過程; 抽象具有層次;汽車輪船飛機(jī)交通工具331.2.2抽象在面向?qū)ο笾械淖饔?續(xù))二、面向?qū)ο蟪橄蟮脑恚嫦驅(qū)ο笥?jì)算的本質(zhì))數(shù)據(jù)抽象、行為共享、進(jìn)化、確定性1、數(shù)據(jù)抽象為程序員提供了一種對數(shù)據(jù)和為操作這些數(shù)據(jù)所需要的算法的抽象;是面向?qū)ο蠓椒ǖ暮诵?,包括:模塊化:構(gòu)成了面向?qū)ο笥?jì)算的本質(zhì);信息隱藏:將一個(gè)模塊的細(xì)節(jié)部分對用戶隱藏起來,用戶只能通過一個(gè)受保護(hù)的接口來訪問某個(gè)模塊,而不能直接訪問一個(gè)模塊內(nèi)部的細(xì)節(jié);類公有成員341.2.2抽象在面向?qū)ο笾械淖饔?續(xù))2、行為共享 行為是由實(shí)體的外部接口定義的 行
16、為共享指許多實(shí)體具有相同的接口,可增加系統(tǒng)的靈活性; 支持行為共享的方式k分類與層次分類k多態(tài)與繼承對象公有成員函數(shù)名351.2.2抽象在面向?qū)ο笾械淖饔?續(xù))3、進(jìn)化需求進(jìn)化(虛函數(shù))進(jìn)化式的問題求解(繼承的構(gòu)造函數(shù))4、確定性 確保每個(gè)行為項(xiàng)都有一個(gè)正確的解釋,系統(tǒng)不會因不能響應(yīng)某一行為而失?。?確定性與類型的正確性有關(guān);361.2.3面向?qū)ο笥?jì)算的基本特征面向?qū)ο笙到y(tǒng)的三要素:對象、類和繼承;一、對象1、概念上對象是代表著正在創(chuàng)建的系統(tǒng)中的一個(gè)實(shí)體;2、實(shí)現(xiàn)形式上對象是一個(gè)狀態(tài)和操作(或方法)的封裝體;3、對象的定義狀態(tài):對象的狀態(tài)由這個(gè)對象的屬性和這些屬性的當(dāng)前值決定。屬性是靜態(tài)的,當(dāng)
17、前值是動(dòng)態(tài)的;一個(gè)對象具有狀態(tài)、行為和標(biāo)識。371.2.3面向?qū)ο笥?jì)算的基本特征(續(xù))行為:一個(gè)對象如何以狀態(tài)變化和消息傳遞的形式進(jìn)行作用和對外界進(jìn)行反應(yīng)。一個(gè)對象的行為代表了這個(gè)對象的外部可見的和可測試的活動(dòng);一個(gè)對象的狀態(tài)代表著它的行為的累積結(jié)果;標(biāo)識:標(biāo)識是一個(gè)對象固有的一種特性,該特性將這個(gè)對象與其他對象區(qū)別開來;屬性1屬性2.屬性n值11值21.值n1值12值22.值n2對象1行為值11值21.值n1值12值22.值n2對象2行為381.2.3面向?qū)ο笥?jì)算的基本特征(續(xù))4、對象的分類實(shí)體對象界面對象控制對象按作用分類存儲信息的對象支持系統(tǒng)的主要功能5、對象的確認(rèn) 發(fā)明對象:主要是控
18、制對象; 發(fā)現(xiàn)對象:主要是實(shí)體對象或界面對象;二、類1、什么是類391.2.3面向?qū)ο笥?jì)算的基本特征(續(xù))類是創(chuàng)建對象的樣板,它包含著所創(chuàng)建對象的狀態(tài)描述和方法的定義。類的完整描述包含了外部接口和內(nèi)部算法以及數(shù)據(jù)結(jié)構(gòu)的形式;2、類是對象的抽象及描述類中包含生成對象的具體方法,由一個(gè)類所創(chuàng)建的對象稱為該類的實(shí)例;3、類是抽象數(shù)據(jù)類型的實(shí)現(xiàn)類是所有對象的共同的行為和不同的狀態(tài)的集合體;三、繼承繼承提供了創(chuàng)建新類的一種方法,它的本質(zhì)特征是行為共享;40屬性屬性1 1屬性屬性2 2屬性屬性n n行為行為1 1行為行為2 2行為行為m m值值1111值值2121值值n1n1值值1212值值2222值值n
19、2n2行為行為1 1值值1111值值2121值值n1n1行為行為m m值值1212值值2222值值n2n2對象對象1 1對象對象2 2對象對象k k對象對象p p類類類與對象的關(guān)系類與對象的關(guān)系1.2.3面向?qū)ο笥?jì)算的基本特征(續(xù))411.3.1C+語言中的抽象支持 控制抽象:用于排列任意動(dòng)作的順序的一種方法;三種語句控制結(jié)構(gòu):順序、循環(huán)、分支 過程抽象(面向過程):對一組輸入數(shù)據(jù)的一個(gè)計(jì)算動(dòng)作和產(chǎn)生的輸出結(jié)果; 數(shù)據(jù)抽象(面向?qū)ο螅侯愂菍?shí)現(xiàn)抽象數(shù)據(jù)類型的工具; (1) 對象對象 對象是現(xiàn)實(shí)世界中客觀存在的某種對象是現(xiàn)實(shí)世界中客觀存在的某種事物。對象是一種相對獨(dú)立的實(shí)體,事物。對象是一種相對
20、獨(dú)立的實(shí)體,它具有靜態(tài)特性和動(dòng)態(tài)特性,通常它具有靜態(tài)特性和動(dòng)態(tài)特性,通常通過一組數(shù)據(jù)來描述對象的靜態(tài)特通過一組數(shù)據(jù)來描述對象的靜態(tài)特性,使用一組行為或功能來表示對性,使用一組行為或功能來表示對象的動(dòng)態(tài)特性。象的動(dòng)態(tài)特性。明確幾個(gè)概念 (2) 類類 類是人們對于客觀事物的高度抽象。類是人們對于客觀事物的高度抽象。 面向?qū)ο蠓椒ㄖ械念愂且环N類型,面向?qū)ο蠓椒ㄖ械念愂且环N類型,它是具有相同屬性和行為的對象的它是具有相同屬性和行為的對象的集合。類是具有相同屬性和行為的集合。類是具有相同屬性和行為的若干對象的模板。類為屬于該類的若干對象的模板。類為屬于該類的全部對象提供了抽象的描述,這種全部對象提供了抽
21、象的描述,這種描述包括了屬性和行為兩大部分。描述包括了屬性和行為兩大部分。 (3) 封裝封裝 封裝是指把對象的屬性和行為結(jié)合封裝是指把對象的屬性和行為結(jié)合成一個(gè)獨(dú)立的單位,又稱為封裝體。成一個(gè)獨(dú)立的單位,又稱為封裝體。 封裝體具有獨(dú)立性和隱藏性。封裝體具有獨(dú)立性和隱藏性。 一個(gè)封裝體與外部聯(lián)系只能通過有一個(gè)封裝體與外部聯(lián)系只能通過有限的接口。限的接口。 (4) 繼承繼承 繼承是面向?qū)ο蠓椒ㄌ岣咧赜眯缘睦^承是面向?qū)ο蠓椒ㄌ岣咧赜眯缘闹匾胧?,繼承表現(xiàn)卜了特殊類與重要措施,繼承表現(xiàn)卜了特殊類與一般類之間的關(guān)系。繼承的重要性一般類之間的關(guān)系。繼承的重要性就在于它大大地簡化了對于客觀事就在于它大大地簡
22、化了對于客觀事物的描述。物的描述。 (5) 對象之間通過消息進(jìn)行通信對象之間通過消息進(jìn)行通信 消息是面向?qū)ο蟀l(fā)出的請求服務(wù),消息是面向?qū)ο蟀l(fā)出的請求服務(wù),消息的發(fā)射者和接收者都是對象,消息的發(fā)射者和接收者都是對象,一個(gè)是要求服務(wù)的對象,另一個(gè)是一個(gè)是要求服務(wù)的對象,另一個(gè)是提供服務(wù)的對象。提供服務(wù)的對象。 (6) 多態(tài)性多態(tài)性 多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要支柱。多態(tài)性指的是一種行為對應(yīng)支柱。多態(tài)性指的是一種行為對應(yīng)著多種不同的實(shí)現(xiàn)。在同一個(gè)類中,著多種不同的實(shí)現(xiàn)。在同一個(gè)類中,同一種行為可對應(yīng)著不同的實(shí)現(xiàn)。同一種行為可對應(yīng)著不同的實(shí)現(xiàn)。 2. 面向?qū)ο笳Z言的特點(diǎn)
23、面向?qū)ο笳Z言的特點(diǎn) (1) 封裝性封裝性 (2) 繼承性繼承性 (3) 多態(tài)性多態(tài)性491.3.2C+對面向?qū)ο蟪绦蛟O(shè)計(jì)方法的支持 C+支持?jǐn)?shù)據(jù)封裝(數(shù)據(jù)抽象)C+中,類是支持?jǐn)?shù)據(jù)封裝的工具,對象則是數(shù)據(jù)封裝的實(shí)現(xiàn); C+中包含有私有、公有和保護(hù)成員每個(gè)可能的消息對應(yīng)一個(gè)相應(yīng)的方法,方法通過函數(shù)來定義; C+中通過發(fā)送消息來處理對象 C+中允許友元破壞封裝性 C+中允許函數(shù)名和運(yùn)算符重載 C+支持繼承性 C+支持動(dòng)態(tài)聯(lián)編總結(jié):總結(jié):C+語言支持面向?qū)ο蟮姆椒ㄕZ言支持面向?qū)ο蟮姆椒?(1) 支持封裝性支持封裝性 C+語言允許使用類和對象。類是語言允許使用類和對象。類是支持?jǐn)?shù)據(jù)封裝的工具,對象是數(shù)
24、據(jù)支持?jǐn)?shù)據(jù)封裝的工具,對象是數(shù)據(jù)封裝的實(shí)現(xiàn)。封裝的實(shí)現(xiàn)。 類中成員有不同的訪問權(quán)限。類中成員有不同的訪問權(quán)限。 (2) 支持繼承性支持繼承性 C+語言支持面向?qū)ο蠓椒ㄖ械睦^語言支持面向?qū)ο蠓椒ㄖ械睦^承性,它不僅支持單重繼承,而且承性,它不僅支持單重繼承,而且支持多重繼承。支持多重繼承。 繼承和封裝是衡量一種語言是否是繼承和封裝是衡量一種語言是否是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言的兩個(gè)重面向?qū)ο蟮某绦蛟O(shè)計(jì)語言的兩個(gè)重要標(biāo)準(zhǔn)。要標(biāo)準(zhǔn)。 (3) 支持多態(tài)性支持多態(tài)性 多態(tài)性是在繼承性基礎(chǔ)上的面向?qū)Χ鄳B(tài)性是在繼承性基礎(chǔ)上的面向?qū)ο蠓椒ㄖ械闹匾匦灾?。象方法中的重要特性之一?支持函數(shù)重載和運(yùn)算符重載。支持函數(shù)
25、重載和運(yùn)算符重載。 支持動(dòng)態(tài)聯(lián)編。支持動(dòng)態(tài)聯(lián)編。531.3.3C+對C語言的改進(jìn) 增加了新的運(yùn)算符::,new,delete等; 改進(jìn)了類型系統(tǒng),增加了安全性; 引進(jìn)了引用概念; 允許函數(shù)重載,允許設(shè)置缺省參數(shù),提高了編程的靈活性; 引進(jìn)了內(nèi)聯(lián)函數(shù),提高了程序的效率; 可以根據(jù)需要隨時(shí)對變量進(jìn)行說明;總結(jié):總結(jié):C+語言對語言對C語言的改進(jìn)語言的改進(jìn) C+語言為方便操作和嚴(yán)格類型采語言為方便操作和嚴(yán)格類型采取了如下措施。取了如下措施。(1) C+語言中規(guī)定函數(shù)定義時(shí)必須語言中規(guī)定函數(shù)定義時(shí)必須指出類型。指出類型。(2) C+語言規(guī)定函數(shù)說明必須使用語言規(guī)定函數(shù)說明必須使用原型說明,不得用簡單說
26、明。原型說明,不得用簡單說明。(3) C+語言規(guī)定凡是從高類型向低語言規(guī)定凡是從高類型向低類型轉(zhuǎn)換時(shí)都需加強(qiáng)制轉(zhuǎn)換。類型轉(zhuǎn)換時(shí)都需加強(qiáng)制轉(zhuǎn)換。(4) C+語言中符號常量建議使用語言中符號常量建議使用const關(guān)鍵關(guān)鍵字來定義。字來定義。(5) C+語言中引進(jìn)了內(nèi)聯(lián)函數(shù)。語言中引進(jìn)了內(nèi)聯(lián)函數(shù)。(6) C+語言允許設(shè)置函數(shù)參數(shù)的默認(rèn)值。語言允許設(shè)置函數(shù)參數(shù)的默認(rèn)值。(7) C+語言引進(jìn)了函數(shù)重載和運(yùn)算符重載。語言引進(jìn)了函數(shù)重載和運(yùn)算符重載。(8) C+語言引進(jìn)了引用概念。語言引進(jìn)了引用概念。(9) C+語言提供了與語言提供了與C語言不同的語言不同的I/O流類流類庫,方便了輸入庫,方便了輸入/輸出操
27、作。輸出操作。561.4C+程序的編輯、編譯和運(yùn)行一、編輯:源文件的擴(kuò)展名為.cpp二、編譯1、預(yù)處理過程詞法分析:單詞語法分析:構(gòu)造程序的格式符號表:程序中的各種符號及其屬性錯(cuò)誤處理程序:生成目標(biāo)代碼:目標(biāo)文件擴(kuò)展名.obj2、編譯 過程3、連接過程:可執(zhí)行文件擴(kuò)展名.exe三、運(yùn)行571.4C+程序的編輯、編譯和運(yùn)行(續(xù))源程序.cpp目標(biāo)文件.obj可執(zhí)行文件.exe編譯器連接器磁盤中的#include文件C+庫文件.LIB581.5.1C+的字符集大小寫的英文字母:az,AZ 數(shù)字字符:09 特殊字符空格!#%&*_+=-/,“;.,()591.5.2詞法記號1、關(guān)鍵字(保留字
28、)表1-1C+的關(guān)鍵字autoboolbreakcasecatchcharclassconstconst_cast continue defaultdeletedodoubledynamic_cast else enumexplicitexternfalsefloatforfriendgotoifinlineintlongmutablenewoperator privateprotected publicregisterreinterpret_castreturnshortsignedsizeofstaticstatic_cast structswitchtemplate thisthrowt
29、ruetrytypedef typeidtypename unionunsigned virtualvoidvolatile while601.5.2詞法記號(續(xù))2、標(biāo)識符組成規(guī)則:以字母或下劃線開始,其后跟零個(gè)或多個(gè)字母、數(shù)字或下劃線;不能以數(shù)字開始正確標(biāo)識符:Result, DoubleList,_first, first_錯(cuò)誤標(biāo)識符:1first標(biāo)識符的長度任意(受編譯器限制);區(qū)分字母的大小寫;不能使用系統(tǒng)的保留字;例如:ADD, Add, add611.5.2詞法記號(續(xù))3、運(yùn)算符單目雙目三目運(yùn)算符5、分隔符(),分隔符:4、各種文字?jǐn)?shù)字字符文字串文字文字布爾文字;621.5.3
30、空白一、空白包括:空格、制表符、換行符、注釋功能:指示詞法記號的開始和結(jié)束位置;二、注釋 /*/ /631.6C+程序的結(jié)構(gòu)一、C+示范程序#include void main() coutHello world! endl;二、C+程序的組成 預(yù)處理命令 輸入輸出 函數(shù) 語句 變量 其他I/O流庫,提供所有的輸入輸出操作cout:流類對象:提取符例如:cinPlease inputtwo integers:;cinab;endl:換行;64第2章數(shù)據(jù)類型和表達(dá)式 2.1基本數(shù)據(jù)類型 2.2常量和變量 2.3數(shù)組類型 2.4枚舉類型 2.5指針和引用 2.6運(yùn)算符 2.7表達(dá)式 2.8類型定義
31、652.1基本數(shù)據(jù)類型一、基本數(shù)據(jù)類型整型int浮點(diǎn)型(實(shí)型)字符型char基本數(shù)據(jù)類型邏輯型bool空值型void單精度浮點(diǎn)數(shù)float雙精度浮點(diǎn)數(shù)double用于函數(shù)和指針662.1基本數(shù)據(jù)類型(續(xù))二、數(shù)據(jù)類型修飾符signed:有符號unsigned:無符號short:短型long:長型說明:3) long修飾符還適用于雙精度浮點(diǎn)數(shù);2) 上述修飾符均可用于整型和字符型;1) 類型修飾符可以修飾除void、bool類型以外的其他類型;672.1基本數(shù)據(jù)類型(續(xù))三、基本數(shù)據(jù)類型列表表2-1C+的基本數(shù)據(jù)類型類類型型名名字字寬寬(字字節(jié)節(jié))范范圍圍boolfalse, truechar1
32、-128127signed char1-128127unsigned char10255short int2-3276832767signed short int2-3276832767unsigned short int2065535int4-21474836482147483647signed int4-21474836482147483647unsigned int404294967295long int4-21474836482147483647signed long int4-21474836482147483647unsigned long int404294967295float
33、43.4E 10-383.4E 1038double81.7E 10-3081.7E 10308long double103.4E 10-49323.4E 104932682.1基本數(shù)據(jù)類型(續(xù))說明:1) 表中的int可以省略,即在int之前有修飾符出現(xiàn)時(shí),可以省略關(guān)鍵字int;2) 單精度類型float、雙精度類型double、長精度類型long double統(tǒng)稱浮點(diǎn)類型;3) char類型和各種int類型統(tǒng)稱整型類型;char類型變量在內(nèi)存中以它的ASCII碼值的形式存儲;4) 字寬(字節(jié))取決于操作系統(tǒng)和編譯器的實(shí)現(xiàn),可用sizeof驗(yàn)證;692.2.1常量一、整型常量(無小數(shù)部分)1
34、、表示方法 十進(jìn)制 八進(jìn)制 十六進(jìn)制2、十進(jìn)制表示 由09的數(shù)字組成 不能以0開始 無前綴 例:132, -3453、八進(jìn)制表示 由0 7的數(shù)字組成 以0為前綴 例:010, -05364、十六進(jìn)制表示 由09的數(shù)字及A F的字母(大小寫均可)組成 以0 x或0X為前綴 例:0 x7A, -0X3de702.2.1常量(續(xù))5、說明:1) 長整型用L(或l)做后綴表示。例如:32765L,793l;2) 無符號型用U(或u)做后綴表示。例如:4352U,3100u;3) unsigned long型用后綴U(或u)和L(或l)一起表示,L與U的先后順序無關(guān)。例如:49321ul,37825LU
35、,41152Lu;4) 無后綴時(shí),整型常量類型按如下順序確定:int, (unsigned), long, unsigned long十進(jìn)制時(shí)無712.2.1常量(續(xù))二、浮點(diǎn)型常量 由整數(shù)部分和小數(shù)部分構(gòu)成; 只有十進(jìn)制表示; 一般表示形式(小數(shù)表示形式):k整數(shù)部分與小數(shù)部分可以省去一部分,但不能全部省去;k例如:5.,.25,4.07722.2.1常量(續(xù)) 科學(xué)表示形式:k在小數(shù)表示法后面加E(或e)表示指數(shù);k例如:23.5E6,.032E-5,.3e10k指數(shù)部分可正可負(fù),但必須為整數(shù); 浮點(diǎn)常量的缺省數(shù)據(jù)類型為double型; 后綴F(或f)表示float類型; 后綴l(或l)表
36、示long double類型;732.2.1常量(續(xù))三、字符常量 由一對單引號括起的一個(gè)字符表示; 其值為所括起字符在ASCII表中的編碼; 所括起字符的表示方法:k圖形表示法該方法適用于有圖形符號的可打印字符;例如:A,a,*k轉(zhuǎn)義序列表示法該方法適用于所有字符,尤其是無圖形符號的不可打印字符;742.2.1常量(續(xù))K轉(zhuǎn)義序列表示方法:以反斜線()開頭,后跟字符的ASCII碼值;K八進(jìn)制表示:ddd;例如:101K十六進(jìn)制表示:xhh;例如:x41表2-2C+中常用轉(zhuǎn)義序列符符號含義a響鈴n換行符r回車符t水平制表符(tab 鍵)b退格符(backspace 鍵)反斜線單引號雙引號0空字
37、符752.2.1常量(續(xù))四、布爾常量有兩個(gè)值:true和false;五、字符串常量(串常量,字符串) 一對雙引號括起的字符序列,字符序列可以包含空格、轉(zhuǎn)義序列或任何其他字符,這些字符不一定是C+字符集中的字符,只要C+編譯器支持即可;例如:This is a string; 串常量與字符常量的區(qū)別:762.2.1常量(續(xù)) 由一個(gè)字符型變量存放 由一維數(shù)組存放字符常量串常量 用單引號括起 用雙引號括起 字符串有一個(gè)結(jié)束符,該結(jié)束符用0表示 字符常量a在內(nèi)存中占用一個(gè)字節(jié) 字符串常量a在內(nèi)存中占用兩個(gè)字節(jié) 可進(jìn)行加、減法運(yùn)算 可進(jìn)行連接、拷貝運(yùn)算772.2.1常量(續(xù))六、符號常量 用來表示C
38、+中的常量,即用一個(gè)與常量相關(guān)的標(biāo)識符來替代常量; 優(yōu)點(diǎn):增加可讀性,增強(qiáng)可維護(hù)性;例如:PI表示3.1415926 定義方法:使用類型說明符const;例如:const int size=80; 定義的符號常量必須初始化; 一個(gè)符號常量可看作是一個(gè)只讀變量,由const定義的常量的值不可以改變;78Line1:#include Line2:const double pi=3.1415;Line3:const double r;Line4:void main()Line5:Line6: double perimeter,area;Line7: perimeter=2*pi*r;Line8: p
39、i=3.14;Line9: area=pi*r*r;Line10: coutperimeter, areaendl;Line11:2.2.1常量(續(xù))const double r=3.2;錯(cuò)誤錯(cuò)誤錯(cuò)誤,不能修改錯(cuò)誤,不能修改pi的值的值79地址值2.2.2變量一、變量的三個(gè)基本要素名字類型值三要素?cái)?shù)據(jù)值地址值int c;c=5;內(nèi)存5.c地址值1000H變量類型變量名數(shù)據(jù)值二、變量的定義 可以在程序中隨時(shí)定義變量,只要在該變量被使用前定義即可; 定義格式:;例如:int a, b, c;double x, y, z; 802.2.2變量(續(xù)) 同一程序塊內(nèi)不可以定義同名變量; 初始值k變量定義
40、時(shí)可賦初始值;k聲明格式:數(shù)據(jù)類型 標(biāo)識符1(初始值1), ,標(biāo)識符n(初始值n);數(shù)據(jù)類型 標(biāo)識符1=初始值1, ,標(biāo)識符n=初始值n;k例如:double price=15.5;int size=100;k未被初始化的變量的值或者是默認(rèn)值,或者是無效值,由變量類型決定; 變量可被賦值,由變量名標(biāo)識;812.3數(shù)組類型數(shù)目固定、類型相同的若干個(gè)變量的有序集合;822.3.1數(shù)組的定義1、格式 ;說明: 方括號( )表示數(shù)組的維; 某維的大小必須是大于1的常量表達(dá)式;2、示例 int a3; char b35; const int size=80; int msize;832.3.2數(shù)組的賦值
41、1、數(shù)組元素的表示 下標(biāo)表示:;說明:k為常量表達(dá)式;k下標(biāo)從0開始;k各個(gè)元素在內(nèi)存中按其下標(biāo)的升序順序連續(xù)存放; 指針表示:842.3.2數(shù)組的賦值(續(xù))2、數(shù)組元素賦初值 利用初始值表(由一對花括號括起來的若干數(shù)據(jù)項(xiàng)組成)實(shí)現(xiàn); 數(shù)組元素的個(gè)數(shù)要大于等于初始值表中數(shù)據(jù)項(xiàng)的個(gè)數(shù); 例如:int a5=1,2,3,4,5;int a4=5,4;int b23=1,2,3,4,5,6;int b23=1,2,3,4,5,6;int c232=5,4,3,2,1,0;3、數(shù)組元素的賦值例如:int m3;m0=5;m1=3;m2=1;852.3.3字符數(shù)組說明: 字符數(shù)組是指數(shù)組元素是char類
42、型的數(shù)組; 注意字符常量、字符數(shù)組與字符串常量的區(qū)別;例如:char s14=a, b, c, d;字符數(shù)組char s25=a, b, c, d, 0;字符數(shù)組(字符串常量)等價(jià)于char s25=abcd;char s35=abcde; char s3=abcde;862.4枚舉類型枚舉類型是若干個(gè)有名字的整型常量的集合;872.4.1枚舉聲明和枚舉變量一、枚舉聲明 enum ; 由若干個(gè)枚舉符組成,多個(gè)枚舉符之間用逗號分隔; 枚舉符是用標(biāo)識符表示的整型常量,又稱枚舉常量; 枚舉常量的值默認(rèn)為最前邊的一個(gè)為0,其后的值依次加1; 枚舉常量的值也可顯式定義,未顯式定義的則在前一個(gè)值的基礎(chǔ)上加
43、1;882.4.1枚舉聲明和枚舉變量(續(xù))二、枚舉變量 例如:enum day Sun,Mon,Tue,Wed,Thu,Fri,Sat; enum day Sun=7,Mon=1, Tue,Wed,Thu,Fri,Sat; 枚舉變量的值不一定互不相同; enum ; 多個(gè)枚舉變量之間用逗號分隔; 例如:enum day d1,d2,d3;enum day Sun,Mon,Tue,Wed,Thu,Fri,Sat d1,d2,d3;892.4.2枚舉變量的值 其值是該枚舉變量所屬的枚舉聲明的枚舉表的某一個(gè)枚舉符; 利用枚舉符所表示的整型值給枚舉變量賦值時(shí),需要進(jìn)行類型強(qiáng)制; 例如:d1=Sun;d
44、2=Sat;d3=(enum day)4;902.5.1指針1、什么是指針 指針是用來存放某個(gè)變量的地址值的一種變量; 指針的類型是它所指向變量的類型; 指針本身數(shù)據(jù)值的類型是unsigned long int型; 例如:int a(5);int *p=&a;內(nèi)存1000H5.a地址值1000H3000Hp912.5.1指針(續(xù))2、如何定義指針 例如:int *pi;char (*pa)3;float *pl; int (*pf)();char *pc; int *pp; *, *,;3、指針的賦值(內(nèi)存地址值) 指針必須被賦值后才可使用; 一般變量、數(shù)組元素、結(jié)構(gòu)成員的地址值為變量
45、名前加運(yùn)算符&; 數(shù)組的地址值用該數(shù)組名表示;922.5.1指針(續(xù)) 函數(shù)的地址值用該函數(shù)的名字表示; 例如:int a,b10;double sin(double x);int *p=&a,*p=&b3; double (*pf)();int a10,*p=a; pf=sin;3、指針的運(yùn)算 賦值運(yùn)算。例如:int a,*p=&a,*q;q=p; 一個(gè)指針可以加上或減去一個(gè)整數(shù)值; 在一定條件下(指向同一數(shù)組的不同元素),兩個(gè)指針可以相減; 在一定條件下(指向同一數(shù)組元素),兩個(gè)指針可以比較;93a與&a0相同2.5.2指針和數(shù)組1、C+中指針與數(shù)組
46、的關(guān)系 C+通過指針訪問數(shù)組中的每個(gè)元素; 數(shù)組不能參與表達(dá)式求值。在運(yùn)算表達(dá)式中,一個(gè)標(biāo)識數(shù)組對象的操作數(shù)在運(yùn)算表達(dá)式中被自動(dòng)轉(zhuǎn)換為一個(gè)指向數(shù)組對象的第一個(gè)元素對象的指針值。2、一維數(shù)組的指針表示法 C+中規(guī)定:任何一個(gè)數(shù)組的名字是一個(gè)常量指針,其值是該數(shù)組的首元素的地址值; 例如:int a5;數(shù)組表示法:ai,i=0,1,2,3,4指針表示法:*(a+i)942.5.2指針和數(shù)組(續(xù))3、二維數(shù)組的指針表示法 int b25; 數(shù)組表示法:biji=0,1; j=0,1,2,3,4 指針表示法:*(*(b+i)+j)*(bi+j)(*(b+i)j(&b00+5*i+j)4、三維數(shù)
47、組的指針表示法(同二維)5、示例952.5.2指針和數(shù)組(續(xù))例2.1:分析下列程序的輸出結(jié)果。#include void main() static int a5=5,4,3,2,1; int i,j; i=a0+a4; j=*(a+2)+*(a+4); coutiendljendl;輸出644a15a03a22a31a4aa+2a+4962.5.2指針和數(shù)組(續(xù))例2.2:分析下列程序的輸出結(jié)果。#include void main() static char s1=abcde,s25=m, n, p, q, 0; char *ps=s1; couts1 or s2endl; couts2
48、1s22s13s14endl; cout*ps*(ps+2)*(ps+4)*ps+2endl;輸出abcde or mnpqnpdeace99a的ASCII碼值為0 x61,即97972.5.2指針和數(shù)組(續(xù))例2.3:分析下列程序的輸出結(jié)果。#include void main() static char t35=abcd, efgh, ijkl, mnop, qrst, uvwx; coutt123*(t12+3)*(*(*(t+1)+2)+3) *(*(t1+2)+3)endl; cout*tt*(*(t+1)+1)tt02 t*t+1endl;輸出xxxxabcdqrstijklbcd
49、982.5.3引用 標(biāo)識對象的一種機(jī)制; 對對象存儲地址的抽象,但引用不是值; 引用有類型; 變量的別名;1、定義格式 &();或 &=;2、初始化與賦值 定義引用時(shí)必須初始化; 可以將一個(gè)引用賦給某個(gè)變量; 引用可被賦值;992.5.3引用(續(xù))示例:int a=3;int &m=a;int n=m;int *p=&m;m=m+5;3a8pm3n定義引用并初始化將引用賦值給變量a=8,對引用的操作就是對被引用者的操作3、引用的功能 用做函數(shù)的參數(shù)或函數(shù)的返回值; 函數(shù)不能返回對局部對象的引用;1002.5.3引用(續(xù))示例:int& f(int ind
50、ex,int a) int r=aindex; return r;錯(cuò),r是局部對象4、指針與引用的區(qū)別 指針通過地址間接訪問某個(gè)變量,引用通過別名直接訪問某個(gè)變量; 引用必須初始化,一旦被初始化后不得再作為其他變量的別名;正確:int &r=aindex;1012.5.3引用(續(xù))例2.4:分析下列程序的輸出結(jié)果。#include void main() int val(5); int &refv=val; refv=refv+5; coutvalendl; int *p=&refv,val1(refv); cout*ptval1endl;輸出1010101022.5.
51、3引用(續(xù))例2.5:分析下列程序的輸出結(jié)果。#include int& f(int index,int a) int &r=aindex; return r;void main() int a=1,3,5,7,9; f(2,a)=55; for(i=0;i5;i+) coutai、=、=、=、!= 前四種優(yōu)先級高于后兩種;1062.6.3邏輯運(yùn)算符 雙目運(yùn)算符:&、| 優(yōu)先級: ! 、 & 、 | 單目運(yùn)算符:!1072.6.4位操作運(yùn)算符1、邏輯位運(yùn)算符 單目邏輯位運(yùn)算符: 雙目邏輯位運(yùn)算符:&、|、 雙目邏輯位運(yùn)算符的優(yōu)先級:&、|、;2、
52、移位運(yùn)算符 雙目運(yùn)算符:; 時(shí)移掉的位被丟棄,左邊移出的空位補(bǔ)0或符號位;1082.6.5賦值運(yùn)算符 簡單賦值運(yùn)算符:= 復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=、&=、|=、=、=1092.6.6其他運(yùn)算符1、三目運(yùn)算符 格式:d1?d2:d3 功能:先計(jì)算d1,若其非零,表達(dá)式的值為d2的值,否則為d3的值; 表達(dá)式類型:d2和d3中類型較高者的類型;2、逗號運(yùn)算符 格式:d1,d2,dn 表達(dá)式的值和類型:由最后一個(gè)表達(dá)式確定; 優(yōu)先級在所有運(yùn)算符中最低;3、sizeof運(yùn)算符1102.6.6其他運(yùn)算符(續(xù)) 格式: 功能:返回其后的類型說明符或表達(dá)式所表示的數(shù)在內(nèi)存中所占的
53、字節(jié);4、單目運(yùn)算符&和* &:取地址; *:用在指針名前,表示取指針的內(nèi)容;5、強(qiáng)制類型運(yùn)算符sizeof();或sizeof(); 格式: ();或 () ;1112.6.6其他運(yùn)算符(續(xù)) 強(qiáng)制類型轉(zhuǎn)換可將高類型轉(zhuǎn)換為低類型,是一種不安全的轉(zhuǎn)換;示例:double f(3.85);int h;h=int(f); 該轉(zhuǎn)換是暫時(shí)的,一次性的;示例:int a(3),m;double b;b=3.56+double(a);m=a+5;1122.6.7運(yùn)算符和優(yōu)先級和結(jié)合性 P46,表2.31132.7.1表達(dá)式的種類 由運(yùn)算符和操作數(shù)組成的式子; 常見的表達(dá)式k算術(shù)表達(dá)式;k邏
54、輯表達(dá)式;k關(guān)系表達(dá)式;k賦值表達(dá)式;k條件表達(dá)式;k逗號表達(dá)式;1142.7.1表達(dá)式的種類(續(xù)) 注意事項(xiàng):k連續(xù)的兩個(gè)運(yùn)算符之間用空格分隔;k可用括號來改變運(yùn)算符優(yōu)先級;k雙目運(yùn)算符的左右可以用空格符和操作數(shù)分開;k過長的表達(dá)式可分成幾個(gè)表達(dá)式;1152.7.2表達(dá)式的值和類型一、確定表達(dá)式的值二、表達(dá)式求值方法與確定類型的方法 先確定運(yùn)算符的功能; 確定計(jì)算順序:先考慮優(yōu)先級,再考慮結(jié)合性;1162.7.2表達(dá)式的值和類型(續(xù))例2.6:分析下列程序的輸出結(jié)果(算術(shù)表達(dá)式)。#include void main() unsigned a(0 xab),b(20); a&=b;
55、a=a; coutatby; x=y; x|=yy; y&=x+1; coutxtyendl;輸出:020-1 11172.7.2表達(dá)式的值和類型(續(xù))例2.7:分析下列程序的輸出結(jié)果(關(guān)系表達(dá)式)。#include void main() char x(m),y(n); int n; n=xy; coutnendl; n=x=y-1; coutn3)+(y-x=1); coutnendl; 輸出:1131182.7.2表達(dá)式的值和類型(續(xù))例2.8:分析下列程序的輸出結(jié)果(邏輯表達(dá)式)。#include void main() int x,y,z; x=y=z=1; -x&+
56、y&+z; coutxtytzendl; +x&+y&+z; coutxtytzendl; +x&y-|+z; coutxtytzendl; 輸出:011122212注意邏輯表達(dá)式的求值方法1192.7.2表達(dá)式的值和類型(續(xù))例2.9:分析下列程序的輸出結(jié)果(條件表達(dá)式)。#include void main() int a(3),b(4),c; c=ab?+a:+b; couta,b,cendl; c=a-b?a+b:a-3?b:a; couta,b,cendl;3,5,53,5,8注意三目運(yùn)算符的判斷條件輸出1202.7.2表達(dá)式的值和類型(續(xù))例2.10
57、:分析下列程序的輸出結(jié)果(賦值表達(dá)式)。#include void main() int x(1),y(3),z(5); x+=y*=z-=2; coutx, y, zendl; x*=y/=z-=x; coutx, y, zendl; x=y=z=2; z=(x+=2)+(y+=4)+2; coutx, y“, zendl; 輸出:10,9,3-10,-1,-74,6,121212.7.2表達(dá)式的值和類型(續(xù))例2.11:分析下列程序的輸出結(jié)果(逗號表達(dá)式)。#include void main() int a,b,c; a=1,b=2,c=a+b+3; couta, b, cendl; c
58、=(a+,a+=b,a+b); couta, b, cendl;1,2,64,2,6輸出1222.7.3表達(dá)式中的類型轉(zhuǎn)換一、隱含轉(zhuǎn)換 雙目運(yùn)算中操作數(shù)的類型轉(zhuǎn)換; 是一種保值轉(zhuǎn)換,轉(zhuǎn)換類型由低到高; 轉(zhuǎn)換規(guī)則:int unsigned long unsigned long doubleshort,charfloat二、強(qiáng)制轉(zhuǎn)換 顯式強(qiáng)制轉(zhuǎn)換(通過強(qiáng)制轉(zhuǎn)換運(yùn)算符實(shí)現(xiàn));1232.7.3表達(dá)式中的類型轉(zhuǎn)換(續(xù)) 隱式強(qiáng)制轉(zhuǎn)換:k在賦值表達(dá)式中,當(dāng)左值(賦值運(yùn)算符左邊的值)和右值(賦值運(yùn)算符右邊的值) 的類型不同時(shí),一律將右值類型強(qiáng)制轉(zhuǎn)換為左值的類型;k在函數(shù)有返回值的調(diào)用中,將return后面的
59、表達(dá)式的類型強(qiáng)制轉(zhuǎn)換為該函數(shù)的類型;顯式隱式賦值表達(dá)式函數(shù)返回值隱含轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換類型轉(zhuǎn)換1242.8類型定義1、格式typedef ;例如:typedef double wages,bouns;wages weekly;bouns monthly;2、自定義類型的作用 改善程序的可讀性,增加所定義變量的信息 書寫簡練 提高程序的可移植性125 第3章預(yù)處理和語句 3.1預(yù)處理功能 3.2語句 3.3選擇語句 3.4循環(huán)語句 3.5轉(zhuǎn)向語句1263.1預(yù)處理功能一、預(yù)處理命令及預(yù)處理功能1、預(yù)處理命令 C+源程序中包含的各種編譯命令在程序被正常編譯之前執(zhí)行; 預(yù)處理命令不是C+語言的一部分;2、
60、預(yù)處理功能 由預(yù)處理命令實(shí)現(xiàn)的功能;二、常用的預(yù)處理命令 文件包含命令 宏定義命令1273.1預(yù)處理功能(續(xù)) 以 # 為引導(dǎo); 每條預(yù)處理命令單獨(dú)占用一行,同一行不能有其他預(yù)處理命令和語句;三、預(yù)處理命令使用說明 條件編譯命令 停止編譯命令 預(yù)處理命令的位置可以放在開頭、中間和結(jié)尾; 預(yù)處理命令可以續(xù)行,續(xù)行符為 ; 預(yù)處理命令不是語句,不能以分號(;)結(jié)束;1283.1.1文件包含命令一、功能 指示C+編譯器將一個(gè)文件(頭文件)的內(nèi)容 嵌入到該指令所在的文件中該指令所在位置處; 頭文件指存放與標(biāo)準(zhǔn)函數(shù)有關(guān)的信息,或者存放符號常量、類型定義、類和其他復(fù)雜類型的定義以及與程序環(huán)境相關(guān)信息的.h文件;二、格式#include 由系統(tǒng)提供并放在指定子目錄中的頭文件;#include 文件名由用戶定義,放在當(dāng)前目錄或其他目錄下的頭文件或其他源文件;1293.1.1文件包含命令(續(xù))三、說明 文件包含命令一般放在程序頭; 一條文件包含
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理研究生教學(xué)實(shí)踐總結(jié)(3篇)
- 專題04 語言表達(dá)+綜合性學(xué)習(xí)(第2期)
- 專題07:環(huán)境描寫作用(講解)
- 中班幼兒語言教學(xué)活動(dòng)策劃方案五篇
- 幼兒園組織旅游活動(dòng)策劃方案五篇
- ktv房間租賃合同
- 幼兒園找春天主題活動(dòng)策劃方案五篇
- 10kV配電站房場地選擇與環(huán)境評估
- 個(gè)人擔(dān)保借款合同
- 政府采購合同協(xié)議書
- 2025-2030年中國電動(dòng)高爾夫球車市場運(yùn)行狀況及未來發(fā)展趨勢分析報(bào)告
- 河南省濮陽市2024-2025學(xué)年高一上學(xué)期1月期末考試語文試題(含答案)
- 長沙市2025屆中考生物押題試卷含解析
- 2024年08月北京中信銀行北京分行社會招考(826)筆試歷年參考題庫附帶答案詳解
- 蘇教版二年級數(shù)學(xué)下冊全冊教學(xué)設(shè)計(jì)
- 職業(yè)技術(shù)學(xué)院教學(xué)質(zhì)量監(jiān)控與評估處2025年教學(xué)質(zhì)量監(jiān)控督導(dǎo)工作計(jì)劃
- 金字塔原理與結(jié)構(gòu)化思維考核試題及答案
- 廣東省梅州市2023-2024學(xué)年七年級上學(xué)期期末數(shù)學(xué)試題
- 基礎(chǔ)護(hù)理學(xué)導(dǎo)尿操作
- 標(biāo)牌加工風(fēng)險(xiǎn)防范方案
- 2015-2024北京中考真題英語匯編:閱讀單選CD篇
評論
0/150
提交評論