C++面向對象程序設計ppt課件(完整版)_第1頁
C++面向對象程序設計ppt課件(完整版)_第2頁
C++面向對象程序設計ppt課件(完整版)_第3頁
C++面向對象程序設計ppt課件(完整版)_第4頁
C++面向對象程序設計ppt課件(完整版)_第5頁
已閱讀5頁,還剩678頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、C+面向對象程序設計第一章本章導讀:C是面向過程的程序設計語言,也就是說 C程序的設計首要考慮的是如何通過一個過程,而對于C+,程序設計首先要考慮的是如何構造一個“模型”,這里的“模型”也稱之為“對象模型”,因此C+是面向對象的程序設計語言。許多多人都把C+稱為“帶類的C”。的確,C+是在C的基礎上引入面向對象的“類”的機制而形成的一門程序設計語言。C+既支持面向過程的程序設計,又支持面向對象的程序設計。面向對象的程序設計方法具有三大特征:封裝性、繼承性和多態性,其基本思想是盡可能模擬人類的自然思維方式來構造軟件系統,不僅可以提高對用戶需求的適應性,而且支持軟件復用。本章要點了解面向對象程的思

2、想掌握面向對象中出現的基本概念掌握面向對象中出現的基本特征掌握面向對象程序設計的優點第1章 面向對象程序設計語言概述1.1 面向對象程序設計概述1.2 面向對象程序設計的特點1.3面向對象的系統開發方法1.4 程序舉例1.5本章小結習題一1.1 面向對象程序設計概述軟件工程學家Coad/Yourdon認為:面向對象對象類繼承消息。如果一個計算機軟件系統采用這些概念來建立模型并予以實現,我們就說它就是面向對象的。下面我們將闡述面向對象的程序設計和面向對象的設計方法。1.1.1 面向對象程序設計面向對象程序設計(Object Oriented Programming,縮寫:OOP),指一種程序設計

3、范型,同時也是一種程序開發的方法論。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。 當我們提到面向對象的時候,它不僅指一種程序設計方法。它更多意義上是一種程序開發范式。在這一方面,我們必須了解更多關于面向對象系統分析和面向對象設計(Object Oriented Design,簡稱OOD)方面的知識。面向對象程序設計的雛形早在1960年的Simula語言中即可發現,當時的程序設計領域正面臨著一種危機:在軟硬件環境逐漸復雜的情況下,軟件如何得到良好的維護?面向對象程序設計在某種程度上通過強調可重復性解決了這一問題。20世紀70年代的SmallTalk語言在

4、面向對象方面堪稱經典,以至于30年后的今天依然將這一語言視為面向對象語言的基礎。 面向對象程序設計可以被視作一種在程序中包含各種獨立而又互相調用的單位和對象的思想,這與傳統的思想剛好相反:傳統的面向過程程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據并將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,或者說是負有責任的角色。目前已經被證實的是,面向對象程序設計推廣了程序的靈活性和可維護性,并且在大型項目設計中廣為應用。1.1.2 面向對象的軟件工程傳統的軟件工程方法曾經給軟件產業帶來了巨大進步,部

5、分緩解了軟件危機。但隨著人們對軟件產品的需求日益增加,其缺點越來越突出。為了克服傳統軟件開發的缺點,20世紀70年代提出了面向對象方法,現在它已經有很廣泛的應用。面向對象軟件工程是面向對象方法在軟件工程領域運用的結果。1.1.3 面向對象的主要概念1對象2類3封裝4繼承5消息6 多態性1對象對象是一個實體,可以是現實世界中具體的物理實體或概念化的抽象實體。在現實生活中,任何事物都是對象,具體存在的事物比如一個學校是對象,桌、椅是對象,抽象是事物比如規章制度也是對象。對象既可以很簡單,也可以很復雜。一般一個對象都有一個區別于其他事物的名字,也有描述它特征的屬性,以及一組操作,這組操作既可以是自身

6、所承受的,也可以是施加給其他對象的。 在面向對象程序設計中,對象是一個封裝數據(屬性,靜態特征)和操作(服務,動態特征)的實體,是構成系統的基本單元。當用戶使用一個對象的時候,只能通過對象所提供的對外界的接口進行訪問,而不必知道它的操作方法,就象我們知道的黑匣子一樣,你可以使用它提供的接口,卻不用內部的構造。這就大大方便了用戶的使用,使對象的使用變的十分簡單,同樣,因為在外面看不到對象的內部,更無法對它進行修改,因而也有很高的安全性和可靠性。 2類 類是具有相同屬性和相同操作的對象的集合,是抽象數據類型的實現。在此我們定義一個學生類,眾所周知,學生所具有的屬性一般有姓名,學號,性別,成績等,相

7、應的操作有入學,修改,顯示,畢業等等。當入學時,的有一定的操作將此學生的信息加入大學生類中,而畢業是應該撤消其相應的信息。具體到每個學生則是學生類的一個實例,也就是一個對象。可以說,對象的抽象是類,類的實例是對象。在客觀世界存在的是類的實例,即對象。比如上例中的學生,我們通常不說抽象的“學生”,而是一個個具體的學生,他們有著自己的姓名,學號等等。 在面向對象的程序設計中,總是先聲明類,再定義此類的對象,類是創建對象的模板,給出了屬于該類的全部對象的抽象定義。就像大批量生產某種產品時,我們總是先把這種商品的模具做好,然后開始生產產品,經過一個模具生產的產品,總有相同的特征。在這里,我們可以把模具

