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

下載本文檔

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

文檔簡介

C++面向對象程式設計

第一章緒論面向對象思想的由來面向對象程式設計面向對象程式設計語言C++與C語言的關係§1.1面向對象思想的由來

面向對象技術追求的是軟體系統(tǒng)對現(xiàn)實世界的直接模擬,儘量實現(xiàn)將現(xiàn)實世界中的事物直接映射到軟體系統(tǒng)的解空間?!?.1面向對象思想的由來現(xiàn)實問題空間面向對象解空間物質:一輛白色的自行車意識:自行車具體事物:一個對象——自行車的實例抽象概念:自行車類§1.2面向對象程式設計一、結構化程式設計(SP,StructureProgramming)結構化程式設計思路是:自頂向下,逐步求精;其程式結構是按功能劃分若干個基本模組,這些模組形成一個樹狀結構;各模組之間的關係盡可能簡單,在功能上相對獨立;每一模組內部均是由順序、選擇和迴圈三種基本結構組成;其模組化實現(xiàn)的具體方法是使用副程式?!?.2面向對象程式設計一、結構化程式設計(SP,StructureProgramming)例如:計算一個班中所有學生電腦的平均成績,按照結構化程式設計的思想,可以將其拆分為以下的子任務:找出一名學生的電腦成績計算共有多少名學生計算此科目的單科總分用學生總數(shù)去除單科總成績★找出一個學生的檔案★讀出電腦的分數(shù)★把此分數(shù)加到部分和上★讀出下一名學生的檔案§1.2面向對象程式設計一、結構化程式設計(SP,StructureProgramming)缺點結構化程式設計把數(shù)據和過程分離為相互獨立的實體,程式員在編程時必須考慮所要處理數(shù)據的格式。對於不同的數(shù)據格式即使要做同樣的處理或相同的數(shù)據格式要做不同的處理都需要編寫不同的程式。因此結構化程式的可重用性不好。而且數(shù)據與程式始終保持相容也成為程式員的一個負擔?!?.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)優(yōu)點1面向對象程式設計將數(shù)據及對數(shù)據的操作放在一起,作為一個相互依存,不可分割的整體來處理,即對象。它採用數(shù)據抽象和資訊隱藏技術。它將對象及對象的操作抽象成一種新的數(shù)據類型——類,並且考慮不同對象之間的聯(lián)繫和對象類的重要性。1.面向對象程式設計的優(yōu)越性§1.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)自行車對象數(shù)據抽象自行車類屬性:架子尺寸車輪尺寸顏色原材料操作:轉彎移動修理§1.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)優(yōu)點2面向對象程式設計的優(yōu)越性還表現(xiàn)在,它有希望解決軟體工程的兩個主要問題——軟體複雜性和軟體生產率的提高。此外它還符合人類的思維習慣,能夠自然地表現(xiàn)現(xiàn)實世界的實體和問題,它對軟體開發(fā)過程具有重要意義。1.面向對象程式設計的優(yōu)越性§1.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)2.面向對象程式設計的幾個重要概念封裝和數(shù)據隱藏繼承和重用多態(tài)性§1.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)封裝和數(shù)據隱藏:C++通過建立用戶自定義類型(類)支持封裝性和數(shù)據隱藏。完好定義的類一旦建立,就可看成是完全封裝的實體,可以作為一個整體單元使用。類的實際內部工作應當隱藏起來,使用完好定義的類的用戶不需要知道類是如何工作的,只要知道如何使用它就行?!?.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)繼承和重用:C++採用繼承支持重用的思想,程式可以在擴展現(xiàn)有類型的基礎上聲明新類型。新子類是從現(xiàn)有類型派生出來的,稱為派生類。開發(fā)者在設計軟體時可以利用一些已經被精心設計好並且經過測試的代碼,這些可重用的代碼被組織和存放在程式設計環(huán)境的類庫中。高質量的可重用代碼能有效地降低軟體複雜度和提高開發(fā)效率?!?.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)多態(tài)性:C++通過繼承的方法構造類,採用多態(tài)性為每個類指定表現(xiàn)行為。大學生中學生繼承計算成績計算成績語文數(shù)學英語…高等數(shù)學電腦普通物理…§1.2面向對象程式設計二、面向對象程式設計(OOP,Object-OrientedProgramming)多態(tài)性:C++通過繼承的方法構造類,採用多態(tài)性為每個類指定表現(xiàn)行為。

☆繼承性和多態(tài)性的組合,可以輕易生成一系列雖類似但獨一無二的對象。由於繼承性,這些對象共用許多相似的特徵。但由於多態(tài)性,一個對象可以有獨特的表現(xiàn)方式,面對另一個對象有另一個表現(xiàn)方式?!?.3面向對象程式設計語言LISP家族SimulaSmalltalkC家族LISP家族SimulaSmalltalkC家族LISP是50年代開發(fā)出來的一種語言,它以表處理為特色,是一種人工智慧語言。Simula是60年代開發(fā)出來的,在Simula中引入了幾個面向對象程式設計語言中最重要的概念和特性,即數(shù)據抽象的概念、類和繼承性。Smalltalk起源於Simula語言,是一個真正的面向對象程式語言,它體現(xiàn)了純粹的面向對象的設計思想,是最純的面向對象程式語言。

