c++的初步知識(shí)課件_第1頁(yè)
c++的初步知識(shí)課件_第2頁(yè)
c++的初步知識(shí)課件_第3頁(yè)
c++的初步知識(shí)課件_第4頁(yè)
c++的初步知識(shí)課件_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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)介

Object-Oriented

Programming

inC++

第一章C++的初步知識(shí)第一章C++的初步知識(shí)第二章類和對(duì)象第三章再論類和對(duì)象第四章運(yùn)算符重載第五章繼承與派生第六章多態(tài)性與虛函數(shù)第七章輸入輸出流第八章C++工具參考教材選用教材

《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》譚浩強(qiáng)參考教材《C++語(yǔ)言基礎(chǔ)教程》呂鳳翥編著參考教材《C++程序設(shè)計(jì)教程》錢能主編

英文教材《ProgramminginC++》(SE)高等教育出版社1.1

C++程序結(jié)構(gòu)的特點(diǎn)

一個(gè)示范程序

程序的組成部分

程序的書寫格式一個(gè)C++的示范程序/*ThisisasimpleCppprogram*/#include<iostream.h>//文件包含voidmain()

//主函數(shù)頭

{//主函數(shù)體

doublex,y;//變量說(shuō)明

cout<<"Entertwofloatnumber:";//輸出數(shù)據(jù)

cin>>x>>y;//輸入數(shù)據(jù)

doublez=x+y;//定義并賦值

cout<<"x+y="<<z<<endl;//輸出數(shù)據(jù)}任何變量都必須先說(shuō)明后使用執(zhí)行結(jié)果為:

Entertwofloatnumber:34<enter>x+y=7C語(yǔ)言中,用#define定義常量:

#definePI3.14159 #defineRa+b

它只是在預(yù)編譯時(shí)進(jìn)行字符置換,將標(biāo)識(shí)符置換成表達(dá)式或數(shù)字。預(yù)編譯后,標(biāo)識(shí)符PI,R不再存在。PI,R不是變量,沒(méi)有類型,不占用存儲(chǔ)單元,很容易出錯(cuò):

inta=1;b=2; #definePI3.14159 #defineRa+b cout<<PI*R*R;

輸出的不是3.14159*(a+b)*(a+b),而是3.14159*a+b*a+b。 程序因此出錯(cuò)。1.2用const定義常變量1.3函數(shù)原型申明C++強(qiáng)制規(guī)定,如果函數(shù)調(diào)用的位置在函數(shù)定義之前,則在調(diào)用函數(shù)之前必須實(shí)現(xiàn)作函數(shù)原型申明。這一點(diǎn)與C不同,C只是建議,而沒(méi)有強(qiáng)制函數(shù)申明的一般形式為: 函數(shù)類型函數(shù)名(參數(shù)表);最后的分號(hào)可不能忘了,否則出錯(cuò)!參數(shù)表中可以只指定各個(gè)參數(shù)的類型,而不指定參數(shù)名!函數(shù)申明和定義的示例//求圓面積,將函數(shù)申明和定義分開,在調(diào)用函數(shù)前先申明它#include<iostream>floatarea(float);//先申明voidmain(){floatradius;cout<<“Pleaseinputradius:“;cin>>radius;if(radius>0)cout<<area(radius)<<endl;

//再使用}floatarea(floatr)//最后定義{returnr*r*3.14159;}程序可以改為如下形式:#include<iostream>floatarea(floatr){returnr*r*3.14159;}//先申明main(){floatradius;cout<<“Pleaseinputradius:“;cin>>radius;if(radius>0)cout<<area(radius)<<endl;

//再使用}而C++的做法是重載:將這三個(gè)函數(shù)名取相同的名字,程序運(yùn)行時(shí),系統(tǒng)會(huì)根據(jù)實(shí)際參數(shù)的不同,調(diào)用相近參數(shù)的函數(shù):#include<iostream>intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}floatmax(floata,floatb){if(b>a)a=b;returna;}longmax(longa,longb,longc){if(b>a)a=b;if(c>a)a=c;returna;}voidmain(){inta,b,c,d;floatx,y,z;longm,n,p,q;cin>>a>>b>>c;cin>>x>>y;cin>>m>>n>>p;d=max(a,b,c);cout<<“int_d=“<<d<<endl;z=max(x,y);cout<<“float_z=“<<z<<endl;q=max(m,n,p);cout<<“l(fā)ong_q=“<<q<<endl;}Main函數(shù)三次調(diào)用max函數(shù),每次實(shí)參的個(gè)數(shù)或類型不同,系統(tǒng)會(huì)尋找與之匹配的函數(shù)調(diào)用。1.5函數(shù)模板什么時(shí)候使用模板?重載函數(shù)的不便之處在于,對(duì)于同名的函數(shù)要一個(gè)一個(gè)地編寫,編碼量很大。對(duì)于有些相同功能的函數(shù),如果函數(shù)個(gè)數(shù)相同,可以用另外的方法來(lái)解決,這就是模板(Template)。函數(shù)模板的定義形式:

Template<類型參數(shù)表>

返回類型函數(shù)模板名(數(shù)據(jù)參數(shù)表) {函數(shù)模板定義體 }示例:將上述重載示例改為函數(shù)模板。#include<iostream>usingnamespacestd;//默認(rèn)使用std標(biāo)準(zhǔn)庫(kù)名

template<typenameT>;Tmax(Ta,Tb,Tc)//建立函數(shù)模板時(shí),只需要{if(b>a)a=b;//將函數(shù)類型、參數(shù)類型int換成T就行。if(c>a)a=c;//即用虛擬的類型名T代替實(shí)際的類型returna;}voidmain(){inti=8,j=3,k=4,h;longm=1,n=2,p=3,q;h=max(i,j,k);q=max(m,n,p);cout<<“int_h=“<<h<<endl;cout<<“l(fā)ong_q=“<<q<<endl;}類型參數(shù)可以有多個(gè):template<typenameT1,typenameT2>1.6有默認(rèn)參數(shù)的函數(shù)背景:一般情況下,函數(shù)調(diào)用時(shí),形參從實(shí)參那里取得值。因此要求實(shí)參的個(gè)數(shù)和類型應(yīng)該與形參相同。但是,有時(shí)候,多次調(diào)用同一函數(shù)時(shí)用的是同一實(shí)參數(shù),或者調(diào)用時(shí)還不好確定實(shí)參數(shù)。C++提供一個(gè)簡(jiǎn)單的解決辦法,即給參數(shù)一默認(rèn)值。這樣當(dāng)不提供實(shí)參數(shù)時(shí),形參就用默認(rèn)參數(shù)作為參數(shù)值。示例:有一函數(shù)聲明為:

floatarea(floatr=6.5); 調(diào)用area函數(shù)時(shí),如果不提供實(shí)際參數(shù)給r,r就以默認(rèn)數(shù)值6.5作為參數(shù)頂用area: area();//相當(dāng)于area(6.5);注意: 1)當(dāng)有多個(gè)參數(shù)時(shí),如果只有部分參數(shù)有默認(rèn)值,則指定了默認(rèn)值的參數(shù)必須放在參數(shù)表的最右邊,否則出錯(cuò)。因?yàn)閷?shí)參與形參的結(jié)合是從左至右順序進(jìn)行的,第一個(gè)實(shí)參必須給第一個(gè)形參,第二個(gè)實(shí)參必須給第二個(gè)形參…。1.6有默認(rèn)參數(shù)的函數(shù)聲明: voidarea(floatx1,intx2=1,charx3=‘a(chǎn)’);調(diào)用:area(1.2,3,‘b’);//形參值全部由實(shí)參得到

area(1.2,3);//最后一個(gè)參數(shù)取自默認(rèn)值

area(1.2);//最后兩個(gè)參數(shù)取自默認(rèn)值area();//出錯(cuò),第一個(gè)形參沒(méi)有實(shí)參,也沒(méi)有默認(rèn)值2)一個(gè)函數(shù)不能既作為重載函數(shù),又作為默認(rèn)參數(shù)函數(shù)。因?yàn)楫?dāng)調(diào)用函數(shù)時(shí)如果少寫一實(shí)際個(gè)參數(shù),系統(tǒng)無(wú)法判斷是利用重載函數(shù)還是利用默認(rèn)參數(shù)函數(shù)。1.7變量的引用(reference)什么叫引用?變量的引用就是變量的別名。建立引用的作用,是為一個(gè)變量另取一個(gè)名字,以便在需要的時(shí)候間接地引用該別名。如何使用引用?假如有一個(gè)變量a,想給它另取一個(gè)別名b,可以這樣寫: inta;

int&b=a;//聲明b是一個(gè)整形變量的引用變量,并且被初始化為a此處&不代表取地址,,只是“引用聲明符”。對(duì)一個(gè)變量聲明一個(gè)引用,并不另外開辟內(nèi)存空間。b和a代表同一個(gè)變量單元。引用不是獨(dú)立的變量,編譯系統(tǒng)不給它分配存儲(chǔ)單元。因此建立引用只有聲明,沒(méi)有定義,只是聲明和某一個(gè)變量的關(guān)系。示例:

#include<iostream> usingnamespacestd; voidmain() {inta=10; int&b=a; a=a*a; cout<<“b=“<<b<<endl; }運(yùn)行結(jié)果:b=1001.7變量的引用(reference)將引用作為函數(shù)參數(shù):C++之所以增加“引用”,主要是利用它作為函數(shù)參數(shù),以彌補(bǔ)函數(shù)傳遞參數(shù)的不方便的遺憾。也降低了編程難度。將變量名作為實(shí)參:這時(shí)傳給形參的是變量的值,傳遞是單向的,函數(shù)運(yùn)行時(shí),形參發(fā)生變化,并不回傳給實(shí)參。因?yàn)樾螀⒑蛯?shí)參不是同一個(gè)存儲(chǔ)單元。請(qǐng)看下面示例:1.7變量的引用(reference)#include<iostream>voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;}voidmain(){inti=3,j=5;swap(i,j);cout<<i<<“,”<<j<<endl;}運(yùn)行結(jié)果,i,j仍然是3,5。沒(méi)有發(fā)生交換。傳遞變量的指針:這時(shí)傳給形參的是變量的地址,形參得到一個(gè)變量的地址,即形參指針變量指向?qū)崊⒆兞繂卧?。函?shù)中形參發(fā)生改變,實(shí)際上是改變實(shí)參。這種方法實(shí)際上仍然是值傳遞:想指針變量傳遞地址值。然后通過(guò)指針變量訪問(wèn)有關(guān)變量?!伴g接地”回傳了改變的變量。請(qǐng)看下面示例:1.7變量的引用(reference)#include<iostream>voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidmain(){inti=3,j=5;swap(&i,&j);cout<<i<<“,”<<j<<endl;}運(yùn)行結(jié)果,i,j是5,3。變量值發(fā)生交換。如何理解引用?我們從物理實(shí)現(xiàn)上來(lái)理解,引用是一個(gè)隱性指針,即引用值是引自所指向的實(shí)體。這就是引用的真意。高級(jí)編程(面向應(yīng)用)多用引用,低級(jí)編程(面向機(jī)器)多用指針。對(duì)引用的說(shuō)明:不能建立void類型的引用。因?yàn)槿魏螌?shí)際存在的變量都屬于非void類型。void&a=9;//錯(cuò)誤不能對(duì)數(shù)組名進(jìn)行引用,因?yàn)閿?shù)組名是首地址本身不占有存儲(chǔ)空間。

charc[6]=“hello”; char&r=c;//錯(cuò)誤可以建立指針變量的引用:

inti=5; int*p=&i;//定義指針變量p,指向i

int*&t=p;//t是指向整形變量的指針變量的引用,初始化為p.1.7變量的引用(reference)可以將引用的地址賦給指針。此時(shí),指針指向原來(lái)變量:

inta=3; int&b=a; int*p=&b;//指針p指向變量a的引用b,相當(dāng)與指向a不能定義指向引用類型的指針變量:

int&*p=&a;//錯(cuò)誤可以用常量或表達(dá)式對(duì)引用初始化,但必須用const限定:

constint&c=3;//合法1.7變量的引用(reference)內(nèi)聯(lián)函數(shù)還有限制:函數(shù)內(nèi)不能含有循環(huán)結(jié)構(gòu)或switch結(jié)構(gòu);不能含有任何靜態(tài)數(shù)據(jù)及數(shù)組聲明。不能是遞歸函數(shù)。1.8內(nèi)聯(lián)函數(shù)(inlinefunction)標(biāo)識(shí)符只能在說(shuō)明它或定義它的范圍內(nèi)是可見的,而在該范圍之外是不可見的。大多數(shù)標(biāo)識(shí)符的說(shuō)明與定義是一致的,只有少數(shù)例外。如:函數(shù)等。范圍有大有小。最大為整個(gè)程序,最小為塊,中間有文件和函數(shù)。每一個(gè)變量都有自己的有效范圍。我們只能在變量的作用域內(nèi)使用該變量。不能直接使用其它作用域中的變量。如果要使用其它作用域中的同名變量,必須使用“作用域運(yùn)算符”,即“::”。1.9作用域運(yùn)算符

請(qǐng)看示例:

#include<iostream.h> floata=1.5; voidmain() {inta=5; cout<<a<<endl;//輸出作用域?yàn)閙ain函數(shù)的局部變量a的值 cout<<::a<<endl;//輸出作用域?yàn)槿值娜肿兞縜的值 }運(yùn)行結(jié)果:51.5注意:不能用作用域運(yùn)算符“::”訪問(wèn)函數(shù)中的局部變量。1.9作用域運(yùn)算符局部變量和全局變量1、局部變量是指作用域在函數(shù)級(jí)和塊級(jí)的變量。2、全局變量是指作用域在程序級(jí)和文件級(jí)的變量。#include<iostream.h>inti(5);

//外部全局變量externvoidfunc(){cout<<i<<endl;}voidmain(){

inti=3;//內(nèi)部局部變量func();cout<<i<<endl;}局部變量全局變量藍(lán)色為文件作用域綠色為函數(shù)作用域1.10字符串變量

C++除了可以使用C語(yǔ)言提供的字符型變量和字符型數(shù)組外,還提供了字符串類。這種類可以定義字符串對(duì)象。但在文件開頭必須包含string庫(kù):#include<string.h>字符串定義:

strings1;//定義字符串變量s1 strings2=“China”;//定義字符串變量s2并初始化字符串賦值:可以對(duì)定義了的字符串變量進(jìn)行賦值:

s1=“Hello”; s2=s1; s3=s1+s2;//字符串連接字符串變量的輸入輸出:

stringc1; cin>>c1; cout<<c1;字符串比較:可以使用==,!=,>=,<=來(lái)進(jìn)行字符串的比較1.10字符串變量字符串?dāng)?shù)組:也可以直接定義字符串?dāng)?shù)組:

stringname[4]={“張三”,”李四”,”王五”,”劉六”};

運(yùn)行結(jié)果為:

name[0]=“張三“;

name[1]=“李四”; name[2]=“王五”; name[3]=“劉六”;1.10字符串變量示例:從鍵盤輸入3個(gè)字符串,并按字典順序輸出:#include<iostream>#include<string>usingnamespacestd;voidmain(){strings1,s2,s3,temp;cin>>s1>>s2>>s3;if(s2>s3){temp=s2;s2=s3;s3=temp;}if(s1>s2){temp=s1;s1=s2;s2

溫馨提示

  • 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)論