8、看做類,而生產出來的產品看做對象。3封裝所謂數據封裝就是指一組數據和與這組數據有關的操作集合組裝在一起,形成一個能動的實體,封裝是指把對象屬性和操作結合在一起,構成獨立的單元,它的內部信息對外界是隱蔽的,不允許外界直接存取對象的屬性,只能通過有限的接口與對象發生聯系。 在面向對象的程序設計中,封裝是把數據和實現操作的代碼放在對象內部,隱蔽一些內部細節。類是數據封裝的工具,對象是封裝的實現。外界要訪問時需要通過類,類的訪問控制機制體現在類的成員中可以有公有成員、私有成員和保護成員。其中共有成員和保護成員允許訪問,私有成員是不允許訪問的。對于外界而言,只需要知道對象所表現的外部行為,而不必了解內部

9、實現細節。封裝體現了面向對象方法的“信息隱蔽和局部化原則”。 4繼承從已有的對象類型出發建立一種新的對象類型就是繼承。繼承在現實生活中是普遍存在的,比如說我們經常見到的汽車,它可以說是繼承了機動車的一些特點,比如說都需要燃料,都需要引擎等等。同樣它也有自己的一些特征,引入繼承的一個原因是可以提高代碼的重用率,更重要的是代碼的擴充。面向對象的程序設計中,繼承指子類(派生類)可以自動擁有父類(基類)的全部屬性和服務。父類和子類是一般與特殊的關系。在定義一個子類時,可以把父類所定義的內容做為自己的內容,并加入若干新的內容。繼承是面向對象語言的重要特性,提高了軟件的可重用性。 繼承分為單重繼承和多重繼

10、承。單重繼承時,一個子類只有一個父類;它繼承的是一個基類的特征。多重繼承時,一個子類可以有多個父類,它所繼承的特征可能不止來自于一個基類。單重繼承構成的類之間的關系是樹狀結構,多重繼承構成的類之間的關系是網狀結構。5消息首先來解釋一下消息,消息是指對象之間在交互通訊中所傳送的信息,也可以說是一個對象對另一個對象發出的請求。一般情況下,我們把發送消息的對象成為發送者或者請求者,接受消息的對象稱為接受者或者目標對象。當一個對象向另一個對象發送消息請求某項服務時,接收消息的對象響應該消息,進行所要求的服務,并把操作的結果返回給請求服務的對象。這樣就完成了消息的傳遞。 在現實生活中對象都不會是孤立存在

11、的,他們之間都存在著這種或者那種的聯系。在面向對象程序中也需要一種機制對這種聯系進行描述,這就是消息機制。消息由三部分構成:消息名、接收消息的對象標識和參數。一般它具有以下幾個性質:1一個對象可以接受不同的消息,進行不同的響應。2相同的消息被不同的對象接受,做出的響應也可以是不同的。3有些對象可以只接受對象,而不用響應,也就是說,對消息的響應并不是必須的。消息也可以分為兩類,公有的和私有的。當有一些消息傳遞給一個對象時,如果消息是其他對象直接傳給它的,那么這些消息就是公有(public)消息;如果消息是這個對象傳給它自己的,那么這些消息就稱為私有(private)消息。 6 多態性多態性是指相

12、同的操作或函數、過程可作用于多種類型的對象上并獲得不同的結果。多態性也是面向對象系統的重要特征。在面向程序的設計中,多態性是指在基類中定義的屬性和服務被子類繼承后,可以具有不同的數據類型和表現出不同的行為。當一個對象接收到一個請求進行某項服務的消息時,將根據對象所屬的類,動態地選用該類中定義的操作。不同的類對消息按不同的方式解釋。 多態性機制不但為軟件設計提供了靈活性,減少信息冗余,而且顯著提高了軟件的可復用性和可擴充性。C+中的多態可以分為四類:參數多態,包含多態,重載多態和強制多態。這些我們將會在后面的課程中一一進行介紹。 C+支持兩種多態性,分別是編譯時的多態性和運行時的多態性。在此,編

13、譯時的多態性是通過重載實現的,運行時的多態性是通過虛函數實現的。這些內容將在第六章詳細講述。1.2 面向對象程序設計的特點 1.2.1傳統程序設計方法的局限性 1.2.2 面向對象程序設計的主要優點1.2.1傳統程序設計方法的局限性 存在下面幾點局限性:()傳統程序設計開發軟件的生產效率低下。()傳統程序設計難以應付日益龐大的信息量和多樣的信息類型。()傳統的程序設計難以適應各種新環境。 實踐證明,用傳統方法開發出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。1.2.2 面向對象程序設計的主要優點()符合人們習慣的思維方法,便于分解大型的復雜多變的問題。