在80年代,C語言成為一種及其流行、非常廣泛的語言。為了滿足管理程式的複雜性需要,1980年,貝爾實驗室的BjarneStroustrup開始對C進行改進和擴充。最初的成果稱為“帶類的C”,1983年正式取名為C++,在經曆了三次C++修訂後,於1994年制定了ANSIC++標準的草案。以後又經過不斷完善,成為目前的C++。MSC++TurboC++BorlandC++VisualC++§1.4C++與C語言的關係一、C語言的局限1.C類型檢查機制相對較弱,這使得程式中的一些錯誤不能在編譯時發(fā)現(xiàn)。2.C本身幾乎沒有支持代碼重用的語言結構,因此一個程式員精心設計的程式,很難為其他程式所用。3.當程式的規(guī)模達到一定的程度時,程式員很難控制程式的複雜性?!?.4C++與C語言的關係二、C++與C語言的關係1.C++保持與C語言的相容這種相容性表現(xiàn)在許多C語言編寫的程式不經修改就可以為C++所用,用C語言編寫的許多庫函數(shù)和應用軟體也都可以用於C++?!?.4C++與C語言的關係二、C++與C語言的關係2.C++對C語言做了許多改進①增加了一些新的運算符,使得C++應用起來更方便。例如:::newdelete.*->*等?!?.4C++與C語言的關係二、C++與C語言的關係2.C++對C語言做了許多改進②改進了類型系統(tǒng),增加了安全性,C語言中的類型轉換很不嚴格。C++規(guī)定類型轉換多採取強制轉換,又規(guī)定函數(shù)的說明必須用原型,並對默認類型做了某些限制,還增強了編譯系統(tǒng)檢查類型的能力?!?.4C++與C語言的關係二、C++與C語言的關係2.C++對C語言做了許多改進③引進了引用概念,使用引用作函數(shù)參數(shù)帶來很大方便?!?.4C++與C語言的關係二、C++與C語言的關係2.C++對C語言做了許多改進④允許函數(shù)重載,允許設置默認參數(shù),這些措施提高了編程的靈活性,減少冗餘性。又引進了內聯(lián)函數(shù)的概念,提高了程式的效率。§1.4C++與C語言的關係二、C++與C語言的關係2.C++對C語言做了許多改進⑤對變數(shù)說明更加靈活了。C語言只允許在函數(shù)體或分程式內,先是對變數(shù)的說明語句,再是執(zhí)行語句,兩者不可交叉引用。C++打破這一限制,可以根據需要隨時對變數(shù)加以說明?!?.4C++與C語言的關係二、C++與C語言的關係3.C++與C語言的本質差別C++面向對象的語言C語言面向過程的語言§1.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性①C++支持數(shù)據封裝數(shù)據封裝類對象工具支持實現(xiàn)具體§1.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性②

C++類中包含私有、公有和保護成員私有成員只有在類中說明的函數(shù)才能訪問公有成員類外的函數(shù)也可以訪問保護成員只有該類的派生類才能訪問§1.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性③

C++通過發(fā)送消息來處理對象每個對象對接收到的消息給出一個相應的方法予以回應。方法在類定義中使用函數(shù)來定義,在C++中使用一種類似於函數(shù)調用的機制把消息發(fā)送到一個對象上。§1.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性④

C++允許使用友元破壞封裝性類中的私有成員是不允許類外面的任何函數(shù)訪問的,但是友元打破了這種封裝性?!?.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性⑤

C++允許函數(shù)名和運算符重載函數(shù)名重載和運算符重載都屬於多態(tài)性。多態(tài)性是指相同的語言結構可以代表不同類型的實體或者對不同類型的實體進行操作,C++支持多態(tài)性。§1.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性⑥

C++支持繼承性一個類可以根據需要生成派生類(或子類)。派生類繼承了基類的所有方法,另外派生類自身還可以定義所需要的不包含在父類中的新方法。§1.4C++與C語言的關係二、C++與C語言的關係4.C++面向對象的新特性⑥

C++支持動態(tài)聯(lián)編

C++可以通過定義虛函數(shù)來支持動態(tài)聯(lián)編。動態(tài)聯(lián)編是多態(tài)性的一個重要特徵。第二章C++語言初步初識C++程式C++語言的基本符號C++語言的辭彙C++程式的基本框架運行C++程式C++的運行環(huán)境第二章C++語言初步§2.1初識C++程式一、程式實例//*************************//**thisisasimplestprogram**//*************************#include<iostream.h>voidmain(){cout<<“Iamastudent.\n”;}運行結果為:

Iamastudent.注釋編譯預處理程式主體第二章C++語言初步§2.1初識C++程式一、程式實例注釋編譯預處理程式主體序言注釋注解性注釋用於程式開頭,說明程式或檔的名稱、用途、編寫時間、編寫人以及輸入輸出說明等。用於程式中難懂的地方。C++的注釋為“//”之後的內容,直到換行。另外還相容C的注釋,即“/*…*/”,可以佔用多行。在生成可執(zhí)行程式前,C++忽略注釋,把每個注釋都視為一個空格。第二章C++語言初步§2.1初識C++程式一、程式實例注釋編譯預處理程式主體

每個以符號“#”開頭的行,稱為編譯預處理行。如:

#include<iostream.h>作用是在編譯之前將檔iostream.h的內容增加到程式中,以作為其一部分。

iostream.h是系統(tǒng)定義的一個“頭檔”,它設置了C++的I/O相關環(huán)境,定義輸入輸出流對象cout和cin等。第二章C++語言初步§2.1初識C++程式一、程式實例注釋編譯預處理程式主體voidmain(){cout<<“Iamastudent.\n”;}main()表示主函數(shù),每一個C++程式都必須有一個main()函數(shù),main()作為程式的入口。void表示該main()函數(shù)沒有返回值函數(shù)體第二章C++語言初步§2.1初識C++程式一、程式實例注釋編譯預處理程式主體voidmain(){cout<<“Iamastudent.\n”;}函數(shù)頭函數(shù)體+=函數(shù)定義描述一個函數(shù)所執(zhí)行演算法的過程稱為函數(shù)定義。第二章C++語言初步§2.1初識C++程式一、程式實例注釋編譯預處理程式主體voidmain(){cout<<“Iamastudent.\n”;}

