面向?qū)ο蟪绦蛟O(shè)計(jì)-2_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-2_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-2_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-2_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-2_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)第2講

C++簡(jiǎn)單程序設(shè)計(jì)龔勛【xgong@】1一、C++的發(fā)展歷史

C++是在C語(yǔ)言的基礎(chǔ)上為支持面向?qū)ο蟮某绦蛟O(shè)計(jì)而研制的一個(gè)通用目的程序設(shè)計(jì)語(yǔ)言,它是在1980年由AT&T貝爾實(shí)驗(yàn)室的BjarneStroustrup博士創(chuàng)建的。最初的C++被稱為“帶類的C”,1983年正式取名為C++。C++語(yǔ)言的標(biāo)準(zhǔn)化工作從1989年開(kāi)始,于1994年制定了ANSIC++標(biāo)準(zhǔn)草案,以后又經(jīng)過(guò)了不斷完善至今。2.1C++概述2二、C++語(yǔ)言的特點(diǎn)

C++是一個(gè)更好的C,它保持了C的簡(jiǎn)潔、高效和接近匯編語(yǔ)言等特點(diǎn),對(duì)C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充,比C更安全,C++的編譯系統(tǒng)能檢查出更多的類型錯(cuò)誤。

C++完全兼容C,因此不是一個(gè)純的OOP語(yǔ)言,它既支持面向過(guò)程的程序設(shè)計(jì)方式,又支持OOP方式。三、C++源程序默認(rèn)的文件擴(kuò)展名為CPP。若使用C作為源程序擴(kuò)展名,C++編譯器將只按C語(yǔ)言規(guī)范進(jìn)行編譯,即擴(kuò)展名為C的源程序無(wú)法使用C++擴(kuò)展的新特性。2.1C++概述(續(xù)1完)3除了傳統(tǒng)的stdio.h頭文件中的輸入/輸出函數(shù)外,可用OOP方式的輸入/輸出流對(duì)象進(jìn)行輸入/輸出。輸入/輸出流對(duì)象頭文件為iostream.h。2.2C++方式的輸入與輸出4一、用cout進(jìn)行輸出語(yǔ)法格式:cout{<<表達(dá)式}*其中,{…}*表示{}中內(nèi)容可以重復(fù)1~若干次

<<稱為插入運(yùn)算符例:cout<<“Hello!\n”;

//輸出Hello!并換行

floata=3.45F;intb=5;charc=‘A’;cout<<“a=“<<a<<“,”<<“b=“<<b<<“,”<<“c=”<<c;

輸出結(jié)果是:a=3.45,b=5,c=A在iostream.h中定義了控制符endl,實(shí)現(xiàn)回車(chē)換行操作,

cout<<endl;等效于cout<<“\n”;2.2C++方式的輸入與輸出(續(xù)1)5補(bǔ)充:iostream與iostream.h區(qū)別C++的標(biāo)準(zhǔn)類庫(kù)被修訂了兩次,有兩個(gè)標(biāo)準(zhǔn)C92和C99,這兩個(gè)庫(kù)現(xiàn)在都在并行使用:用.h包含的是c92不帶.h的是c99的頭文件對(duì)于普通用戶來(lái)說(shuō)這兩者沒(méi)有什么區(qū)別,區(qū)別是在內(nèi)部函數(shù)的具體實(shí)現(xiàn)上。舊的C++頭文件是官方明確反對(duì)使用。6例:for(i=1;i<=3;i++)cout<<“count=“<<i<<endl;程序的輸出為:count=1count=2count=3輸出列寬控制:setw(整型表達(dá)式)頭文件iomanip.h將setw(n)插入到cout流,可以指定其后輸出的數(shù)據(jù)項(xiàng)的列數(shù),若數(shù)據(jù)項(xiàng)長(zhǎng)度小于列寬,數(shù)據(jù)左邊補(bǔ)足空格,否則按實(shí)際位數(shù)輸出。例:cout<<“a=“<<setw(10)<<15;輸出結(jié)果為:a=15;2.2C++方式的輸入與輸出(續(xù)2)7二、用cin進(jìn)行輸入語(yǔ)法格式:cin{>>變量名}*其中,>>稱為提取運(yùn)算符例:floata;intb;cin>>a>>b;例:打印如左圖形到屏幕上,打印行數(shù)n由鍵盤(pán)輸入。*************************#include"iostream.h"#include"iomanip.h"voidmain(){inti,j,n;cout<<"Inputn=";cin>>n;for(i=1;i<=n;i++){cout<<setw(n-i+1);for(j=1;j<=2*i-1;j++)cout<<"*";cout<<endl;}}2.2C++方式的輸入與輸出(續(xù)3)8注意:輸入的過(guò)程中,應(yīng)注意輸入的值與變量之間的對(duì)應(yīng)關(guān)系,包括數(shù)字部分和非數(shù)字部分、整數(shù)部分和小數(shù)部分等,不同數(shù)值之間也需要用空格分隔。對(duì)于輸出流cout,雖然從表面上看其輸出順序是從左到右,但處理順序則是從右到左的。例:輸出流cout處理順序和輸出順序charf(){cout<<"A";return'B';}charg(){cout<<"C";return'D';}voidmain(){cout<<"E"<<f()<<g();}2.2C++方式的輸入與輸出(續(xù)4完)最后結(jié)果為CAEBD9一、const型常量syntax:const數(shù)據(jù)類型名常量名=常量表達(dá)式;例:constdoublepi=3.1415926;constintn=10;floata[n];程序中不允許修改常量pi的值,因此,可視pi為符號(hào)常量。二、局部變量的定義可以與語(yǔ)句混合,且初始化可以用含有變量和函數(shù)調(diào)用的表達(dá)式例:voidmain(){intn;cin>>n;ints=0;