14、()易于軟件的維護和功能的增減。對象的封裝性及對象之間的松散組合,都給軟件的修改和維護帶來了方便。()可重用性好。 ()與可視化技術相結合,改善了工作界面。在結構化程序設計中可以用下面的式子表示程序:程序=數據結構+算法+程序設計語言+語言環境在面向對象程序設計中可以用下面的式子表示程序:程序=對象+對象+對象對象=算法+數據結構+程序設計語言+語言環境1.3面向對象的系統開發方法可分為五個階段:()系統調查和需求分析階段。()分析問題的性質和求解問題階段。()整理問題階段。()程序實現階段。()軟件測試階段。1.3.1幾種典型的面向對象程序設計語言()Simula語言()Smalltalk語

15、言()C+語言 ()Java語言()C#語言1.3.2 C+面向對象程序設計流程建立一個項目的基本步驟是:(1)利用編輯器建立程序代碼文件,包括頭文件、代碼文件、資源文件等。(2)啟動編譯程序,編譯程序首先調用預處理程序處理程序中的預處理命令(如#include,#define等),經過預處理程序處理的代碼將作為編譯程序的輸入。(3)編譯對用戶程序進行詞法和語法分析,建立目標文件,文件中包括機器代碼、連接指令、外部引用以及從該源文件中產生的函數和數據名。(4)連接程序將所有的目標代碼和用到的靜態連接庫的代碼連接起來,為所有的外部變量和函數找到其提供地點,(5)最后生成一個可執行文件。一般有一個

16、makefile文件來協調各個部分產生可執行文件。1.4 程序舉例【實例1】使用面向對象的設計方法,編寫一個滿足如下要求的程序:()根據輸入的日期輸出這一日期的前一天和后一天的日期。()根據輸出的日期判斷是星期幾。#includeusing namespace std;struct Date int month; int day; int year; class TdateType public: TdateType(); /不帶參數的構造函數定義 TdateType(Date b); /有參數的構造函數定義 void Next(); /明天的日期成員函數定義 void Previons();

17、 /昨天的日期成員函數定義 int Weekday(); /判斷是星期幾成員函數定義 void Print(); /打印日期 private: Date a; /日期結構數據成員 int IsLeapYear(); /私有成員函數,判斷是否閏年 int MonthEnd(int m); /計算某月的天數;/以下為類的成員函數實現部分TdateType:TdateType()a.year=1999;a.month=1;a.day=1;TdateType:TdateType(Date b)a.month = b.month;a.day = b.day;a.year = b.year; void T

18、dateType:Next() a.day +;if( a.day MonthEnd(a.month) ) a.day = 1; a.month +; if ( a.month 12) a.month = 1; a.year +; void TdateType:Previons() a.day -; if ( a.day 1 ) a.month -; if (a.month 1 ) a.month = 12; a.year -; a.day = MonthEnd(a.month); int TdateType:IsLeapYear() return ( (a.year % 4=0 & a.ye

19、ar % 100!=0 )|(a.year % 400=0) );int TdateType:MonthEnd(int m) switch(m) case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11:return 30; case 2: if (IsLeapYear() return 29; else return 28; return 0; int TdateType:Weekday() long n; n=(a.year)-1)*365; /直

20、至去年的天數(不考慮閏年) n+=(a.year )-1)/4; /以下3條語句考慮閏年數 n-= (a.year)-1)/100; n+=(a.year)-1)/400; for ( int i=1;ia.month;i+) /本年直至上月的天數 n+=MonthEnd(i); n +=a.day; /本月的天數 n %=7; /折算成星期幾,若j是0,則為星期日 return n; void TdateType:Print() cout a.year年 a.month月 a.day日; switch (Weekday() ) case 0:cout星期日n;break; case 1:co

21、ut星期一n;break; case 2:cout星期二n;break; case 3:cout星期三n;break; case 4:cout星期四n;break; case 5:cout星期五n;break; case 6:cout星期六n;break; int main() Date date; cout請輸入日期(格式為:年月日,中間用空格隔開):date.yeardate.monthdate.day; TdateType Getdata(date); /根據輸入的日期來創建并初始化對象 Getdata.Weekday(); Getdata.Print(); cout昨天是:endl;

22、Getdata.Previons(); Getdata.Weekday(); Getdata.Print(); cout明天是:endl; Getdata.Next(); Getdata.Weekday(); Getdata.Print(); return 0;C+程序中,數據成員也叫字段,數據成員也叫方法。如果使用的是Microsoft Visual Studio 2005或以上的開發環境,可以從類圖中看到類與數據成員的相互關系,如圖1-2所示。 圖1-2 程序的類圖表示1.5本章小結本章介紹了面向對象程序設計的概念,面向對象程序設計(oop),指一種程序設計范型,同時也是一種程序開發的方法

23、論。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。這種范型的主要特征是:程序=對象+消息。面向對象程序的基本元素是對象.面向對象程序的主要結構特點是:第一,程序一般由類的定義和類的使用兩部分組成,在程序中定義各對象并規定它們之間傳遞消息的規律。第二,程序中的一切操作都是通過向對象發送消息來實現的,對象接收到消息后,啟動有關方法來完成相應得操作。對象、對象的狀態和行為、類、類的結構、消息和方法是面向對象程序設計中出現的幾個基本概念。面向對象程序設計的四大特征是:抽象性、封裝性、繼承性和多態性。傳統的程序設計方法存在下面幾點局限性。面向對象程序設計的優點。習