main——函數(shù)名全為小寫字母構成,C++程式中的名字是大小些“敏感”的。

cout——標準輸出的流設備,它是C++預定的對象。當程式要在設備上進行輸出時,就需要在程式中指定對象。

<<——輸出操作符,表示將該操作符右邊的數(shù)據送到顯示設備上。

程式中用雙括弧括起的數(shù)據“Iamastudent.\n”稱為字串常量。;表示一個語句的結束/(反斜杠)——稱為轉義符,表示要輸出特殊字元。字串中遇到反斜杠時,下一個字元與反斜杠相結合,形成轉義序列。轉義序列說明\n\t\r\a\\\”換行符,使螢幕游標移到螢幕中下一行開頭水準跳位字元,使游標移到下一製錶位回車符,使游標移到當前行開頭警告,發(fā)出系統(tǒng)警告聲音列印反斜杠符列印雙引號相關鏈接:編程技巧:1.

讓函數(shù)列印的最後一個字元為換行符\n,可以保證函數(shù)使螢幕游標移到螢幕下一行開頭。這種習慣能促進軟體複用,這是軟體開發(fā)環(huán)境中的關鍵目標。2.將每個函數(shù)的整個函數(shù)體在定義函數(shù)體的花括弧中縮排一級,可使程式的函數(shù)結構更加明顯,使程式更易讀?!?.1初識C++程式二、I/O語句1.標準輸出語句當程式需要在螢幕上顯示輸出時,可以使用插入操作符“<<”向cout中插入字元。cout<<“Iamastudent.”;#include<iostream.h>voidmain(){cout<<“MynameisJone.\n”;cout<<“theIDis”;cout<<2;cout<<endl;}§2.1初識C++程式二、I/O語句1.標準輸出語句cout<<“MynameisJone.\n”;<<“theIDis”;<<2;<<endl;cout<<“MynameisJone.\n”<<“theIDis”<<2<<endl;§2.1初識C++程式二、I/O語句2.標準輸入語句

cin與cout類似,是標準輸入檔(指鍵盤)的名字。“>>”稱為提取運算符。cin可自動識別變數(shù)位置和類型。例如:cin>>palstring;inti;floatf;longl;cin>>i>>f>>l;定義一個整型變數(shù)定義一個浮點型變數(shù)定義一個長整型變數(shù)cin能夠知道抽取的變數(shù)的類型§2.1初識C++程式二、I/O語句3.使用控制符⑴setw(n):控制輸出間隔。①如果一個值需要比setw(n)確定的字符數(shù)更多的字元,則該值將使用它所需要的所有字元。說明floatamount=3.14159;cout<<setw(4)<<amount<<endl;運算結果為:3.14159§2.1初識C++程式二、I/O語句3.使用控制符⑴setw(n):控制輸出間隔。②如果一個值的字元數(shù)比setw(n)確定的字元數(shù)少,則在數(shù)字字元前顯示空白。說明cout<<setw(8)<<10<<endl;運算結果為:10﹄︼︼︼§2.1初識C++程式二、I/O語句3.使用控制符⑴setw(n):控制輸出間隔。③setw(n)僅影響與之相鄰的下一個數(shù)的輸出,並不保留效力。說明cout<<setw(8)<<10<<20<<endl;運算結果為:1020﹄︼︼︼cout<<setw(8)<<10<<setw(8)<<20<<endl;運算結果為:1020﹄︼︼︼§2.1初識C++程式二、I/O語句3.使用控制符⑵setfill:用來確定一個非空格的字元。#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setfill(’*’);<<setw(2)<<21<<endl<<setw(3)<<21<<endl<<setw(4)<<21<<endl;cout<<setfill(’’);}運行結果為:21*21**21§2.1初識C++程式二、I/O語句4.printf和scanf如果採用標準輸出函數(shù)printf()和輸入函數(shù)scanf(),則應把程式開始的預處理指令改為:#include<stdio.h>§2.2C++語言的基本符號一、基本符號分類每種語言都用一組字元來構造有意義的語句。C++程式是用下列字元所組成的字元寫成的:大小寫英文字母:a~z,A~Z數(shù)字字元:0~9特殊字元:空格!#%^&*_(下劃線)

-+=~<>/\|.,:;?’”()[]{}$@§2.2C++語言的基本符號二、基本符號的ASCII編碼P31例:charcl=‘a’;inti=cl;cout<<cl<<endl<<i;輸出結果:a97§2.3C++語言的辭彙一、關鍵字(保留字)關鍵字是一類有特定的專門含義的單詞。在程式中用到的其他名字(識別字)不能與C/C++的關鍵字有相同的拼法和大小寫。關鍵字也不能重新定義。注§2.3C++語言的辭彙一、關鍵字(保留字)①C++的關鍵字一般包含了幾乎所有的C語言的關鍵字說明

