




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)管理人員安全培訓(xùn)考試試題黃金題型
- 2024-2025新員工崗前安全培訓(xùn)考試試題含答案【黃金題型】
- 2025年廠級(jí)員工安全培訓(xùn)考試試題答案
- 2025管理人員崗前安全培訓(xùn)考試試題附答案【基礎(chǔ)題】
- 2025年崗位安全培訓(xùn)考試試題典型題
- 2025安全培訓(xùn)考試試題及答案考試直接用
- 2025公司員工安全培訓(xùn)考試試題1套
- 2025年新入職員工安全培訓(xùn)考試試題附答案【綜合題】
- 2025年安全管理人員安全培訓(xùn)考試試題一套
- 2025-2030年中國(guó)PVC糊樹脂市場(chǎng)需求動(dòng)態(tài)及未來(lái)發(fā)展趨勢(shì)研究報(bào)告
- 2024年貴航貴陽(yáng)醫(yī)院招聘筆試真題
- 湖南省名校聯(lián)考聯(lián)合體2024-2025學(xué)年高一下學(xué)期期中考試地理試題 含答案
- 2025春粵教粵科版(2024)小學(xué)科學(xué)一年級(jí)下冊(cè)(全冊(cè))教案、教學(xué)反思、教學(xué)計(jì)劃(附教材目錄P103)
- 福建事業(yè)單位考試求職信撰寫技巧試題及答案
- 2025-2030中國(guó)金融云行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資前景研究報(bào)告
- 2025年陜西高中學(xué)業(yè)水平合格考數(shù)學(xué)試卷及答案
- 2025年天津市紅橋區(qū)中考第一次模擬考試物理試卷(含答案)
- 大學(xué)生就業(yè)形勢(shì)與就業(yè)政策課件
- 2025河北省國(guó)內(nèi)旅游組團(tuán)合同示范文本
- 氧氣吸入操作評(píng)分標(biāo)準(zhǔn)(中心供氧)
- (高清版)JTGT 3360-01-2018 公路橋梁抗風(fēng)設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論