24、題一一、填空題1面向對象程序設計,指一種_,同時也是一種程序開發的方法論。它將_作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、_和擴展性。2對象之間進行通信的結構叫做_。3面向對象程序設計的四大特征是:_、_、_和_。4面向對象的程序設計中最為強大的功能是_,它允許用戶在一個已經存在的類之上編寫新的程序。 5Smalltalk是第一個真正的面向對象程序設計語言,它體現了純粹的OOP設計思想,是最純的OOP語言,它起源于_語言。JAVA語言是一種適用于分布式計算的新型面向對象程序設計語言,可以看作是_語言的派生。二、選擇題1面向對象程序的基本元素是( )。 A 對象 B 方法 C

25、 類 D 程序2( )是面向對象系統中實現對象間的通信和請求任務的操作,是要求某個對象執行其中某個功能操作的規格說明。 A 語言 B 類 C 方法 D 消息3Java語言中的( ),主要是通過對象和類來實現的,即把相關的數據及其操作封裝在類里,構成具有獨立意義的構件。 A 抽象 B 繼承 C 封裝 D 多態4在軟件開發中,類的( )使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重性。A 抽象性 B 繼承性C 封裝性 D 多態性5( )語言的來源是Algol60的面向對象的擴展,但它是作為模擬語言設計的。它具有面向對象語言的功

26、能和某些面向對象的方法學。A C+ B Simula Smalltalk D Java 三、簡答題1 什么是面向對象程序設計? 2 簡述面向對象程序設計的基本概念和特征。3 傳統的程序設計具有哪些局限性?4 面向對象程序設計的優點是什么?5 試說出幾種典型的面向對象程序設計語言,并對其進行簡單的說明。C+面向對象程序設計第二章本章導讀C+語言是在C語言的基礎上發展而來的,它比C語言更容易被人們學習和掌握。C+語言對C語言的擴充,主要是引進了面向對象機制,包括類、對象、派生類、繼承、多態等概念和新的語言機制,從而使C+成為一種面向對象的程序設計語言。應該說明的是C+語言并沒有完全拋棄C語言的成份

27、,C+的面向對象和面向過程的雙重特性是區別于其它面向對象語言的一個顯著標志。本章要點C+的特點C+程序的基本結構C+和C語言的區別第2章 目錄2.1 C+語言的產生和發展2.2 C+程序的結構及編程環境2.3 C+的數據類型2.4 運算符、表達式和基本語句2.5 函數2.6 作用域和引用2.7 程序舉例2.8本章小結習題二2.1 C+語言的產生和發展2.1.1 C+的產生2.1.2 C+的特點2.1.1 C+的產生C+程序設計語言由C語言發展而來。C語言產生以后,最早在UNIX操作系統上使用,并且迅速被人們接受并得到了廣泛的應用。到了80年代C語言已經風靡全球,成為一種應用最為廣泛的程序設計語

28、言。但C語言在盛行的時候也顯現出了自己的局限性,突出表現在以下幾個方面:()C語言類型檢查機制較弱,這使得程序中的一些錯誤不能在編譯時被發現。()C語言本身幾乎沒有支持代碼的重用機制,這使得各個程序的代碼很難為其他程序所用。()C語言不適合開發大型的程序,當程序達到一定的規模時,程序員很難控制程序的復雜性。為了避免C語言以上的這些不足之處,1980年貝爾實驗室的Bjarne Stroustrup博士開始對C語言進行改編。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template

29、)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標準,1983年正式命名新的語言為C+語言。1998年國際標準組織(ISO)頒布了C+程序設計語言的國際標準ISO/IEC 14882-1998。C+是具有國際標準的編程語言,通常稱作ANSI/ISO C+。C+繼承了C的原有精髓,增加了對開發大型軟件非常有效的面向對象機制,并且彌補了C語言不支持代碼重用的不足,成為一種既可表現過程模型,又可表現對象模型的優秀的程序設計語言之一。目前C+仍在不斷的發展當中。2.1.2 C+的特點()兼容C語言。這主要表現在大部分C程序不需修改即可在C+的編譯環境下運行,用C語言

30、編寫的許多庫函數和應用軟件都可用于C+。()用C+編寫的程序可讀性更好,代碼結構更合理,可直接地在程序中映射問題空間的結構。()生成的代碼質量高,運行效率僅比匯編語言代碼段慢10%20%。()從開發時間、費用到形成的軟件的可重用性、可擴充性、可維護性和可靠性等方面有了很大的提高,使得大中型的程序開發項目變得容易得多。()C+是面向對象的程序設計語言,可方便地構造出模擬現實問題的實體和操作。2.2 C+程序的結構及編程環境2.2.1 C+程序基本格式2.2.2 C+程序的結構2.2.3 C+程序的編程環境2.2.1 C+程序基本格式讓我們通過程序2.1的學習,對C+程序的格式有一個初步的認識?!?/p>