②C++的關鍵字集是在不斷變化的③不同版本的C++的關鍵字集可能不同補充:基本關鍵字表asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatorprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchtemplatethisthrowtrytupedefunionunsignedvirtualvoidvolatilewhile§2.3C++語言的辭彙二、識別字識別字是由程式員為程式中的各種成份——變數(shù),有名常量,用戶定義的類型,枚舉類型的值,函數(shù)及其參數(shù),類,對象等所起的名字。說明識別字必須符合以下規(guī)則:§2.3C++語言的辭彙識別字必須符合的規(guī)則:1.不能是C++關鍵字,如for,if,case等不可作識別字;2.識別字中字母區(qū)分大小寫,如Abc與abc被認為是兩個不同的識別字。而關鍵字不區(qū)分大小寫,如for,F(xiàn)OR,F(xiàn)or,foR都認為是同一關鍵字;3.第一個字元必須是字母或下劃線;§2.3C++語言的辭彙識別字必須符合的規(guī)則:4.不要太長,一般不超過31個字元為宜(太長則書寫困難,反為不美);5.不能以數(shù)字開頭。如C5合法,而5C則為非法;6.中間不能有空格。如map合法,而map則為非法;§2.3C++語言的辭彙識別字必須符合的規(guī)則:7.變數(shù)名不能包含.;,”’+-之類的特殊符號。實際上,識別字中除了能使用26個英文字母的大小寫和數(shù)字之外,只能使用下劃線_。numberOfStudentnumOfStudentDx6y命名的方式決定了程式書寫的風格補充:介紹幾種常用的命名方式1.駱駝表示法:mycarmy-carmyCar易讀,但是下劃線書寫困難識別字中不能出現(xiàn)空格補充:介紹幾種常用的命名方式2.匈牙利標記法:iMycaripMycar表示整型指針變數(shù)表示整型變數(shù)在每個變數(shù)名的前面加上若干表示類型的字元§2.3C++語言的辭彙三、字面常量

常量:C++程式中的常量是指固定不變的量。字面常量有名常量例如:圓周率pai=3.1416Int型常量float型常量char型常量字串常量§2.3C++語言的辭彙三、字面常量即整型常量,可用3種形式表示:⑴Int型常量:①十進位整數(shù)。如123,-456,0,79834等。如果某個整數(shù)超出了一般整數(shù)的表示範圍,系統(tǒng)可自動按長整型(longint)來處理。如79834L表示長整型。若此字面整數(shù)超出了長整型範圍,系統(tǒng)將發(fā)出警告。注§2.3C++語言的辭彙三、字面常量即整型常量,可用3種形式表示:⑴Int型常量:②八進制整數(shù)以零開頭的整數(shù)表示八進制整數(shù)。如0123,表示(123)8。§2.3C++語言的辭彙三、字面常量即整型常量,可用3種形式表示:⑴Int型常量:③十六進制整數(shù)以零和字母x開頭或以零和字母X開頭的整數(shù)表示十六進制整數(shù)。如0x123或0X123,表示(123)16?!?.3C++語言的辭彙三、字面常量即實型常量,實數(shù)在C++中就是浮點數(shù)。實數(shù)有2種表示:⑵float型常量:①定點數(shù)形式:如0.123,.456,0.0等。②指數(shù)形式:如123e5,123E5都表示123×105。§2.3C++語言的辭彙三、字面常量⑵float型常量:單精確度(float)48f或F尾碼34.5f雙精度(double)810默認34.5長雙精度(longdouble)1019l或L尾碼34.5e2L種類佔用記憶體有效數(shù)字表示形式舉例§2.3C++語言的辭彙三、字面常量即字元常量,是用單引號括起來的一個字元。如‘a’,‘?’等。⑶char型常量:

C++還允許使用一種特殊形式的字元常量,即以“\”開頭的字元序列,如‘\n’。注0表示一個整數(shù)值‘0’表示一個數(shù)字字元,其ASCII碼等於48或0x30?!?.3C++語言的辭彙三、字面常量即用雙引號括起來的字元序列。⑷字串常量:

①字元常量和字串常量是不同的。說明HELLO‘\0’H§2.3C++語言的辭彙三、字面常量即用雙引號括起來的字元序列。⑷字串常量:②不能將字串常量賦給字元常量。例如:說明charc=“abc”;//error§2.3C++語言的辭彙三、字面常量即用雙引號括起來的字元序列。⑷字串常量:說明③單個字元的字串與字元在輸出的表示上沒有差別,因為字串輸出時,C++並不把0結束符一同輸出。例如:cout<<“a”<<endl;cout<<‘a’<<endl;輸出結果為:aa§2.3C++語言的辭彙四、運算符說明①C++語言的運算符和運算形式很豐富,要尤其注意一些包含混和操作的運算符。如++、--、+=、-=等的功能和用法。②C++語言的某些運算符有多種含義。如*的用法。(第三章詳述)§2.4C++程式的基本框架一、SP框架main用戶定義函數(shù)全局變數(shù)庫函數(shù)入口出口從結構設計的觀點,一個C++程式由下麵幾個部分組成:主函數(shù)、用戶定義函數(shù)、庫函數(shù)、全局說明。例外還包括預處理命令和注釋。§2.4C++程式的基本框架二、OOP框架按照面向對象程式設計的思想,其主體是若干類定義的集合。理想的C++程式應由以下幾部分組成:類的定義主函數(shù)注釋預處理命令包括類的說明及類成員函數(shù)的類外定義程式的入口分佈於程式各處把程式檔劃分成若干.h和.cpp檔§2.5運行C++程式從C++根源程式到可執(zhí)行程式的步驟:

