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

下載本文檔

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

文檔簡介

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

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

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

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

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

<<稱為插入運算符例: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,實現(xiàn)回車換行操作,

cout<<endl;等效于cout<<“\n”;2.2C++方式的輸入與輸出(續(xù)1)5補充:iostream與iostream.h區(qū)別C++的標準類庫被修訂了兩次,有兩個標準C92和C99,這兩個庫現(xiàn)在都在并行使用:用.h包含的是c92不帶.h的是c99的頭文件對于普通用戶來說這兩者沒有什么區(qū)別,區(qū)別是在內(nèi)部函數(shù)的具體實現(xiàn)上。舊的C++頭文件是官方明確反對使用。6例:for(i=1;i<=3;i++)cout<<“count=“<<i<<endl;程序的輸出為:count=1count=2count=3輸出列寬控制:setw(整型表達式)頭文件iomanip.h將setw(n)插入到cout流,可以指定其后輸出的數(shù)據(jù)項的列數(shù),若數(shù)據(jù)項長度小于列寬,數(shù)據(jù)左邊補足空格,否則按實際位數(shù)輸出。例:cout<<“a=“<<setw(10)<<15;輸出結(jié)果為:a=15;2.2C++方式的輸入與輸出(續(xù)2)7二、用cin進行輸入語法格式:cin{>>變量名}*其中,>>稱為提取運算符例:floata;intb;cin>>a>>b;例:打印如左圖形到屏幕上,打印行數(shù)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注意:輸入的過程中,應(yīng)注意輸入的值與變量之間的對應(yīng)關(guān)系,包括數(shù)字部分和非數(shù)字部分、整數(shù)部分和小數(shù)部分等,不同數(shù)值之間也需要用空格分隔。對于輸出流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ù)類型名常量名=常量表達式;例:constdoublepi=3.1415926;constintn=10;floata[n];程序中不允許修改常量pi的值,因此,可視pi為符號常量。二、局部變量的定義可以與語句混合,且初始化可以用含有變量和函數(shù)調(diào)用的表達式例: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++擴展C的一些新特性10三、行注釋以//開頭至本行尾,都是程序注釋。如:voidmain()//Thisismainprogram.四、強制類型轉(zhuǎn)換

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

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

::對象名

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

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

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

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

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

float(*pt)[4]=newfloat[5][4];//建立5行4列二維實型數(shù)組2.3C++擴展C的一些新特性(續(xù)3)132.delete運算符syntax1:delete地址表達式;//撤銷單變量空間syntax2:delete[]地址表達式;//撤銷數(shù)組空間例3-2編程輸入整數(shù)n,然后輸入n個英文單詞,并按字典順序輸出這n個單詞。#include"iostream.h"#include"string.h"voidmain(){chars[81];intn;cout<<"Inputnumbersofwords:";cin>>n;char**w=newchar*[n];2.3C++擴展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++擴展C的一些新特性(續(xù)5)15七、變量的引用類型1.引用的概念“引用”(reference)是C++的一種新的變量類型,是對C的一個重要擴充。它的作用是為一個變量起一個別名。假如有一個變量a,想給它起一個別名b,可以這樣寫:inta;int&b=a;注意:經(jīng)過上述定義后,變量b并沒有開辟新的存貯空間,它和變量a都是同一個變量,有共同的存貯空間。2.引用類型作函數(shù)的形參例:實現(xiàn)兩個實型變量交換值的函數(shù)。2.3C++擴展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;}為什么不能實現(xiàn)主調(diào)程序兩個變量換值?1.5main-80.33xy1.5swap-80.33xy1.5-80.33函數(shù)調(diào)用swap(x,

y);2.3C++擴展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;}引用類型形參,可以實現(xiàn)主調(diào)程序兩個變量換值1.5main-80.33abxy函數(shù)調(diào)用swap(x,

y);引用類型形參的特點是不進行值傳遞,形參變量名只是實參變量名的代名字,在子函數(shù)中,形參變量發(fā)生改變,事實上是主調(diào)程序中對應(yīng)的實參變量發(fā)生了改變。2.3C++擴展C的一些新特性(續(xù)8)18voidmain(){doublea=-1.25,b=0.34;swap(&a,&b);cout<<a<<""<<b<<endl;}指針形參,可以實現(xiàn)主調(diào)程序兩個變量換值#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++擴展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++擴展C的一些新特性(續(xù)10)20問題與思考:在上例中,swap(a,b);可以寫成swap(-1.25,0.34);嗎?注意:引用只能針對單變量,不能針對數(shù)組進行。2.3C++擴展C的一些新特性(續(xù)11)21不可以。22八、變量初始化的兩種形式syntax1:

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

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

函數(shù)定義與使用

幾種特殊函數(shù)

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

函數(shù)的定義格式

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

函數(shù)體}

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

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

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

//調(diào)用內(nèi)聯(lián)函數(shù)求最大值,在編譯時就已經(jīng)被替換為了max的函數(shù)體,而不是本語句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帶默認形參值的函數(shù)

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

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

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

intarea(intl,intw=4);

intarea(intl=3,intw);

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

溫馨提示

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

評論

0/150

提交評論