31、例2.1】#includeusing namespace std;int max(int x,int y);void main()/主函數 int a,b,fmax; /定義三個整型變量coutab;/從鍵盤輸入變量a和b的值fmax=max(a,b);/調用函數max,將得到的值賦給變量fmaxcoutThe larger number:fmaxy)return x; else return y;由上面程序可以看出C+程序有以下幾個基本組成部分:1預處理命令2輸入和輸出3函數4注釋2.2.2 C+程序的結構一個面向對象的C+程序一般由類的聲明和類的使用兩大部分組成。類的使用部分一般由主函數及

32、有關子函數組成。其結構大致如下:#include/類的聲明部分class A int x,y,z;/類A的數據成員的聲名fun()/類A的成員函數的定義和聲明;/類的使用部分int main()A a;/創建一個類A的對象afun();/調用成員函數fun() return 0;在應用程序中,我們常常把類的成員函數的定義與聲明分開。分開后的定義和聲明還可以寫在兩個文件中,使用時只要用# include包含即可,所以我們說C+程序是多文件結構。2.2.3 C+程序的編程環境在DOS下,C+程序的編輯、編譯和運行方法和過程與C語言基本一樣,特別是常用的C+版本,如Turbo C+或Borland

33、C+都帶有C和C+兩種編譯器。在Windows下,我們常用Visual C+開發環境,來編輯、編譯和運行C+程序,隨著.NET的出現,有時也用Microsoft Visual Studio 2005或Microsoft Visual Studio 2008來編輯、編譯和運行C+程序。2.3 C+的數據類型2.3.1 關鍵字和標識符2.3.2 C+的基本數據類型2.3.3 常量2.3.4 變量2.3.5 數組2.3.6 結構體2.3.7聯合體2.3.8 枚舉類型2.3.9 用typedef類型2.3.10數據類型轉換基本數據類型(是系統預先定義的,并被 內設在語言中的數據類型 )派生類型(派生類

34、型是從基本類型派生出 來的新類型,它是一種更高級的抽象)類類型(類類型是通過組合現存類型而生 成的新類型)2.3.1 關鍵字和標識符在C+語言中,關鍵字(keyword)又稱為保留字,它是系統預先定義的、具有特定含義的標識符,因此不允許用戶重新定義,即不能作為新的標識符出現在程序中,例如:例2.1中的“cin”、“cout”和“return”等等。標識符是由若干個字符組成的字符序列,用來命名程序中的一些實體。通常用于常量名、變量名、函數名、類名、結構名、聯合名、對象名、類型名和標號名等。在程序中用戶是通過標識符來定義和引用這些對象的。C+語言中構成標識符的語法規則如下: (1)標識符由字母(a

35、z,AZ)、數字(09)或下劃線(_)組成;(2)第一個字符必須是字母或下劃線。例如,Example,My_Birthday,Message,是合法的標識符;5key,5-A是非法的標識符;(3)VC+中標識符最多由247個字符組成; (4)C+大小寫字母被認為是兩個不同的標識符。例如,book和Book被認為是兩個不同的標識符; (5)關鍵字不能作為新的標識符在程序中使用,但標識符中可以包含關鍵字。例如,intx,myclass 是合法的標識符。下面列出了C+語言中的標點符號: ,逗號,用做數據之間的分隔符; ;分號,語句結束符; :冒號,語句標號結束符或條件運算符 單引號,字符常量標記符

36、雙引號,字符串常量標記符 左花括號,復合語句開始標記符 右花括號,復合語句結束標記符2.3.2 C+的基本數據類型 整數類型(int) /用于定義整數對象。字符類型(char) /字符類型用于定義字符數據。浮點類型(float,double)/浮點類型用于定義實數。空類型(void)/void類型主要用于聲明沒有返回值的函數,以及聲明未確定類型或指向任意數據類型的指針。 數據類型決定了數據所占存儲空間的大小及值域范圍,這些是與機器有關的。表2-1(見課本p14)列出的是在32位編譯器中的基本數據類型所占空間的大小和值域范圍。2.3.3 常量特點分類常量特點常量是指在程序運行的整個過程中始終保持

37、不變的量。在表達式中常量是明確表示出的值。常量不同于變量,主要表現在以下兩個方面: 第一,常量不在內存中占有編譯空間;第二,常量的值不能修改。 常量分類整型常量字符常量邏輯常量枚舉常量實型常量地址常量字符串常量 (一) 整型常量整型常量簡稱整數它有十進制、八進制和十六進制三種表示。在整數末尾使用u和l字母1 十進制整數當一個十進制整數大于等于-2147483648即-231-1,同時小于等于2147483647即231-1時,則被系統看作是int型常量;當在21474836484294967295即232-1范圍之內時,則被看作是unsigned int型常量;當超過上述兩個范圍時,則無法用C

38、+整數類型表示,只有把它用實數(即帶小數點的數)表示才能夠被有效地存儲和處理。 2 八進制整數 當一個八進制整數大于等于0同時小于等于017777777777時,則稱為int型常量,當大于等于020000000000同時小于等于037777777777時,則稱為unsigned int型常量,超過上述兩個范圍的八進制整數則不要使用,因為沒有相對應的C+整數類型。 3 十六進制整數 當一個十六進制整數大于等于0同時小于等于0 x7FFFFFFF時,則稱為int型常量,當大于等于0 x80000000同時小于等于0 xFFFFFFFF時,則稱為unsigned int型常量,超過上述兩個范圍的十六