編輯、預處理、編譯、鏈接、調試C++根源程式C++預處理後的C++根源程式目標程式可執(zhí)行程式運行編輯器預處理器C++編譯器鏈接器程式員調試出錯資訊§2.6C++的運行環(huán)境Microsoft公司的VisualC++6.0Borland公司的BorlandC++5.02等等File:實現(xiàn)與檔有關的所有操作Edit:實現(xiàn)編輯操作View:修改顯示狀態(tài)Insert:用於在工程中增加檔或組件Project:用於控制整個工程Build:用於編譯、連接和調試Tools:用於定制和訪問VC的工具Window:用於改變窗口大小Help:使用MSDN及其他幫助選擇C++原始檔案輸入檔案名指定檔位置單擊OKabc輸入程式之後存盤存盤後,選擇compileabc.cpp項,進行編譯,給出錯誤資訊。編譯無錯後,自動進行鏈接,並生成可執(zhí)行檔,選則Executeabc.exe?!?.2C++語言的基本符號一、基本符號分類

每種語言都用一組字元來構造有意義的語句。C++程式是用下列字元所組成的字元集寫成的:大小寫英文字母:a~z,A~Z數(shù)字字元:0~9特殊字元:空格!#%^&*_(下劃線)

-+=~<>/\|.,:;?’”()[]{}$@§2.2C++語言的基本符號二、基本符號的ASCII編碼P31例:charcl=‘a’;

inti=cl;

cout<<cl<<endl<<i;輸出結果:a97§2.3C++語言的辭彙一、關鍵字(保留字)關鍵字是一類有特定的專門含義的單詞。

在程式中用到的其他名字(識別字)不能與C/C++的關鍵字有相同的拼法和大小寫。關鍵字也不能重新定義。注§2.3C++語言的辭彙一、關鍵字(保留字)①C++的關鍵字一般包含了幾乎所有的C

語言的關鍵字說明②C++的關鍵字集是在不斷變化的③不同版本的C++的關鍵字集可能不同補充:基本關鍵字表asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatorprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchtemplatethisthrowtrytupedefunionunsignedvirtualvoidvolatilewhile§2.3C++語言的辭彙二、識別字識別字是由程式員為程式中的各種成份——

變數(shù),有名常量,用戶定義的類型,枚舉類型的值,函數(shù)及其參數(shù),類,對象等所起的名字。說明

識別字必須符合以下規(guī)則:§2.3C++語言的辭彙識別字必須符合的規(guī)則:1.不能是C++關鍵字,如for,if,case等不可作識別字;2.識別字中字母區(qū)分大小寫,如Abc與abc被認為是兩個不同的識別字。而關鍵字不區(qū)分大小寫,如for,F(xiàn)OR,F(xiàn)or,foR都認為是同一關鍵字;3.第一個字元必須是字母或下劃線;§2.3C++語言的辭彙識別字必須符合的規(guī)則:4.不要太長,一般不超過31個字元為宜(太長則書寫困難,反為不美);5.不能以數(shù)字開頭。如C5合法,而5C則為非法;6.中間不能有空格。如map合法,而map則為非法;§2.3C++語言的辭彙識別字必須符合的規(guī)則:7.變數(shù)名不能包含.;,”’+-之類的特殊符號。實際上,識別字中除了能使用26個英文字母的大小寫和數(shù)字之外,只能使用下劃線_。numberOfStudentnumOfStudentDx6y命名的方式決定了程式書寫的風格補充:介紹幾種常用的命名方式1.駱駝表示法:mycarmy_carmyCar易讀,但是下劃線書寫困難識別字中不能出現(xiàn)空格補充:介紹幾種常用的命名方式2.匈牙利標記法:iMycaripMycar表示整型指針變數(shù)表示整型變數(shù)在每個變數(shù)名的前面加上若干表示類型的字元§2.3C++語言的辭彙三、字面常量

常量:C++程式中的常量是指固定不變的量。字面常量有名常量例如:圓周率pai=3.1416Int型常量float型常量char型常量字串常量§2.3C++語言的辭彙三、字面常量即整型常量,可用3種形式表示:⑴Int型常量:①十進位整數(shù)。如123,-456,0,79834等。

如果某個整數(shù)超出了一般整數(shù)的表示範圍,系統(tǒng)可自動按長整型(longint)來處理。如79834L表示長整型。若此字面整數(shù)超出了長整型範圍,系統(tǒng)將發(fā)出警告。注§2.3C++語言的辭彙三、字面常量即整型常量,可用3種形式表示:⑴Int型常量:②八進制整數(shù)

以零開頭的整數(shù)表示八進制整數(shù)。如0123,表示(123)8。§2.3C++語言的辭彙三、字面常量即整型常量,可用3種形式表示:⑴Int型常量:③十六進制整數(shù)

以零和字母x開頭或以零和字母X開頭的整數(shù)表示十六進制整數(shù)。如0x123或0X123,表示(123)16?!?.3C++語言的辭彙三、字面常量即實型常量,實數(shù)在C++中就是浮點數(shù)。實數(shù)有2種表示:⑵float型常量:①定點數(shù)形式:如0.123,.456,0.0等。②指數(shù)形式:如123e5,123E5都表示123×105?!?.3C++語言的辭彙三、字面常量⑵float型常量:單精確度(float)48f或F尾碼34.5f

雙精度(double)810默認34.5

長雙精度

(longdouble)1019l或L尾碼34.5e2L種類佔用記憶體有效數(shù)字表示形式舉例§2.3C++語言的辭彙三、字面常量即字元常量,是用單引號括起來的一個字元。如‘a’,‘?’等。⑶char型常量:C++還允許使用一種特殊形式的字元常量,即以“\”開頭的字元序列,如‘\n’。注0表示一個整數(shù)值‘0’表示一個數(shù)字字元,其ASCII碼等於48或0x30。§2.3C++語言的辭彙三、字面常量即用雙引號括起來的字元序列。⑷字串常量:①字元常量和字串常量是不同的。說明HELLO‘\0’H§2.3C++語言的辭彙三、字面常量即用雙引號括起來的字元序列。⑷字串常量:②不能將字串常量賦給字元常量。例如:說明charc=“abc”;//error§2.3C++語言的辭彙三、字面常量即用雙引號括起來的字元序列。⑷字串常量:說明③單個字元的字串與字元在輸出的表示上沒有差別,因為字串輸出時,

