c++的初步知識課件_第1頁
c++的初步知識課件_第2頁
c++的初步知識課件_第3頁
c++的初步知識課件_第4頁
c++的初步知識課件_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Object-Oriented

Programming

inC++

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

《C++面向對象程序設計》譚浩強參考教材《C++語言基礎教程》呂鳳翥編著參考教材《C++程序設計教程》錢能主編

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

C++程序結構的特點

一個示范程序

程序的組成部分

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

//主函數頭

{//主函數體

doublex,y;//變量說明

cout<<"Entertwofloatnumber:";//輸出數據

cin>>x>>y;//輸入數據

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

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

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

#definePI3.14159 #defineRa+b

它只是在預編譯時進行字符置換,將標識符置換成表達式或數字。預編譯后,標識符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函數原型申明C++強制規(guī)定,如果函數調用的位置在函數定義之前,則在調用函數之前必須實現作函數原型申明。這一點與C不同,C只是建議,而沒有強制函數申明的一般形式為: 函數類型函數名(參數表);最后的分號可不能忘了,否則出錯!參數表中可以只指定各個參數的類型,而不指定參數名!函數申明和定義的示例//求圓面積,將函數申明和定義分開,在調用函數前先申明它#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++的做法是重載:將這三個函數名取相同的名字,程序運行時,系統(tǒng)會根據實際參數的不同,調用相近參數的函數:#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函數三次調用max函數,每次實參的個數或類型不同,系統(tǒng)會尋找與之匹配的函數調用。1.5函數模板什么時候使用模板?重載函數的不便之處在于,對于同名的函數要一個一個地編寫,編碼量很大。對于有些相同功能的函數,如果函數個數相同,可以用另外的方法來解決,這就是模板(Template)。函數模板的定義形式:

Template<類型參數表>

返回類型函數模板名(數據參數表) {函數模板定義體 }示例:將上述重載示例改為函數模板。#include<iostream>usingnamespacestd;//默認使用std標準庫名

template<typenameT>;Tmax(Ta,Tb,Tc)//建立函數模板時,只需要{if(b>a)a=b;//將函數類型、參數類型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;}類型參數可以有多個:template<typenameT1,typenameT2>1.6有默認參數的函數背景:一般情況下,函數調用時,形參從實參那里取得值。因此要求實參的個數和類型應該與形參相同。但是,有時候,多次調用同一函數時用的是同一實參數,或者調用時還不好確定實參數。C++提供一個簡單的解決辦法,即給參數一默認值。這樣當不提供實參數時,形參就用默認參數作為參數值。示例:有一函數聲明為:

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

area(1.2,3);//最后一個參數取自默認值

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

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

#include<iostream> usingnamespacestd; voidmain() {inta=10; int&b=a; a=a*a; cout<<“b=“<<b<<endl; }運行結果:b=1001.7變量的引用(reference)將引用作為函數參數:C++之所以增加“引用”,主要是利用它作為函數參數,以彌補函數傳遞參數的不方便的遺憾。也降低了編程難度。將變量名作為實參:這時傳給形參的是變量的值,傳遞是單向的,函數運行時,形參發(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;}運行結果,i,j仍然是3,5。沒有發(fā)生交換。傳遞變量的指針:這時傳給形參的是變量的地址,形參得到一個變量的地址,即形參指針變量指向實參變量單元。函數中形參發(fā)生改變,實際上是改變實參。這種方法實際上仍然是值傳遞:想指針變量傳遞地址值。然后通過指針變量訪問有關變量?!伴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;}運行結果,i,j是5,3。變量值發(fā)生交換。如何理解引用?我們從物理實現上來理解,引用是一個隱性指針,即引用值是引自所指向的實體。這就是引用的真意。高級編程(面向應用)多用引用,低級編程(面向機器)多用指針。對引用的說明:不能建立void類型的引用。因為任何實際存在的變量都屬于非void類型。void&a=9;//錯誤不能對數組名進行引用,因為數組名是首地址本身不占有存儲空間。

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,相當與指向a不能定義指向引用類型的指針變量:

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

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

請看示例:

#include<iostream.h> floata=1.5; voidmain() {inta=5; cout<<a<<endl;//輸出作用域為main函數的局部變量a的值 cout<<::a<<endl;//輸出作用域為全局的全局變量a的值 }運行結果:51.5注意:不能用作用域運算符“::”訪問函數中的局部變量。1.9作用域運算符局部變量和全局變量1、局部變量是指作用域在函數級和塊級的變量。2、全局變量是指作用域在程序級和文件級的變量。#include<iostream.h>inti(5);

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

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

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

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

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

stringc1; cin>>c1; cout<<c1;字符串比較:可以使用==,!=,>=,<=來進行字符串的比較1.10字符串變量字符串數組:也可以直接定義字符串數組:

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

運行結果為:

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論