39、進制整數沒有相對應的C+整數類型,所以不能使用它們。 4 在整數末尾使用u和l字母對于任一種進制的整數,若后綴有字母u(大、小寫等效),則硬性規定它為一個無符號整型(unsigned int)數,若后綴有字母l(大、小寫等效),則硬性規定它為一個長整型(long int)數。在一個整數的末尾,可以同時使用u和l,并且對排列無要求。如25U,0327UL,0 x3ffbL,648LU等都是整數,其類型依次為unsigned int,unsigned long int,long int和unsigned long int。(二) 字符常量字符常量簡稱字符,它以單引號作為起止標記,中間為一個或若干個

40、字符。如a,%,n,012,125,x4F等都是合乎規定的字符常量。每個字符常量只表示一個字符,當字符常量的一對單引號內多于一個字符時,則將按規定解釋為一個字符。如a表示字符a,125解釋為字符U。每個ASCII字符均是一個字符型數據,即字符型中的一個值?!稗D義”字符的概念,其含義是:以反斜線作引導的下一個字符失去了原來的含義,而轉義為具有某種控制功能的字符。如n中的字符n通過前面使用的反斜線轉義后就成為一個換行符,其ASCII碼為10。(三) 邏輯常量 邏輯常量是邏輯類型中的值,VC+用保留字bool表示邏輯類型,該類型只含有兩個值,即整數0和1,用0表示邏輯假,用1表示邏輯真。在VC+中還

41、定義了這兩個邏輯值所對應的符號常量false和true,false的值為0,表示邏輯假,true的值為1,表示邏輯真。(四) 枚舉常量枚舉常量是枚舉類型中的值,即枚舉值。枚舉類型是一種用戶定義的類型,只有用戶在程序中定義它后才能被使用。用戶通常利用枚舉類型定義程序中需要使用的一組相關的符號常量。枚舉類型的定義格式為: enum ; 它是一條枚舉類型定義語句,該語句以enum保留字開始,接著為枚舉類型名,它是用戶命名的一個標識符,以后就直接使用它表示該類型,枚舉類型名后為該類型的定義體,它是由一對花括號和其中的枚舉表所組成,枚舉表為一組用逗號分開的由用戶命名的符號常量,每個符號常量又稱為枚舉常量

42、或枚舉值。如: ()enum colorred, yellow, blue; ()enum daySun, Mon, Tues, Wed, Thur, Fri, Sat; 第一條語句定義了一個枚舉類型color,用來表示顏色,它包含三個枚舉值red,yellow和blue,分別代表紅色、黃色和蘭色。 第二條語句定義了一個枚舉類型day,用來表示日期,它包含7個枚舉值,分別表示星期日、星期一至星期六。 一種枚舉類型被定義后,可以象整型等預定義類型一樣使用在允許出現數據類型的任何地方。如可以利用它定義變量。()enum color c1, c2,c3;()enum day today, workd

43、ay;()c1=red;()workday=Wed;(五) 實型常量簡稱實數,有十進制的定點和浮點兩種表示方法。 1定點表示 定點表示的實數簡稱定點數,它是由一個符號(正號可以省略)后接若干個十進制數字和一個小數點所組成,這個小數點可以處在任何一個數字位之前或之后。如.12, 1.2, 12., 0.12, -12.40, +3.14, -.02037, -36.0等都是符合書寫規定的定點數。 2浮點表示 浮點表示的實數簡稱浮點數,它是由一個十進制整數或定點數后接一個字母e(大、小均可)和一個1至3位的十進制整數所組成,字母e之前的部分稱為該浮點數的尾數,之后的部分成為該浮點數的指數,該浮點數

44、的值就是它的尾數乘以10的指數冪。如3.23E5, +3.25e-8, 2E4, 0.376E-15,1e-6, -6.04E+12, .43E0, 96.e24等都是合乎規定的浮點數,它們對應的數值分別為:3.25*105, 3.25*10-8, 20000, 0.376*10-15, 10-6, -6.04*1012, 0.43, 96*1024等。 (六) 地址常量指針類型的值域是0232-1之間的所有整數,每一個整數代表內存空間中一個對應單元(若存在的話)的存儲地址,每一個整數地址都不允許用戶直接使用來訪問內存,以防止用戶對內存系統數據的有意或無意的破壞。但用戶可以直接使用整數0作為地

45、址常量,它是C+中唯一允許使用的地址常量,并稱為空地址常量,它對應的符號常量為NULL,表示不代表任何地址,在iostream等頭文件中有此常量的定義。(七)字符串常量 字符串常量簡稱字符串,是由一對雙引號括起來的零個或多個字符序列。 例如: “This is a C+ Program.n” /字符串常量 “td” /字符串常量 “20021222” /字符串常量 字符串中可以包含空格符、轉義字符或其他字符。字符串常量不同于字符常量,兩者是有區別的,主要表現在以下幾個方面:(1)字符常量的標識符是單引號,字符串常量的標識符是雙引號; (2)存儲方式不同; 例如: Program /字符串常量