C++並不把0結束符一同輸出。例如:cout<<“a”<<endl;cout<<‘a’<<endl;輸出結果為:aa§2.3C++語言的辭彙四、運算符說明①C++語言的運算符和運算形式很豐富,要尤其注意一些包含混和操作的運算符。如++、--、+=、-=等的功能和用法。②C++語言的某些運算符有多種含義。如*的用法。(第三章詳述)§2.4C++程式的基本框架一、SP框架main用戶定義函數(shù)全局變數(shù)庫函數(shù)入口出口

從結構設計的觀點,一個C++程式由下麵幾個部分組成:主函數(shù)、用戶定義函數(shù)、庫函數(shù)、全局說明。另外還包括預處理命令和注釋?!?.4C++程式的基本框架二、OOP框架

按照面向對象程式設計的思想,其主體是若干類定義的集合。理想的C++程式應由以下幾部分組成:類的定義主函數(shù)注釋預處理命令包括類的說明及類成員函數(shù)的類外定義程式的入口分佈於程式各處把程式檔劃分成若干.h和.cpp檔§2.5運行C++程式從C++根源程式到可執(zhí)行程式的步驟:

編輯、預處理、編譯、鏈接、調試C++根源程式C++預處理後的C++根源程式目標程式可執(zhí)行程式運行編輯器預處理器C++編譯器鏈接器程式員調試出錯資訊第三章基本數(shù)據類型與基本運算包含簡單計算的C++程式基本類型及其派生類型說明語句基本運算符§3.1包含簡單計算的C++程式一、程式實例:求和#include<iostream.h>voidmain(){inta,b,sum;//說明三個整型變數(shù)

a=43;b=37;//賦值語句

sum=a+b;//“+”、“=”是C++的算術運算符

cout<<“Thesumis”<<sum;cout<<endl;}P55§3.1包含簡單計算的C++程式二、程式實例:計算圓面積#include<iostream.h>voidmain(){constfloatpai=3.14;//說明浮點型常量

floatradius;cout<<“Enterradius:”;cin<<radius;floatarea=pai*radius*radius;//說明後即被賦值

cout<<“\nTheareaofcircleis”<<area<<endl;}P56§3.2基本類型及其派生類型一、C++的數(shù)據類型C++程式中的數(shù)據類型以如下不同類型的形式出現(xiàn):1.基本類型2.用戶定義類型3.導出類型

由系統(tǒng)定義。C++語言在int,float,char,void四種基本類型的基礎上又給出了若干類型的派生類型。

是OOP區(qū)別於一般SP語言的主要特徵之一。C++既可以定義象棧、佇列、集合、布爾類型等多種數(shù)據類型,又可以結合具體問題定義象學生、汽車等類型。

由已定義類型的某種確定的方式產生的新類型,主要指數(shù)組、指針和引用類型。§3.2基本類型及其派生類型二、C++的基本類型2.float型3.char型4.void型float型數(shù)據占4個位元組空間,取值範圍為-3.4E(+/-)38~3.4E(+/-)38,可應用於部分運算。char型數(shù)據占1個位元組空間,值集為全部基本字元,ASCII碼集或擴充ASCII碼集對應的全部符號。char型可看作是字元的整型,因此可參與的運算相當多。無值型。1.int型int型數(shù)據占2個位元組空間,取值範圍為-32768~32767,可參與幾乎所有的運算。§3.2基本類型及其派生類型2.float型3.char型4.void型說明1.int型①void指沒有數(shù)值的數(shù)據類型。沒有任何返回值的函數(shù)應被說明為void類型。如:

voidfn();

在函數(shù)體內,可以使用return語句,但return

之後不能有任何運算式

(C++對此檢查非常嚴格)②void也會出現(xiàn)在函數(shù)體說明中。如:

intg(void);

此語句說明g()是一個不需要任何入口參數(shù)的函數(shù),並且返回一個int類型的值。C++中,也可以寫成:intg();③不能把數(shù)據說明成void型,因為變數(shù)說明成沒有任何值是沒有意義的。④void型可以說明指針,

void指針在C++中是一種普通指針類型(傳統(tǒng)的C

中被當成字元指針),如

void*ptr;

指針ptr可以被賦給指向任何類型的指針。§3.2基本類型及其派生類型三、基本類型的派生類型

基本類型經過簡單的字長及範圍放大或縮小,就形成了基本類型的簡單派生類型。派生類型的說明符由int、float、char前面加上類型修飾符組成。類型修飾符包括:shortlongsignedunsingeddoubleP61§3.2基本類型及其派生類型四、enum類型enum類型又稱枚舉類型,它是一種由用戶參與定義的類型。其格式為:enum<enum類型名>{<枚舉值表>}<枚舉變數(shù)表>;enumcolor{red,blue,green,white};例§3.2基本類型及其派生類型四、enum類型⒈一個enum類型實際上是int型的一個子集,其每一個值代表一個整數(shù)。說明⒉幾個枚舉值全未賦值時,它們自左至右分別與整數(shù)0、1、…n-1相對應?!?.2基本類型及其派生類型四、enum類型⒊若第i個枚舉值賦常量值為整數(shù)m,則未賦值的後續(xù)枚舉值分別與整數(shù)m+1、