for(inti=1;i<=n;i++)s+=i;

cout<<“s=“<<s<<endl;intk=-s;cout<<k<<endl;}//局部變量的作用域從定義位置起至本模塊結(jié)束2.3C++擴(kuò)展C的一些新特性10三、行注釋以//開(kāi)頭至本行尾,都是程序注釋。如:voidmain()//Thisismainprogram.四、強(qiáng)制類型轉(zhuǎn)換

syntax1:(類型名)表達(dá)式syntax2:類型名(表達(dá)式)例:寫(xiě)一個(gè)表達(dá)式,求一個(gè)實(shí)型變量x的小數(shù)部分

x-int(x)//int(…)是截尾取整2.3C++擴(kuò)展C的一些新特性(續(xù)1)11五、取全局對(duì)象運(yùn)算符syntax:

::對(duì)象名

//功能:訪問(wèn)全局對(duì)象例:floata=13.5F;voidmain(){inta=5;cout<<a<<endl;cout<<::a<<endl;}

上面的程序使用::a,使得在主函數(shù)中可以訪問(wèn)全局變量a,該程序的輸出是:513.5注意:不能用::運(yùn)算符訪問(wèn)函數(shù)中的局部變量。2.3C++擴(kuò)展C的一些新特性(續(xù)2)12六、內(nèi)存動(dòng)態(tài)分配與撤銷運(yùn)算符new與delete1.new運(yùn)算符按照指定要求,分配內(nèi)存,返回內(nèi)存塊的首地址,分配失敗,返回NULL指針。syntax1:

new類型名;//單變量指針syntax2:new類型名(初值)//單變量指針syntax3:new類型名{[元素個(gè)數(shù)]}*

//數(shù)組指針例:int*p=newint;//分配4字節(jié),以存放一個(gè)整數(shù)

int*q=newint(100);//對(duì)象*p的初值為100char*s=newchar[10];//建立10元字符數(shù)組

float(*pt)[4]=newfloat[5][4];//建立5行4列二維實(shí)型數(shù)組2.3C++擴(kuò)展C的一些新特性(續(xù)3)132.delete運(yùn)算符syntax1:delete地址表達(dá)式;//撤銷單變量空間syntax2:delete[]地址表達(dá)式;//撤銷數(shù)組空間例3-2編程輸入整數(shù)n,然后輸入n個(gè)英文單詞,并按字典順序輸出這n個(gè)單詞。#include"iostream.h"#include"string.h"voidmain(){chars[81];intn;cout<<"Inputnumbersofwords:";cin>>n;char**w=newchar*[n];2.3C++擴(kuò)展C的一些新特性(續(xù)4)14cout<<"Input"<<n<<"words:"<<endl;for(inti=0;i<n;i++){cin>>s;w[i]=newchar[strlen(s)+1];strcpy(w[i],s);}for(i=0;i<n-1;i++)for(intj=0;j<n-1-i;j++)if(strcmp(w[j],w[j+1])>0) {char*p=w[j];w[j]=w[j+1];w[j+1]=p;}for(i=0;i<n;i++){cout<<w[i]<<"";delete[]w[i];}cout<<endl;delete[]w;}2.3C++擴(kuò)展C的一些新特性(續(xù)5)15七、變量的引用類型1.引用的概念“引用”(reference)是C++的一種新的變量類型,是對(duì)C的一個(gè)重要擴(kuò)充。它的作用是為一個(gè)變量起一個(gè)別名。假如有一個(gè)變量a,想給它起一個(gè)別名b,可以這樣寫(xiě):inta;int&b=a;注意:經(jīng)過(guò)上述定義后,變量b并沒(méi)有開(kāi)辟新的存貯空間,它和變量a都是同一個(gè)變量,有共同的存貯空間。2.引用類型作函數(shù)的形參例:實(shí)現(xiàn)兩個(gè)實(shí)型變量交換值的函數(shù)。2.3C++擴(kuò)展C的一些新特性(續(xù)6)16voidmain(){doublex=1.5,y=80.33;swap(x,y);printf("x=%.2f,y=%.2f\n",x,y);}voidswap(doublex,doubley){doublet=x;x=y;y=t;}為什么不能實(shí)現(xiàn)主調(diào)程序兩個(gè)變量換值?1.5main-80.33xy1.5swap-80.33xy1.5-80.33函數(shù)調(diào)用swap(x,