46、m /字符串常量 m /字符常量 (3)字符串常量和字符常量所能進行的運算是不同的。 例如:m+n 和 m+n 運算的結果是不同的。2.3.4 變量(一) 變量定義語句(二) 語句格式舉例(三) 語句執行過程(四) 語句應用舉例(五) 符號常量定義語句(六) 使用#define命令定義符號常量(七) 使用變量和常量的程序舉例(一) 變量定義語句 變量定義是通過變量定義語句實現的,該語句的一般格式為: =,; 為已存在的一種數據類型,如short, int, long, char, bool, float, double等都是類型關鍵字,分別代表系統預定義的短整型、整型、長整型、字符型、邏輯型(

47、又稱布爾型)、單精度型和雙精度型。對于用戶自定義的類型,可從類型關鍵字中省略其保留字。如假定struct worker是用戶自定義的一種結構類型,則前面的保留字struct可以省略。 是用戶定義的一個標識符,用來表示一個變量,該變量可以通過后面的可選項賦予一個值,稱為給變量賦初值是一個表達式,它的值就是賦予變量的初值。該語句格式后面使用的省略號表示在一條語句中可以定義多個變量,但各變量定義之間必須用逗號分開。(二) 語句格式舉例()int a,b;()char ch1=a, ch2=A;()int x=a+2*b;()double d1, d2=0.0, d3=3.14159;第一條語句定義了

48、兩個整型變量a和b;第二條語句定義了兩個字符變量ch1和ch2,并被分別賦初值為字符a和A;第三條語句定義了一個整型變量x,并賦予表達式a+2*b的值作為初值;第四條語句定義了三個雙精度變量,分別為d1, d2和d3,其中d2被賦予初值0.0,d3被賦予初值3.14159。(三) 語句執行過程當程序執行到一條變量定義語句時,首先為所定義的每個變量在內存中分配與類型長度相同的存儲單元,如對每個整型變量分配4個字節的存儲單元,對每個雙精度變量分配8個字節的存儲單元;接著若變量名后帶有可選項,則計算出初值表達式的值,并把它保存到變量所對應的存儲單元中,表示給變量賦初值,若變量名后不帶有可選項,則當所

49、屬語句處于函數之外時,將自動給變量賦予初值0,否則不賦予任何值,此時的變量值是不確定的,實際上是存儲單元中的原有值(現在被稱為垃圾)。(四) 語句應用舉例【例2.2】 計算圓的周長和面積。分析:計算圓的周長和面積,則圓的半徑、周長和面積都需要設定為變量,假定分別用radius, girth和area標識符表示,它們的類型均應為實數型,即單精度或雙精度型,通常使用雙精度型。根據圓的半徑計算周長和面積的公式為: girth=2radius area=radiusradius 下面給出用C+語言編寫的程序: #include using namespace std; void main() doub

50、le radius, girth, area; /定義變量 cinradius; /從鍵盤輸入一個圓的半徑 girth=2*3.14159*radius; /計算周長 area=3.14159*radius*radius; /計算面積 coutradius:radiusendl; coutgirth: girthendl; coutarea: areaendl; 在這個程序的主函數中,第一條語句定義了三個變量,由于沒有給它們賦初值,所以其值是不確定的;第二條語句從鍵盤輸入一個常數給半徑radius,輸入的常數可以是整數,也可以是定點數或浮點數,系統將自動把它轉換為一個雙精度數后再賦給radiu

51、s,即賦給該變量所對應的存儲單元;第三條和第四條語句分別計算出賦值號右邊表達式的值,再分別賦給變量girth和area;第五至七條語句依次向屏幕輸出圓的半徑、周長和面積。(五) 符號常量定義語句 符號常量定義語句同變量定義語句類似,其語句格式為: const = ,; 該語句以保留字const開始并標識,后跟符號常量的類型關鍵字,接下去為符號常量名,它是一個用戶定義的標識符,符號常量名之后為一個賦值號和一個表達式(注意:表達式中既可以含有常量也可以含有變量),由此可見,在定義符號常量時必須同時對其賦初值。該語句同樣也可以定義多個符號常量。 系統執行符號常量定義語句也同執行變量定義語句一樣,需要

52、依次為每個符號常量分配存儲單元并賦初值。 一個符號常量被定義后,它的值就是定義時所賦予的初值,以后將始終保持不變,因為系統只允許讀取它的值,而不允許向它賦值。 下面給出幾個符號常量定義語句的例子: ()const int A1=5, A2=A1*4; ()const double PI=3.14159; ()const int MaxSize=100;(六) 使用#define命令定義符號常量 #define命令是一條預處理命令,其命令格式為: #define 是用戶定義的標識符,又稱為宏或宏標識符也是由用戶給定的、將用來代替宏的一個字符序列。宏被該命令定義后,可以使用在其后的程序中,當程序被

53、編譯時將把所有地方使用的宏標識符替換為對應的,并把宏命令刪除掉。 如一個宏命令為: #define ABC 10 若在主函數中有這樣一條語句: int x=ABC*ABC; 則當編譯后改變為: int x=10*10; 若上述宏命令中的字符序列不是10,而是2+5,則編譯后改變為: int x=2+5*2+5; 可見宏替換后改變了原表達式中運算的優先次序,為了克服可能出現的這種錯誤,通常使用帶括號的宏字符序列。如可將上述定義的宏命令改寫為: #define ABC (2+5) 上述語句將會被正確地替換為: int x=(2+5)*(2+5);由于使用const語句定義符號常量帶有數據類型,以便