m+2對應,直到下一個賦了值的枚舉值或結束。說明enumcolor{red=100,blue=200,green,white=400};§3.2基本類型及其派生類型四、enum類型⒋枚舉類型的說明也可作為成組說明若幹整形符號常量的方法。說明⒌C++的enum類型只有一個賦值操作,不能進行任何算術運算,也不能通過強制類型轉換而直接給enum類型賦整數(shù)值?!?.2基本類型及其派生類型四、enum類型⒍定義了枚舉類型之後,枚舉變數(shù)的取值只能取枚舉類型定義時規(guī)定的值。說明colorpaint=green;colorpaint=200;//error§3.3說明語句一、語句2.運算式語句3.控制語句4.複合語句和空語句1.說明語句§3.3說明語句一、語句2.運算式語句3.控制語句4.複合語句和空語句1.說明語句對程式中所用到的名字識別字在使用前加以定義和說明,有的還同時給與初始化?!?.3說明語句一、語句2.運算式語句3.控制語句4.複合語句和空語句1.說明語句程式中要求電腦對數(shù)據進行處理和操作的語句?!?.3說明語句一、語句2.運算式語句3.控制語句4.複合語句和空語句1.說明語句程式中用來控制語句執(zhí)行次序的語句?!?.3說明語句一、語句2.運算式語句3.控制語句4.複合語句和空語句1.說明語句

複合語句是用“{”和“}”括起來的若干語句,又稱為“塊”或“塊語句”??照Z句是一個特殊的運算式語句,不做任何事情。§3.3說明語句二、常量和變數(shù)常量(constant):在程式執(zhí)行過程中其值不能改變的數(shù)據稱為常量。變數(shù)(variable):在程式執(zhí)行過程中其值可以改變的數(shù)據稱為變數(shù)?!?.3說明語句三、常量說明const<類型名><常量名>=<運算式>;例如:constintN=2000;constfloatpai=3.14159;§3.3說明語句三、常量說明例如:constfloatpai;pai=3.14159;//error說明⒈定義成const後的常量,程式中對其只能讀不能修改,由於不可修改,所以常量定義時必須初始化。§3.3說明語句三、常量說明例如:

constintnumber=max(8,3);//error

說明⒉常量名不能放在賦值語句的左邊。補充:關於#define

在編譯預處理命令中使用宏替換定義符號常量的方法與用const方式定義的方法有所不同:

#definepai3.14159;

宏替換是在編譯時把程式中出現(xiàn)的所有識別字pai都用3.14159來替換,僅僅是兩個字串的代換,並不是一個具有一定類型的常量名,隨後的編譯無法發(fā)現(xiàn)由它引起的數(shù)據類型誤用的錯誤?!?.3說明語句四、變數(shù)說明[<存儲類>]<類型名或類型定義><變數(shù)名表>;例如:

intsize,high,temp=37;staticlongsum;autofloatt=0.5;§3.3說明語句四、變數(shù)說明說明①在同一語句裏不能混合定義不同類型的變數(shù)。②存儲類:自動變數(shù)auto寄存器變數(shù)register靜態(tài)變數(shù)static外部變數(shù)extern缺省,按自動變數(shù)處理[<存儲類>]<類型名或類型定義><變數(shù)名表>;§3.3說明語句四、變數(shù)說明說明③類型名和類型定義不可缺省,用以指定數(shù)據類型。④變數(shù)名表:列出該說明語句所定義的同一類型的變數(shù)及其初值。其格式為:<變數(shù)名>[=<運算式>],<變數(shù)名表>[<存儲類>]<類型名或類型定義><變數(shù)名表>;§3.3說明語句四、變數(shù)說明1.全局變數(shù)和局部變數(shù)全局變數(shù):其說明語句不在任何一個類定義、函數(shù)定義和複合語句之內的變數(shù)。即包含在某一對“{”和“}”之外的變數(shù)。佔用記憶體的數(shù)據區(qū),在程式運行過程中位置不變?!?.3說明語句四、變數(shù)說明1.全局變數(shù)和局部變數(shù)局部變數(shù):其說明語句在某一類定義、函數(shù)定義和複合語句之內的變數(shù)。即包含在某一對“{”和“}”之內,所占空間為程式運行時設置的臨時工作區(qū),以堆疊的形式允許反復佔用和釋放?!?.3說明語句四、變數(shù)說明2.生存期與作用域生存期:變數(shù)a的生存期是指從a被說明且分配了記憶體開始,直到該說明語句失去效力,相應記憶體被釋放為止,稱為該變量的生存期。全局變數(shù)的生存期局部變數(shù)的生存期§3.3說明語句四、變數(shù)說明2.生存期與作用域作用域:變數(shù)a的作用域是指a可以代表該變量的範圍。#include<iostream.h>voidfn(inty)//y作用域開始{intx=1;//x作用域開始