y);2.3C++擴(kuò)展C的一些新特性(續(xù)7)17voidmain(){doublea=-1.25,b=0.34;swap(a,b);cout<<a<<""<<b<<endl;}#include"iostream.h"voidswap(double&x,double&y){doublet=x;x=y;y=t;}引用類型形參,可以實(shí)現(xiàn)主調(diào)程序兩個(gè)變量換值1.5main-80.33abxy函數(shù)調(diào)用swap(x,

y);引用類型形參的特點(diǎn)是不進(jìn)行值傳遞,形參變量名只是實(shí)參變量名的代名字,在子函數(shù)中,形參變量發(fā)生改變,事實(shí)上是主調(diào)程序中對(duì)應(yīng)的實(shí)參變量發(fā)生了改變。2.3C++擴(kuò)展C的一些新特性(續(xù)8)18voidmain(){doublea=-1.25,b=0.34;swap(&a,&b);cout<<a<<""<<b<<endl;}指針形參,可以實(shí)現(xiàn)主調(diào)程序兩個(gè)變量換值#include"iostream.h"voidswap(double*p,double*q){doublet=*p;*p=*q;*q=t;}1.5main-80.33ab&xswap&ypqx的地址y的地址函數(shù)調(diào)用swap(&a,&b);paqb2.3C++擴(kuò)展C的一些新特性(續(xù)9)19例

字符串逆序存貯。#include"iostream.h"#include"string.h"voidswap(char&a,char&b){chart=a;a=b;b=t;}voidreverse(char*s){char*p=s,*q=s+strlen(s)-1;while(p<q)swap(*p++,*q--);}voidmain(){chars[80];cout<<"Inputastring:";cin>>s;reverse(s);cout<<"Reversedstringis:"<<s;}2.3C++擴(kuò)展C的一些新特性(續(xù)10)20問(wèn)題與思考:在上例中,swap(a,b);可以寫(xiě)成swap(-1.25,0.34);嗎?注意:引用只能針對(duì)單變量,不能針對(duì)數(shù)組進(jìn)行。2.3C++擴(kuò)展C的一些新特性(續(xù)11)21不可以。22八、變量初始化的兩種形式syntax1:

數(shù)據(jù)類型名變量名=表達(dá)式;syntax2:

數(shù)據(jù)類型名變量名(表達(dá)式);例:inta=5;doublex=1.25;C++中,還可寫(xiě)為inta(5);doublex(1.25);2.3C++擴(kuò)展C的一些新特性(續(xù)12完)C++繼承了C語(yǔ)言的全部語(yǔ)法,包括函數(shù)定義和使用方法。在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)中,函數(shù)是模塊劃分的基本單位,是對(duì)處理問(wèn)題過(guò)程的一種抽象。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,函數(shù)同樣重要,它是面向?qū)ο蟪绦蛟O(shè)計(jì)中對(duì)功能的抽象。要求掌握:第三章函數(shù)

函數(shù)定義與使用

幾種特殊函數(shù)

函數(shù)的重載233.1函數(shù)的定義和使用一、函數(shù)的定義

函數(shù)的定義格式

類型修飾符函數(shù)名(形式參數(shù)表){

函數(shù)體}

243.1函數(shù)的定義和使用(續(xù)1)

