版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Object-Oriented
Programming
inC++
第一章C++的初步知識第一章C++的初步知識第二章類和對象第三章再論類和對象第四章運算符重載第五章繼承與派生第六章多態(tài)性與虛函數(shù)第七章輸入輸出流第八章C++工具參考教材選用教材
《C++面向?qū)ο蟪绦蛟O(shè)計》譚浩強參考教材《C++語言基礎(chǔ)教程》呂鳳翥編著參考教材《C++程序設(shè)計教程》錢能主編
英文教材《ProgramminginC++》(SE)高等教育出版社1.1
C++程序結(jié)構(gòu)的特點
一個示范程序
程序的組成部分
程序的書寫格式一個C++的示范程序/*ThisisasimpleCppprogram*/#include<iostream.h>//文件包含voidmain()
//主函數(shù)頭
{//主函數(shù)體
doublex,y;//變量說明
cout<<"Entertwofloatnumber:";//輸出數(shù)據(jù)
cin>>x>>y;//輸入數(shù)據(jù)
doublez=x+y;//定義并賦值
cout<<"x+y="<<z<<endl;//輸出數(shù)據(jù)}任何變量都必須先說明后使用執(zhí)行結(jié)果為:
Entertwofloatnumber:34<enter>x+y=7C語言中,用#define定義常量:
#definePI3.14159 #defineRa+b
它只是在預(yù)編譯時進行字符置換,將標(biāo)識符置換成表達式或數(shù)字。預(yù)編譯后,標(biāo)識符PI,R不再存在。PI,R不是變量,沒有類型,不占用存儲單元,很容易出錯:
inta=1;b=2; #definePI3.14159 #defineRa+b cout<<PI*R*R;
輸出的不是3.14159*(a+b)*(a+b),而是3.14159*a+b*a+b。 程序因此出錯。1.2用const定義常變量1.3函數(shù)原型申明C++強制規(guī)定,如果函數(shù)調(diào)用的位置在函數(shù)定義之前,則在調(diào)用函數(shù)之前必須實現(xiàn)作函數(shù)原型申明。這一點與C不同,C只是建議,而沒有強制函數(shù)申明的一般形式為: 函數(shù)類型函數(shù)名(參數(shù)表);最后的分號可不能忘了,否則出錯!參數(shù)表中可以只指定各個參數(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++的做法是重載:將這三個函數(shù)名取相同的名字,程序運行時,系統(tǒng)會根據(jù)實際參數(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ù)或類型不同,系統(tǒng)會尋找與之匹配的函數(shù)調(diào)用。1.5函數(shù)模板什么時候使用模板?重載函數(shù)的不便之處在于,對于同名的函數(shù)要一個一個地編寫,編碼量很大。對于有些相同功能的函數(shù),如果函數(shù)個數(shù)相同,可以用另外的方法來解決,這就是模板(Template)。函數(shù)模板的定義形式:
Template<類型參數(shù)表>
返回類型函數(shù)模板名(數(shù)據(jù)參數(shù)表) {函數(shù)模板定義體 }示例:將上述重載示例改為函數(shù)模板。#include<iostream>usingnamespacestd;//默認使用std標(biāo)準(zhǔn)庫名
template<typenameT>;Tmax(Ta,Tb,Tc)//建立函數(shù)模板時,只需要{if(b>a)a=b;//將函數(shù)類型、參數(shù)類型int換成T就行。if(c>a)a=c;//即用虛擬的類型名T代替實際的類型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ù)可以有多個:template<typenameT1,typenameT2>1.6有默認參數(shù)的函數(shù)背景:一般情況下,函數(shù)調(diào)用時,形參從實參那里取得值。因此要求實參的個數(shù)和類型應(yīng)該與形參相同。但是,有時候,多次調(diào)用同一函數(shù)時用的是同一實參數(shù),或者調(diào)用時還不好確定實參數(shù)。C++提供一個簡單的解決辦法,即給參數(shù)一默認值。這樣當(dāng)不提供實參數(shù)時,形參就用默認參數(shù)作為參數(shù)值。示例:有一函數(shù)聲明為:
floatarea(floatr=6.5); 調(diào)用area函數(shù)時,如果不提供實際參數(shù)給r,r就以默認數(shù)值6.5作為參數(shù)頂用area: area();//相當(dāng)于area(6.5);注意: 1)當(dāng)有多個參數(shù)時,如果只有部分參數(shù)有默認值,則指定了默認值的參數(shù)必須放在參數(shù)表的最右邊,否則出錯。因為實參與形參的結(jié)合是從左至右順序進行的,第一個實參必須給第一個形參,第二個實參必須給第二個形參…。1.6有默認參數(shù)的函數(shù)聲明: voidarea(floatx1,intx2=1,charx3=‘a(chǎn)’);調(diào)用:area(1.2,3,‘b’);//形參值全部由實參得到
area(1.2,3);//最后一個參數(shù)取自默認值
area(1.2);//最后兩個參數(shù)取自默認值area();//出錯,第一個形參沒有實參,也沒有默認值2)一個函數(shù)不能既作為重載函數(shù),又作為默認參數(shù)函數(shù)。因為當(dāng)調(diào)用函數(shù)時如果少寫一實際個參數(shù),系統(tǒng)無法判斷是利用重載函數(shù)還是利用默認參數(shù)函數(shù)。1.7變量的引用(reference)什么叫引用?變量的引用就是變量的別名。建立引用的作用,是為一個變量另取一個名字,以便在需要的時候間接地引用該別名。如何使用引用?假如有一個變量a,想給它另取一個別名b,可以這樣寫: inta;
int&b=a;//聲明b是一個整形變量的引用變量,并且被初始化為a此處&不代表取地址,,只是“引用聲明符”。對一個變量聲明一個引用,并不另外開辟內(nèi)存空間。b和a代表同一個變量單元。引用不是獨立的變量,編譯系統(tǒng)不給它分配存儲單元。因此建立引用只有聲明,沒有定義,只是聲明和某一個變量的關(guān)系。示例:
#include<iostream> usingnamespacestd; voidmain() {inta=10; int&b=a; a=a*a; cout<<“b=“<<b<<endl; }運行結(jié)果:b=1001.7變量的引用(reference)將引用作為函數(shù)參數(shù):C++之所以增加“引用”,主要是利用它作為函數(shù)參數(shù),以彌補函數(shù)傳遞參數(shù)的不方便的遺憾。也降低了編程難度。將變量名作為實參:這時傳給形參的是變量的值,傳遞是單向的,函數(shù)運行時,形參發(fā)生變化,并不回傳給實參。因為形參和實參不是同一個存儲單元。請看下面示例: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;}運行結(jié)果,i,j仍然是3,5。沒有發(fā)生交換。傳遞變量的指針:這時傳給形參的是變量的地址,形參得到一個變量的地址,即形參指針變量指向?qū)崊⒆兞繂卧:瘮?shù)中形參發(fā)生改變,實際上是改變實參。這種方法實際上仍然是值傳遞:想指針變量傳遞地址值。然后通過指針變量訪問有關(guān)變量?!伴g接地”回傳了改變的變量。請看下面示例: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;}運行結(jié)果,i,j是5,3。變量值發(fā)生交換。如何理解引用?我們從物理實現(xiàn)上來理解,引用是一個隱性指針,即引用值是引自所指向的實體。這就是引用的真意。高級編程(面向應(yīng)用)多用引用,低級編程(面向機器)多用指針。對引用的說明:不能建立void類型的引用。因為任何實際存在的變量都屬于非void類型。void&a=9;//錯誤不能對數(shù)組名進行引用,因為數(shù)組名是首地址本身不占有存儲空間。
charc[6]=“hello”; char&r=c;//錯誤可以建立指針變量的引用:
inti=5; int*p=&i;//定義指針變量p,指向i
int*&t=p;//t是指向整形變量的指針變量的引用,初始化為p.1.7變量的引用(reference)可以將引用的地址賦給指針。此時,指針指向原來變量:
inta=3; int&b=a; int*p=&b;//指針p指向變量a的引用b,相當(dāng)與指向a不能定義指向引用類型的指針變量:
int&*p=&a;//錯誤可以用常量或表達式對引用初始化,但必須用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)識符只能在說明它或定義它的范圍內(nèi)是可見的,而在該范圍之外是不可見的。大多數(shù)標(biāo)識符的說明與定義是一致的,只有少數(shù)例外。如:函數(shù)等。范圍有大有小。最大為整個程序,最小為塊,中間有文件和函數(shù)。每一個變量都有自己的有效范圍。我們只能在變量的作用域內(nèi)使用該變量。不能直接使用其它作用域中的變量。如果要使用其它作用域中的同名變量,必須使用“作用域運算符”,即“::”。1.9作用域運算符
請看示例:
#include<iostream.h> floata=1.5; voidmain() {inta=5; cout<<a<<endl;//輸出作用域為main函數(shù)的局部變量a的值 cout<<::a<<endl;//輸出作用域為全局的全局變量a的值 }運行結(jié)果:51.5注意:不能用作用域運算符“::”訪問函數(shù)中的局部變量。1.9作用域運算符局部變量和全局變量1、局部變量是指作用域在函數(shù)級和塊級的變量。2、全局變量是指作用域在程序級和文件級的變量。#include<iostream.h>inti(5);
//外部全局變量externvoidfunc(){cout<<i<<endl;}voidmain(){
inti=3;//內(nèi)部局部變量func();cout<<i<<endl;}局部變量全局變量藍色為文件作用域綠色為函數(shù)作用域1.10字符串變量
C++除了可以使用C語言提供的字符型變量和字符型數(shù)組外,還提供了字符串類。這種類可以定義字符串對象。但在文件開頭必須包含string庫:#include<string.h>字符串定義:
strings1;//定義字符串變量s1 strings2=“China”;//定義字符串變量s2并初始化字符串賦值:可以對定義了的字符串變量進行賦值:
s1=“Hello”; s2=s1; s3=s1+s2;//字符串連接字符串變量的輸入輸出:
stringc1; cin>>c1; cout<<c1;字符串比較:可以使用==,!=,>=,<=來進行字符串的比較1.10字符串變量字符串?dāng)?shù)組:也可以直接定義字符串?dāng)?shù)組:
stringname[4]={“張三”,”李四”,”王五”,”劉六”};
運行結(jié)果為:
name[0]=“張三“;
name[1]=“李四”; name[2]=“王五”; name[3]=“劉六”;1.10字符串變量示例:從鍵盤輸入3個字符串,并按字典順序輸出:#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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 半年工作總結(jié)模板
- DB2201T 62-2024 肉牛運輸應(yīng)激綜合征防治技術(shù)規(guī)范
- 職業(yè)導(dǎo)論-房地產(chǎn)經(jīng)紀(jì)人《職業(yè)導(dǎo)論》押題密卷1
- 房地產(chǎn)經(jīng)紀(jì)操作實務(wù)-《房地產(chǎn)經(jīng)紀(jì)操作實務(wù)》押題密卷1
- 人資年度工作總結(jié)模板
- 農(nóng)學(xué)碩士答辯指南模板
- 年度目標(biāo)達成總結(jié)模板
- 人教版四年級數(shù)學(xué)上冊寒假作業(yè)(六)(含答案)
- 河南省鄭州市2024-2025學(xué)年高二上學(xué)期期末考試 生物(含答案)
- 二零二五年食堂廚具定制設(shè)計與安裝合同2篇
- 小學(xué)英語時態(tài)練習(xí)大全(附答案)-小學(xué)英語時態(tài)專項訓(xùn)練及答案
- 中醫(yī)科特色診療規(guī)范
- 建筑工程一切險條款版
- PEP小學(xué)六年級英語上冊選詞填空專題訓(xùn)練
- 古建筑修繕項目施工規(guī)程(試行)
- GA 844-2018防砸透明材料
- 化學(xué)元素周期表記憶與讀音 元素周期表口訣順口溜
- 非人力資源經(jīng)理的人力資源管理培訓(xùn)(新版)課件
- 鉬氧化物還原過程中的物相轉(zhuǎn)變規(guī)律及其動力學(xué)機理研究
- (完整word)2019注冊消防工程師繼續(xù)教育三科試習(xí)題及答案
- 《調(diào)試件現(xiàn)場管理制度》
評論
0/150
提交評論