if(x>y)cout<<x<<endl;elsecout<<y<<endl;}//x和y作用域結束例1描述作用域的概念#include<iostream.h>intid=3;voidmain(){id=5;{intid=7;cout<<“id=”<<id<<endl;//輸出7}cout<<“id=”<<id<<endl;//輸出5}例2不同作用域的同名變數(shù)#include<iostream.h>intn;voidfn(){cout<<“m=”<<m<<endl;//errorcout<<“n=”<<n<<endl;//ok}voidmain(){doublem=3.8;cout<<“n=”<<n<<endl;//okfn();}例3全局變數(shù)和局部變數(shù)§3.3說明語句四、變數(shù)說明3.變數(shù)的存儲類型⑴auto變數(shù)⑵register變數(shù)⑶static變數(shù)該變數(shù)在程式的臨時工作區(qū)中獲得存儲空間,為默認值。當寄存器夠用時,可以以寄存器作為存儲空間。⑷extern變數(shù)§3.3說明語句四、變數(shù)說明3.變數(shù)的存儲類型⑴auto變數(shù)⑵register變數(shù)⑶static變數(shù)靜態(tài)變數(shù)和全局變數(shù)一樣,在內存數(shù)據區(qū)分配空間,在整個程式運行中不釋放。說明②靜態(tài)變數(shù)如未賦初值,系統(tǒng)將自動為其賦默認初值0(NULL)。③靜態(tài)變數(shù)的說明語句在程式執(zhí)行過程中多次運行或多次被同樣說明時,其第一次稱為定義性說明,進行記憶體分配和賦初值操作,在以後的重複說明時僅維持原狀,不再做賦初值的操作。⑷extern變數(shù)//example1.cpp#include<iostream.h>intn;voidfn();voidmain(){n=20;cout<<n<<endl;fn();}//example2.cpp#include<iostream.h>staticintn;//全局靜態(tài)變數(shù)voidfn(){n++;cout<<n<<endl;}運行結果:201§3.3說明語句全局靜態(tài)變數(shù)使該變數(shù)成為定義該變數(shù)的原始檔案所獨享?!?.3說明語句四、變數(shù)說明3.變數(shù)的存儲類型⑴auto變數(shù)⑵register變數(shù)⑶static變數(shù)⑷extern變數(shù)①一般用於由多個檔組成的程式中,避免重複分配記憶體。帶extern的變數(shù)是變數(shù)聲明,不是變數(shù)定義。說明②如果共同變數(shù)一次都沒有定義,或者在各個檔中分別定義,造成定義多次,或者聲明的類型不一致,都會造成直接或間接的錯誤。例如://file1.cppinta=5;intb=6;externintc;//file2.cppinta;//error:多次定義externdoubleb;//error:類型不一致externintc;//error:無定義§3.3說明語句

兩個原始檔案都以常規(guī)方式定義變數(shù)a,沒有一個聲明extern,若在VC環(huán)境下,會在鏈接時,給出一個錯誤資訊:intaalreadydefinedinfile1.obj

兩個原始檔案的b類型不一致,VC在鏈接時報告一個錯誤資訊:linkerror:unresolvedexternal

兩個原始檔案都聲明了變數(shù)c為extern,這時編譯不會出錯,鏈接時卻會找不到該變數(shù),產生一個鏈接錯誤,因為沒有一個檔為該變數(shù)分配空間例1//file1.cpp#include<iostream.h>voidfn1();voidfn2();intn;voidmain(){n=3;fn1();cout<<n<<endl;}voidfn1(){fn2();}//file2.cppexternintn;//n由另一個源

//檔定義voidfn2(){n=8;//使用n}運行結果:8§3.3說明語句例2§3.3說明語句五、類型說明

作用:由用戶為一個已定義的類型賦予一個新的類型名。typedeftypedef<已定義類型名><新類型名>;typedefintid_number;typedeffloattemprature;例測試題

面向對象程式設計將數(shù)據與___放在一起,做為一個相互依存、不可分割的整體來處理。A對數(shù)據的操作B資訊C數(shù)據隱藏D數(shù)據抽象A2面向對象程式設計優(yōu)於傳統(tǒng)的結構化程式設計,其優(yōu)越性主要表現(xiàn)在,它有希望解決軟體工程的兩個主要問題:軟體複雜性控制和___。A精化已有的代碼B編寫可重用代碼C共用代碼D軟體生產率的提高D3C++對C語言作了很多改進,下列描述中___使得C語言發(fā)生了質變,即從面向過程變成了面向對象。A增加了一些新的運算符B允許函數(shù)重載,並允許設置默認參數(shù)C規(guī)定了函數(shù)說明必須用原型D引進了類和對象的概念D4在C語言中合法的字元型常量是___。A“A”B‘t’C65DAB字元常量是用單引號括起來的一個字元?!?.4基本運算符一、運算符和運算式的概念單目運算:<單目運算符><運算分量>或<運算分量><單目運算符>例如:-24,-a,i++雙目運算:三目運算:多目運算:雙目運算:單目運算:<左運算分量><雙目運算符><右運算分量>三目運算:雙目運算:條件運算符單目運算:多目運算:單目運算:三目運算:函數(shù)調用§3.4基本運算符二、賦值運算1.賦值運算是一種雙目運算,其形式為:〈變數(shù)名〉=〈運算式〉賦值運算的操作是:①計算運算式的值

②把該值賦給左端的變數(shù)例如:a=b+c*a§3.4基本運算符2.賦值縮寫,即複合賦值運算

當一變數(shù)既出現(xiàn)在運算式的左邊,又出現(xiàn)在運算式的右邊時,可以縮寫。x=x*y;x*=y;x=x+y;x+=y;二、賦值運算§3.4基本運算符三、算術運算1.增量和減量例如:i++;//等價於i=i+1;++i;//等價於i=i+1;a=i++;//等價於{a=i;i=i+1;}a=++i;//等價於{i=i+1;a=i;}增量首碼增量尾碼增量減量首碼減量尾碼減量++〈運算分量〉〈運算分量〉++--〈運算分量〉〈運算分量〉--§3.4基本運算符1.增量和減量inta=3;intb=++a;//相當於a=a+1;

b=a;

cout<<a<<“”<<b<<endl;intc=a++;//相當於c=a;a=a+1;

cout<<a<<“”<<c<<endl;例1輸出結果:4454三、算術運算§3.4基本運算符1.增量和減量例2輸出結果:2212inta=3;in

溫馨提示

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

評論

0/150

提交評論