聲明與定義區(qū)別:聲明是向編譯器介紹名字——標(biāo)識(shí)符。它告訴編譯器“這個(gè)函數(shù)或這個(gè)變量在某處可找到,它的模樣像什么”。定義是說(shuō):“在這里建立變量”或“在這里建立函數(shù)”。它為名字分配存儲(chǔ)空間。無(wú)論定義的是函數(shù)還是變量,編譯器都要為它們?cè)诙x點(diǎn)分配存儲(chǔ)空間。對(duì)于變量,編譯器確定變量的大小,然后在內(nèi)存中靠開(kāi)辟空間來(lái)保存變量的數(shù)據(jù)。對(duì)于函數(shù),編譯器會(huì)生成代碼,這些代碼最終也要占用一定的內(nèi)存。25二、函數(shù)的調(diào)用函數(shù)調(diào)用格式及調(diào)用方式函數(shù)聲明:調(diào)用函數(shù)之前先要在主調(diào)函數(shù)中聲明函原型。在主調(diào)函數(shù)中,或所有函數(shù)之前,按如下形式聲明:類型說(shuō)明符被調(diào)函數(shù)名(含類型說(shuō)明的形參表)函數(shù)調(diào)用:聲明了函數(shù)原型之后,就可以按下面的形式來(lái)調(diào)用子函數(shù)。函數(shù)調(diào)用的一般格式:函數(shù)名(實(shí)參列表)3.1函數(shù)的定義和使用(續(xù)2完)263.2內(nèi)聯(lián)函數(shù)1、內(nèi)聯(lián)函數(shù)定義在一般函數(shù)定義前面加上保留關(guān)鍵字inline,該函數(shù)即被說(shuō)明為內(nèi)聯(lián)函數(shù)。例如:inlineintadd2(intn){returnn+2;}

對(duì)于內(nèi)聯(lián)函數(shù),C++有可能直接用函數(shù)體代碼來(lái)替代對(duì)函數(shù)的調(diào)用,這一過(guò)程稱為函數(shù)體的內(nèi)聯(lián)展開(kāi)。27不能有循環(huán)、switch等例:#include<iostream.h>inlinefloatmax(floata,floatb)//內(nèi)聯(lián)函數(shù),計(jì)算最大值{…}voidmain(){floatscore[2];//存放2個(gè)學(xué)生的分?jǐn)?shù)floatmax_score;max_score=max(score[0],score[1]);

//調(diào)用內(nèi)聯(lián)函數(shù)求最大值,在編譯時(shí)就已經(jīng)被替換為了max的函數(shù)體,而不是本語(yǔ)句cout<<“maxscore=”<<max_score<<endl;}3.2內(nèi)聯(lián)函數(shù)(續(xù)1完)28討論:inline應(yīng)該放在哪里//a.hinlinevoidfoo(void);//a.cinlinevoidfoo(void){}//b.c#include"a.h"voidbar(void){foo();}這種用法inline是不起任何作用的只有這樣://a.hinlinevoidfoo(void){}//b.c#include"a.h"voidbar(void){foo();}這樣才能真正的內(nèi)聯(lián);內(nèi)聯(lián)是在編譯期間處理的293.3帶默認(rèn)形參值的函數(shù)

函數(shù)在定義時(shí)可以預(yù)先定義出默認(rèn)的形參值。調(diào)用時(shí)如果給出實(shí)參,則用實(shí)參初始化形參;如果沒(méi)有給出實(shí)參,則采用預(yù)先定義的默認(rèn)形參值。

例:intarea(intl=5,intw=5){returnl*w;}voidmain(){area();//采用默認(rèn)值5和5進(jìn)行計(jì)算,返回結(jié)果25;area(10,2);//實(shí)參10和2傳遞給形參,返回結(jié)果20;area(2);//將值2傳遞給形參l,w采用默認(rèn)值5,返回值10;}30注意:

形參默認(rèn)值應(yīng)在函數(shù)原型中給出(而不是在函數(shù)體中給出)默認(rèn)形參值必須按照從右向左順序定義。調(diào)用時(shí),實(shí)參按從左向右順序初始化形參。(即如果有三個(gè)形參,實(shí)參為一個(gè)時(shí),則會(huì)初始化第一個(gè)形參,而另外兩個(gè)要采用默認(rèn)值…)。所以,在有默認(rèn)值的形參右邊,不能出現(xiàn)無(wú)默認(rèn)值的形參。3.3帶默認(rèn)形參值的函數(shù)(續(xù)1)313.3帶默認(rèn)形參值的函數(shù)(續(xù)2完)例:判斷以下用法是否正確?

intarea(intl,intw=4);

intarea(intl=3,intw);

intarea(intl=3,intw,inth=9);!錯(cuò)誤,這樣如果調(diào)用時(shí)為area(10),則10會(huì)賦值給l,而w得不到初始值,編譯錯(cuò)誤(mis

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論