54、系統進行類型檢查,同時該語句具有計算初值表達式和給符號常量賦初值的功能,所以使用它比使用宏命令定義符號常量要優越得多,因此提倡在程序中使用const語句定義符號常量。(七) 使用變量和常量的程序舉例【例2.3】#includeusing namespace std;#define M -1 /符號常量中的字母通常采用大寫const int N=10;void main() int x,y; coutx; if(xN) y=M*x+1; else y=(x+M)*x-3; coutx yendl; 程序運行后若從鍵盤上輸入數值5,則得到的輸出結果為:5 -4若從鍵盤上輸入的數值為20,則得到的輸

55、出結果為:20 3772.3.5 數組1數組的定義 2數組的初始化 3數組的應用 數組具有如下的特性: ()數組中的每個元素具有相同的類型; ()每個元素由下標唯一標示。 與簡單變量一樣,數組在使用之前必須先定義。換句話說,就是數組要先定義后使用。1數組的定義 具有一個下標的數組稱為一維數組。定義一維數組的語法格式為: 可以是基本數據類型,也可以是已經聲明過的某種數據類型;是用戶自定義的標識符,用來表示數組的名稱;必須是整型數據,用于表示數組的長度,即數組所包含元素的個數;是下標運算符,具有最高的運算優先級,結合性為從左向右。 多維數組的定義與一維數組類似,其語法格式為: 例如,下面定義了幾個

56、不同類型的數組: int a10; /定義了一個整型數組a float b20; /定義了一個單精度數組b double c5; /定義了一個雙精度數組c int d35,e234; /定義了一個二維整型數組d和一個三維整型數組e float score306; /定義了浮點型數組score具有相同類型的數組可以在一個語句中定義。例如: int a110,a220; /同時定義了兩個整型數組 具有相同類型的簡單變量和數組也可以在一個語句中定義。例如: int x,y20; /同時定義了一個整型變量和一個整型數組 2數組的初始化 在定義數組的同時給數組元素賦初值稱為數組的初始化。其語法格式為:

57、= 例如,下面都是合法的初始化數組元素的格式。 int a10=1,2,3,4,5,6,7,8,9,10; /整型數組元素被全部初始化 float x5=2.1,2.2,2.3,2.4,2.5; /浮點型數組元素被全部初始化 int b10=1,3,5,7,9; /初始化了部分數組元素 int c=2,4,6,8,10; /通過對數組元素全部初始化,隱含給出了數組的長度為5 對于多維數組,下面都是合法的初始化數組元素的格式。()int a34=1,2,3,4,3,4,5,6,5,6,7,8; /a數組元素被全部初始化 ()int a34=1,2,3,4,3,4,5,6,5,6,7,8; /a數

58、組元素被全部初始化 ()int b3=1,3,5,5,7,9; /初始化了全部數組元素,隱含了行數 ()int c33=1,0,1,0,0,1; /初始化了部分數組元素 對于數組的初始化要注意如下幾個問題:()初始化時,可以對全部元素賦初值,也可以對部分元素賦初值;()如果只對部分元素賦初值,沒有賦初值的元素默認為0; ()若對所有元素賦初值,可以不顯式指定數組的長度,系統會根據初值表中數據的個數自動定義數組的長度; ()在定義數組時,編譯器必須知道數組的大小。因此,只有在初始化的數組定義中才能省略數組的大小 3數組的應用 數組的使用即數組元素的使用,是通過數組名及下標運算符來使用的。每個元素

59、由唯一下標來標識,即通過數組名及下標可以惟一地確定數組中的某個元素。 數組元素也稱為下標變量。下標可以是常量、變量或表達式,但其值必須是整數。下標變量可以象簡單變量一樣參與各種運算。 請看下面的程序段: 程序段1: int a5,b2,i,j; a0=b0=2; /下標為常量 i=1;j=3; ai=j; /下標為變量 aj+1=8; /下標為表達式 aj=3*a1; ab0=ai+a0;/下標是數組元素的值b1=a2; 程序段2: int h5,i; for(i=0;i5;i+) hi=i+1;/利用循環為數組元素賦值程序段3: int a5,b5,i; for(i=0;i5;i+) ai=

60、2*i; b=a; /錯誤的語句,賦值號左邊不是左值在程序段3中,試圖通過語句b=a;將a數組中的值拷貝到數組b中,結果出現了語法錯誤。正確的方法是將對應的元素進行拷貝,見下列程序段:2.3.6 結構體1結構體類型的定義2結構體類型變量 3結構體變量的初始化 1結構體類型的定義定義結構體類型的格式為: struct ; ; ; ; 其中,struct是定義結構體類型的關鍵字,不能省略。是用戶自己命名的標識符。struct與組成特定的結構體類型名,它們可以像基本類型名一樣(如int、float或char)定義該自己的變量或函數等。 花括號內的部分稱為結構體。結構體是由若干結構成員組成的。每個結構

溫馨提示

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

評論

0/150

提交評論