![面向?qū)ο笤O(shè)計(jì)與C++第1章 C++對(duì)C性能的擴(kuò)充_第1頁](http://file4.renrendoc.com/view/dde3976c57f205dcaee3ec0d034bb022/dde3976c57f205dcaee3ec0d034bb0221.gif)
![面向?qū)ο笤O(shè)計(jì)與C++第1章 C++對(duì)C性能的擴(kuò)充_第2頁](http://file4.renrendoc.com/view/dde3976c57f205dcaee3ec0d034bb022/dde3976c57f205dcaee3ec0d034bb0222.gif)
![面向?qū)ο笤O(shè)計(jì)與C++第1章 C++對(duì)C性能的擴(kuò)充_第3頁](http://file4.renrendoc.com/view/dde3976c57f205dcaee3ec0d034bb022/dde3976c57f205dcaee3ec0d034bb0223.gif)
![面向?qū)ο笤O(shè)計(jì)與C++第1章 C++對(duì)C性能的擴(kuò)充_第4頁](http://file4.renrendoc.com/view/dde3976c57f205dcaee3ec0d034bb022/dde3976c57f205dcaee3ec0d034bb0224.gif)
![面向?qū)ο笤O(shè)計(jì)與C++第1章 C++對(duì)C性能的擴(kuò)充_第5頁](http://file4.renrendoc.com/view/dde3976c57f205dcaee3ec0d034bb022/dde3976c57f205dcaee3ec0d034bb0225.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章C++對(duì)C性能的擴(kuò)充
面向?qū)ο蟪绦蛟O(shè)計(jì)與C++11行注釋2輸入輸出3數(shù)據(jù)類型4變量主要內(nèi)容5函數(shù)6new及delete7引用類型2整理ppt1.行注釋在C++中,新增了行注釋////sum.cpp#include<iostream>//編譯預(yù)處理命令usingnamespacestd;//使用命令空間stdintmain()//主函數(shù)首部{intx,y,sum;//定義3個(gè)整型變量
cout<<"Pleaseinputtwointegers:"<<'\n';
//提示用戶由鍵盤輸入兩個(gè)整數(shù)
cin>>x;//從鍵盤輸入變量x的值
cin>>y;//從鍵盤輸入變量y的值
sum=x+y;//將x+y的值賦給整型變量sumcout<<"x+y="<<sum<<endl;//輸出兩個(gè)整數(shù)的和sumreturn0;//如程序正常結(jié)束,
//向操作系統(tǒng)返回一個(gè)數(shù)值0}<3整理pptC語言中我們用庫函數(shù)printf和scanf對(duì)基本變量進(jìn)行輸入輸出。如下程序:2.數(shù)據(jù)的輸入和輸出#include<stdio.h>voidmain(){ inta;
scanf("%d",&a);
printf("a=%d\n",a);}C++擴(kuò)展了C的輸入輸出,不但可用printf、scanf函數(shù),還可以用輸入輸出流。4整理pptC++輸入輸出標(biāo)準(zhǔn)流流名含義默認(rèn)設(shè)備流名含義默認(rèn)設(shè)備cin標(biāo)準(zhǔn)輸入鍵盤cout輸出屏幕以上標(biāo)準(zhǔn)流為利用面向?qū)ο蠓椒ㄔO(shè)計(jì)的輸入輸出流類的對(duì)象.使用cin的格式:cin>>變量名1[>>變量名2>>…變量名n]
使用cout的格式:cout<<表達(dá)1[<<表達(dá)式2<<表達(dá)式n>>]
5整理ppt#include<iostream.h>intmain(){for(inti=1;i<=3;i++){
cout<<"count="<<i<<endl;} inta;floatf;charc;
cin>>a>>f>>c;
cout<<"a="<<a<<"f="<<f<<"c="<<c<<endl; return0;}例如:注:使用cin與cout必須在程序開頭包含iostream頭文件!6整理pptC++輸入輸出流的優(yōu)點(diǎn)簡單易用,根據(jù)操作對(duì)象自適應(yīng),無需指定變量的類型;可對(duì)自定義的類型進(jìn)行輸入輸出;提高了安全性和可擴(kuò)展性。<7整理ppt3.數(shù)據(jù)類型枚舉類型
一般形式:enum枚舉類型名{枚舉列}[枚舉變量表]C++中定義枚舉變量時(shí),不必在枚舉名前加標(biāo)識(shí)符enum
共用體類型同結(jié)構(gòu)體類型,聯(lián)合類型一旦定義,就可以直接使用聯(lián)合名定義變量,而不用在聯(lián)合體名前加標(biāo)識(shí)符union。結(jié)構(gòu)體類型:C++語言,結(jié)構(gòu)體一旦定義,則可以直接使用該結(jié)構(gòu)體名定義變量,不需在結(jié)構(gòu)體前加struct標(biāo)識(shí)。如:
structstudent{xxx};studentstu;另外,C++中的結(jié)構(gòu)體類型所有的屬性和方法都是公有的。新增類類型
C++中的struct作為特殊的類類型中不僅有屬性數(shù)據(jù)還有成員函數(shù),但是所有訪問屬性都是公有。8整理pptC語言中我們都是用字符數(shù)組來表示字符串的,在C++除了可以用字符數(shù)組表示外,我們還可以用string類型來更方便的表示字符串,string實(shí)質(zhì)上是C++標(biāo)準(zhǔn)庫(stl)中用面向?qū)ο蠓椒ǘx的字符串類,它并不是C++提供的基本類型。#include<iostream>#include<string>//必須包含此頭文件usingnamespacestd;voidmain(){stringstr1;str1="abcdefg";stringstr2=str1;//用一個(gè)字符串給另一個(gè)賦值
cout<<str1<<endl;//對(duì)字符串進(jìn)行輸入輸出
cout<<str1[5]<<endl;//操作字符串中的單個(gè)字符
str1[5]='k';cout<<str1<<endl;}string類型9整理pptstring字符串的運(yùn)算C語言中對(duì)字符串進(jìn)行運(yùn)算要用到strcat(),strcpy(),strcmp()等庫函數(shù),C++中的string字符串類,可以直接用+,>,<,=等運(yùn)算符對(duì)字符串進(jìn)行操作。#include<iostream>#include<string>//必須包含此頭文件usingnamespacestd;voidmain(){
stringstr1="abcd";stringstr2="efgh";cout<<str1+str2<<endl;//字符串連接
//字符串比較
if(str1<str2)cout<<"str1小于str2"<<endl;elsecout<<"str1大于等于str2"<<endl;}<10整理ppt4.變量正確理解C中的變量的定義要求:
一般應(yīng)該集中定義出,不能在語句塊中定義。程序例:
voidmain() {intx=1;//正確
for(inti=0;i<10;i++)//錯(cuò)誤 {inty=2; } }
11整理ppt(1)C++變量定義規(guī)則可以采用“隨用隨定義”的方式定義出變量,即變量的塊內(nèi)定義C++中允許變量在使用之前的任一語句塊中定義出來,包括for循環(huán)中何為塊?塊:C++語言把{}括起來的一塊區(qū)域稱為塊。塊變量:定義在某個(gè)塊中的變量。塊作用域:變量定義的由花括號(hào)括起來的范圍,塊變量在其作用域可見,而在作用域外不可見。12整理ppt例如:#include<iostream.h>voidmain(void){ intx=1;//局部變量 {
inty;//塊內(nèi)變量
x=3;y=4; }cout<<"y="<<y<<endl;}voidmain(void){for(inti=1;i<10;i++){intz=1;//塊內(nèi)變量}
cout<<"z="<<z;}13整理ppt正確理解C++中的變量的各種作用域
文件域—全局變量(其作用域?yàn)閺亩x點(diǎn)到當(dāng)前文件結(jié)束有效)。函數(shù)域—局部變量(其作用域?yàn)楸竞瘮?shù)內(nèi)有效)。函數(shù)原型域—函數(shù)的形參,為局部變量,只在該函數(shù)體內(nèi)有效。塊內(nèi)域—塊內(nèi)定義的變量(比局部變量的作用域更小),塊內(nèi)定義的變量的作用域?yàn)閺亩x點(diǎn)到當(dāng)前塊內(nèi)有效,語句塊執(zhí)行完畢,自動(dòng)釋放。
14整理ppt例如:intX=1; voidFunction(inta) {
intb=a;
X=b;
Y=X;}voidmain(){intY=2;
X=2;
Function(X);for(inti=0;i<10;i++){
X=2;
intC=0;
}
X=2,Y=3;C=X;a=3;b=4;}//錯(cuò)誤//正確//正確//正確//正確//錯(cuò)誤//全局變量//函數(shù)的形參//局部變量//局部變量//塊定義的變量//塊定義的變量15整理ppt語句塊內(nèi)變量的應(yīng)用目的
通過縮小變量的作用域來縮短變量的生存期,充分利用內(nèi)存空間,優(yōu)化內(nèi)存的使用voidmain(){intX;//局部變量
for(X=1;X<10;X++)
{}}//在此時(shí)X才被釋放voidmain(){for(intX=1;X<10;X++){//塊內(nèi)變量}
//在此時(shí)X就被釋放}16整理ppt(2)作用域運(yùn)算符與命名空間C語言中變量命名的要求:在同一個(gè)程序中應(yīng)該盡可能保持變量名的唯一性,最好不要同名。
#include"iostream.h"intX=1;voidmain(){intX=2;cout<<X;}相同嗎?此時(shí)輸出的X值是為“1”還是“2”系統(tǒng)采用同名覆蓋原則決定,輸出為2如果要輸出全局變量X的值,怎么辦?17整理pptC++中的全局作用域限定符作用:它能使程序員訪問在某外部塊中所定義的全局變量,以免被同名的局部變量所覆蓋。訪問規(guī)則:有::限定的同名符號(hào)是全局變量,無::限定的同名符號(hào)是局部變量。#include<iostream.h>intX=1; voidmain(){intX=2;cout<<"localX="<<X<<endl;
//未限定時(shí)的符號(hào)名為局部//符號(hào)名
cout<<"globalX="<<::X;//采用“::”限定時(shí)的符號(hào)名為全//局符號(hào)名}18整理ppt全局作用域限定符的編程規(guī)則(1)只能將“::”放在具有全局符號(hào)名說明的變量名之前,不能放在無全局符號(hào)名說明的局部變量名之前。intX=1; voidmain(void){intX=2;intY=3;::X=10;
//正確,因?yàn)橛型娜址?hào)名說明
::Y=4;
//錯(cuò)誤,因?yàn)闊o同名的全局符號(hào)名說明}全局作用域限定符“::”不僅可以限定變量,也可以用來限定函數(shù)19整理ppt名字空間--解決不同模塊相同名字沖突問題。一個(gè)名字空間可以看作一個(gè)比程序模塊更大的包。格式:NamespaceModuleName{<程序代碼>}注:一個(gè)給定名字空間的所有代碼可以位于同一個(gè)文件中,也可以分布在多個(gè)文件中,但是在每一個(gè)文件中代碼都要按照上述語句格式進(jìn)行封裝。其作用域有兩方面的含義:(1)同一個(gè)名字空間作用域內(nèi)不允許存在同名標(biāo)識(shí)符;(2)不同名字空間作用域內(nèi)的標(biāo)識(shí)符不能直接調(diào)用,需要添加名字空間的作用域限定運(yùn)算符。20整理ppt例如://a.h#includenamespaceA{函數(shù)f1{}
函數(shù)f2{}變量s;}若要在A名字空間外,調(diào)用f1、f2函數(shù)和變量s,如何表達(dá)?
方法1:A::f1();方法2:#include“A.h”voidmain(){usingnamespaceA;f1();//名字空間A中的函數(shù)}21整理ppt(3)用const關(guān)鍵字定義常變量在C語言中我們用#define宏命令來定義常量,
#define只是在編譯時(shí)進(jìn)行字符串替換,運(yùn)行時(shí)系統(tǒng)不為其分配內(nèi)存空間。用它有時(shí)會(huì)出現(xiàn)意想不到的錯(cuò)誤。如下所示:#include<iostream.h>#definePI3#defineRa+bintmain(){inta=2;intb=3;cout<<PI*R*R;return1;}程序輸出15而不是想要的75的結(jié)構(gòu)。因?yàn)镻I*R*R被展開為了3*a+b*a+b
=15。因此C++提供了const關(guān)鍵字來定義常變量,用const定義的常變量具有變量量的一些屬性。(有數(shù)據(jù)類型、占用內(nèi)存空間、具有地址、可以用指針來指向它等),唯一和變量不同的是它的值只能在定義時(shí)指定。以后就不能通過任何形式改變。22整理ppt#include<iostream.h>#definePI3//沒有類型,不占用存儲(chǔ)單元constintR=2+3;//有類型,有存儲(chǔ)單元intmain(){inta=2;intb=3;cout<<PI*R*R<<endl;return1;}改進(jìn):23整理ppt#include<iostream.h>constfloatPI=3.1415926f;intmain(){ floatr; cout<<"請(qǐng)輸入圓的半徑值:(負(fù)值退出)"<<endl; cin>>r; while(r>=0) { cout<<"半徑為"<<r<<"的圓的面積為:" <<PI*r*r<<","<<"周長為:" <<2*PI*r<<endl; cout<<"請(qǐng)輸入圓的半徑值:(負(fù)值退出)"<<endl; cin>>r; } return1;}例:分析如下程序的功能24整理pptconst定義常量const
類型常量名=表達(dá)式;或類型const常量名=表達(dá)式;
例如:constdoublepi=3.14;和doubleconstpi=3.14;兩者等價(jià)!const定義數(shù)組常量:constinta[5]={1,2,3,4,5};
注:const定義常量必須初始化。25整理ppt常量與指針一起使用
(1)指向常量的指針
constchar*name="chen";name[2]=‘i’;?name="stu";?
(2)常指針char*constname="chen"例如:name="stu";
name[1]=2;26整理ppt常量與指針一起使用(3)指向常量的常指針注:const定義一個(gè)整型常量,關(guān)鍵字int可以省略。constchar*constname=”chen”;
name[2]=‘i’;?name=”stu”;?
27整理ppt區(qū)分C語言中的#define與C++中的const的不同由#define所定義的符號(hào)名為全局性常量,因而在整個(gè)程序中應(yīng)保持符號(hào)名的唯一性;const可以說明一個(gè)局部或全局性同名常量(據(jù)此可以改變const符號(hào)名之值)。另外在語法方面,#define為編譯預(yù)處理命令,而const為定義符,語句以“;”結(jié)束。#defineMin1constintMax=100;voidmain(void){#defineMin2//錯(cuò)誤,不能再定義同名常量
constintMax=200;//可以再定義同名局部常量}28整理ppt(4)函數(shù)形式上的轉(zhuǎn)換任何系統(tǒng)定義的基本數(shù)據(jù)類型或用戶自定義的數(shù)據(jù)類型的名字,都可作為函數(shù)使用,從而把變量(常量)從一種數(shù)據(jù)類型轉(zhuǎn)換到另一種數(shù)據(jù)類型。例如:inti=20;floatx;x=int(i);(在C語言中則錯(cuò)誤)<29整理ppt
C語言要求如果函數(shù)調(diào)用在函數(shù)定義之前,則應(yīng)在函數(shù)調(diào)用之前對(duì)所調(diào)用的函數(shù)進(jìn)行函數(shù)聲明,但如果函數(shù)的返回值為整型,也可以不進(jìn)行聲明。如下例所示:#include<stdio.h>intmax(inta,intb);//函數(shù)聲明voidmain(){ inta=max(2,3); printf("%d",a);}intmax(inta,intb){ if(a>=b) returna; else returnb;}intmax(inta,intb);就是對(duì)后面max函數(shù)的聲明。由于max函數(shù)的返回值為整型,所以這里的聲明也可以不要。但如果max的返回值不是整型,這必須對(duì)其進(jìn)行聲明。聲明可以采用以下幾種形式:intmax(inta,intb);//原型聲明intmax();//無參聲明max();//無參無返回值聲明5.函數(shù)30整理ppt(1)C++中的函數(shù)聲明在C++如果函數(shù)調(diào)用在函數(shù)定義之前。則必須在調(diào)用之前對(duì)其進(jìn)行的函數(shù)聲明(返回值為int的函數(shù)也必須聲明)。而且必須采用函數(shù)原型聲明的形式。#include<iostream.h>intmax(inta,intb);intmain(){ inta=max(2,3); cout<<a<<endl;}intmax(inta,intb){ if(a>=b) returna; else returnb;}C++中函數(shù)聲明必須采用函數(shù)原型的形式:返回值
函數(shù)名(形參表);但在C++中函數(shù)的聲明可以只有形參類型,而沒有形參。如左邊的例子中也可將函數(shù)申明寫為:intmax(intint);要區(qū)分函數(shù)的定義、聲明和調(diào)用以及它們的作用。31整理ppt(2)C++中函數(shù)的重載函數(shù)重載:C++中允許在同一作用域中用同一函數(shù)名定義多個(gè)函數(shù)(C語言中不可以)。這些函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類型不同。例1:跟據(jù)參數(shù)類型的不同進(jìn)行重載#include<iostream.h>intmax(inta,intb){if(a>=b)returna;elsereturnb;}floatmax(floata,floatb){if(a>=b)returna;elsereturnb;}intmain(){intia,ib;floatfa,fb;cin>>ia>>ib;cout<<max(ia,ib)<<endl;cin>>fa>>fb;cout<<max(fa,fb)<<endl;}32整理ppt例2:跟據(jù)參數(shù)個(gè)數(shù)的不同進(jìn)行重載#include<iostream>usingnamespacestd;intmax(inta,intb){if(a>=b)returna;elsereturnb;}intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}intmain(){intia,ib,ic;cin>>ia>>ib>>ic;cout<<max(ia,ib)<<endl;cout<<max(ia,ib,ic)<<endl;}由以上兩個(gè)例子的分析可以得出:對(duì)重載的函數(shù)進(jìn)行調(diào)用時(shí),主要根據(jù)函數(shù)參數(shù)類型和個(gè)數(shù)的不同來確定具體應(yīng)該調(diào)用那一個(gè)函數(shù)。重載的函數(shù)能否僅僅只有返回值不同而形參完全相同?——調(diào)用重載函數(shù)時(shí),函數(shù)返回值類型不在參數(shù)匹配檢查之列
33整理ppt(3)默認(rèn)參數(shù)的函數(shù)C語言,函數(shù)調(diào)用時(shí)傳給函數(shù)的實(shí)參個(gè)數(shù)必須與形參的個(gè)數(shù)相同,但C++可以讓形參帶有默認(rèn)的值,從而可以讓傳遞給函數(shù)的形參個(gè)數(shù)少于實(shí)參的個(gè)數(shù)。稱為默認(rèn)參數(shù)。這種機(jī)制有時(shí)候給我們帶來很大的方便。尤其是在面向?qū)ο缶幊虝r(shí)類的構(gòu)造函數(shù)。#include<iostream.h>voidGetDate(intday,intmonth=3,intyear=2011){cout<<year<<"/"<<month<<"/"<<day<<endl;}intmain(){ GetDate(20); GetDate(20,5); GetDate(20,5,2012); return1;}程序輸出:2011/3/202011/5/202012/5/2034整理ppt實(shí)參與形參的結(jié)合是以從左到右的順序進(jìn)行的,第一個(gè)實(shí)參的值必須傳遞給第一個(gè)形參,第二個(gè)實(shí)參必然與第二個(gè)形參相結(jié)合。所以帶函數(shù)的默認(rèn)參數(shù)必須按從右到左的順序進(jìn)行默認(rèn)。例如如下的函數(shù)默認(rèn)參數(shù)是錯(cuò)誤的。Fun(inta,intb=2,intc,intd=3);//錯(cuò)誤默認(rèn)參數(shù)的次序由以上的討論我們可以發(fā)現(xiàn),在有默認(rèn)參數(shù)的函數(shù)中,實(shí)參的個(gè)數(shù)可以少于形參的個(gè)數(shù),但實(shí)參的個(gè)數(shù)不能少于形參中沒有默認(rèn)的參數(shù)的個(gè)數(shù)。帶默認(rèn)值的函數(shù)的功能可以由函數(shù)的重載來實(shí)現(xiàn)!35整理ppt使用帶默認(rèn)參數(shù)的函數(shù)時(shí)應(yīng)注意的問題(1)如果函數(shù)的定義在函數(shù)的調(diào)用之前,則應(yīng)在函數(shù)的定義中給出形參的默認(rèn)值。如果函數(shù)的定義在函數(shù)的調(diào)用之后,則應(yīng)在函數(shù)聲明中給出參數(shù)的默認(rèn)值,而在函數(shù)的定義中可以給出也可以不給出(視編譯器而定,例如VC6.0中則只能在函數(shù)聲明中給出,而在函數(shù)定義中不能給出默認(rèn)參數(shù))。為了避免混淆,我們最好只在函數(shù)聲明中給出默認(rèn)參數(shù)。(2)函數(shù)名重載時(shí)最好不要用缺省參數(shù),否則會(huì)引起二義性
。例如:GetDate(intday,intmonth=4,intyear=2008);GetDate(intday);則如果有一個(gè)函數(shù)調(diào)用GetDate(20),系統(tǒng)無法判斷應(yīng)該調(diào)用哪一個(gè)函數(shù)(編譯報(bào)錯(cuò))。但如果第二個(gè)函數(shù)改為:GetDate(intdat,intmonth,intyear,inthour);則不會(huì)出現(xiàn)以上混淆。36整理ppt(4)內(nèi)聯(lián)函數(shù)(內(nèi)置函數(shù))
對(duì)函數(shù)的調(diào)用需要一定的時(shí)間和空間開銷,對(duì)于有些需要頻繁調(diào)用的函數(shù)這種開銷會(huì)累積起來。C++對(duì)此提供了一種解決方法——內(nèi)聯(lián)函數(shù)。
內(nèi)聯(lián)函數(shù):在編譯時(shí)將被調(diào)函數(shù)的代碼嵌入到主調(diào)函數(shù)中。這種嵌入到主調(diào)函數(shù)中的函數(shù)稱為內(nèi)聯(lián)函數(shù)。定義內(nèi)聯(lián)函數(shù)只需在函數(shù)定義的前面加上關(guān)鍵字
inline.#include<iostream>usingnamespacestd;inlineintmax(inta,intb);voidmain(){ inta=max(2,3); cout<<a<<endl;}inlineintmax(inta,intb){ if(a>=b)returna; elsereturnb;}37整理ppt使用內(nèi)聯(lián)函數(shù)應(yīng)注意:內(nèi)聯(lián)函數(shù)必須在函數(shù)第一次出現(xiàn)時(shí)由inline指定;內(nèi)聯(lián)函數(shù)代碼不宜太大,原則上適宜1-5行代碼的小函數(shù);不能含有復(fù)雜的分支和循環(huán)等語句。遞歸調(diào)用函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。<38整理ppt//分配一個(gè)堆區(qū)動(dòng)態(tài)數(shù)組int*p;inti;voidf(){cin>>i;p=(int*)malloc(sizeof(int)*i);}voidmain(){ f(); for(intj=0;j<i;j++) {p[j]=j*10;cout<<p[j]<<endl;} free(p);}6.動(dòng)態(tài)分配/撤銷內(nèi)存的運(yùn)算符new和deleteC語言中動(dòng)態(tài)內(nèi)存的分配與使用(堆區(qū))//分配單個(gè)堆區(qū)變量#include<iostream.h>#include<malloc.h>voidmain(){int*p;p=(int*)malloc(sizeof(int));*p=4;cout<<*p<<endl;free(p);}39整理ppt動(dòng)態(tài)分配/撤銷內(nèi)存的運(yùn)算符new和deleteC語言中使用庫函數(shù)malloc和free,進(jìn)行內(nèi)存分配和撤銷,malloc只能由用戶給出大小來分配內(nèi)存而不能自己確定數(shù)據(jù)類型,所以不適合面向?qū)ο笞远x類型,C++提供了new和delete運(yùn)算符來對(duì)內(nèi)存進(jìn)行動(dòng)態(tài)分配和撤銷(任兼容C語言的malloc和free函數(shù))。
new和delete的用法:#include<iostream>usingnamespacestd;voidmain(){ int*p; p=newint; *p=4; cout<<*p<<endl; deletep;}int*p;inti;voidf(){ cin>>i; p=newint[i];}voidmain(){ f(); for(intj=0;j<i;j++) {
p[j]=j*10; cout<<p[j]<<endl; } delete[]p;}<40整理ppt7.引用類型引用:就是給變量起一個(gè)別名,別名的定義,同一實(shí)體,兩個(gè)不同的名稱。C++中的引用:同一內(nèi)存單元兩種不同的變量名。通過引用,可以實(shí)現(xiàn)在不同的作用域內(nèi)訪問同一內(nèi)存單元。41整理pptvoidmain(){intx=1;fun(x);}voidfun(int&a){ a=3;}您知道x與a是什么關(guān)系嗎?42整理ppt引用定義的語法類型定義符&變量名=原變量名;inta=3;int&ra=a;(聲名ra為a的引用,ra就是a,a就是ra.改變了ra就改變了a,改變了a也就改變了ra);即ra與a為同一個(gè)變量,但在不同的應(yīng)用場(chǎng)合下(作用域內(nèi))以不同的變量名出現(xiàn)。
43整理ppt必須定義的同時(shí)使之初始化。引用并不另開辟內(nèi)存空間。聲明了一個(gè)變量的引用后,就不能在將其改為別的變量的引用。如下程序。注意?。?!#include<iostream>usingnamespacestd;intmain(){inta=2,b=3;int&ra=a;ra=b;//?b=6; cout<<"a="<<a<<endl<<"b="<<b<<endl<<"ra="<<ra<<endl;
}聲明對(duì)一個(gè)一般變量的引用44整理ppt引用實(shí)際上是一隱指針,是對(duì)變量的間接引用,但不必加運(yùn)算符“*“。引用不同于其他變量。
不能定義引用數(shù)組;如:int&x[10]錯(cuò)誤。
不能建立指向引用的指針;如:int&*p錯(cuò)誤。
不能建立引用的引用;如:int&&x;錯(cuò)誤。inti;int&j=i;int*p=&j;?
45整理ppt為什么要提供引用操作符
C++中的引用主要是用來解決函數(shù)調(diào)用中形參為指針型的參數(shù)時(shí)其函數(shù)體時(shí)的不安全性(易出錯(cuò)),使得操作更加簡單、安全。例如:46整理ppt
intadd(int&X,int&Y){X=X+Y;returnX; }voidmain(){inta=1,b=2;add(a,b);}intadd(int*X,int*Y){ *X=*X+*Y; return*X; } voidmain(){inta=1,b=2;add(&a,&b);}改進(jìn)為47整理ppt引用調(diào)用的優(yōu)點(diǎn)
通過引用調(diào)用可以提高調(diào)用速度,因?yàn)橹恍枰獋魉偷刂范恍枰苯訉⒋罅繑?shù)據(jù)拷貝,因而特別適用于形參為大量數(shù)據(jù)的應(yīng)用場(chǎng)合。
structData{inta[1000]; }AData;voidfun(structDataX){}
structData{inta[1000]; }AData;voidfun(structData&X){}改進(jìn)為您知道為什么要這樣做呢?48整理ppt正確區(qū)分傳值調(diào)用與傳地址調(diào)用
C語言中,函數(shù)參數(shù)傳遞有兩種方式:變量名作實(shí)參和變量地址作實(shí)參。C++中有擴(kuò)充了一種變量引用作實(shí)參。下面分別回顧一下:(1)變量名作實(shí)參
變量名作實(shí)參就是直接將變量或變量的值傳遞給函數(shù)的形參。這種方式在函數(shù)棧中為形參分配空間。并將實(shí)參的值復(fù)制到該空間中,因?yàn)閷?shí)參和形參在不同的空間,所以傳遞是單向的。只能由實(shí)參將值復(fù)制給形參,形參的改變不影響實(shí)參的值。49整理ppt例如:#include<iostream.h>voidswap(inta,intb);intmain(){inta=2,b=4;swap(a,b);cout<<"a="<<a<<"b="<<b<<endl;return1;}voidswap(inta,intb){ inttemp=a; a=b; b=temp;}程序輸出:a=2b=4;可見swap函數(shù)并不能實(shí)現(xiàn)將實(shí)參交換的作用。50整理ppt(2)變量地址作實(shí)參
變量地址作實(shí)參是將函數(shù)的參數(shù)定義為指針類型,調(diào)用函數(shù)的時(shí)候?qū)⒆兞康牡刂纷鳛閷?shí)參傳遞給函數(shù)。這種傳值方式也是單向傳遞,但和變量名作實(shí)參不同的是它將實(shí)參變量的內(nèi)存地址復(fù)制給形參。所以可以在函數(shù)棧中直接通過變量地址來改變實(shí)參的值。51整理ppt#include<iostream>usingnamespacestd;voidswap(int*a,int*b);intmain(){ inta=2,b=4; swap(&a,&b);//傳遞變量地址
cout<<"a="<<a<<"b="<<b<<endl; return1;}voidswap(int*pa,int*b){ inttemp=*pa; *pa=*pb; *pb=temp;}程序輸出:a=4b=2;可見swap函數(shù)實(shí)現(xiàn)了將實(shí)參交換的作用。間接的實(shí)現(xiàn)了函數(shù)傳參的雙向傳遞。52整理ppt(3)變量引用作實(shí)參
變量引用作實(shí)參是將函數(shù)的參數(shù)定義為引用類型,調(diào)用函數(shù)的時(shí)候?qū)⒆兞棵鳛閷?shí)參傳遞給函數(shù)。這種傳值方式是雙向傳遞,實(shí)參和形參共享同一內(nèi)存空間。改變了形參也就改變了實(shí)參。53整理ppt#include<iostream>usingnamespacestd;voidswap(int&a,int&b);intmain(){ inta=2,b=4; swap(a,b); cout<<"a="<<a<<"b="<<b<<endl; return1;}voidswap(int&a,int&b){ inttemp=a; a=b; b=temp;}程序輸出:a=4b=2;可見swap函數(shù)實(shí)現(xiàn)了將實(shí)參交換的作用。這種傳參方式和變量名作參數(shù)的唯一不同是定義函數(shù)時(shí)將形參聲名為引用類型。其余都和變量名作參數(shù)完全相同。<54整理ppt區(qū)分引用在如下兩種場(chǎng)合的差別
(1)對(duì)一般的變量進(jìn)行引用:如引用的變量不是用作函數(shù)的形參或返回值,則聲明時(shí)必須加以初始化以指明它的同地址變量。
voidmain(void) {intX=3;int&refX=X;fun(refX);cout<<X;
//X的值被改變?yōu)?}
voidfun(int&a) {a++;//a為refX的引用}
55整理pptintadd(int&X=1,int&Y=2){X=X+Y;returnX;}
正確的參數(shù)聲明錯(cuò)誤的參數(shù)聲明(2)函數(shù)的形參為引用:如引用的變量用作函數(shù)的形參或返回值,則說明時(shí)不要加以初始化以指明它的同地址變量,此時(shí)形參為實(shí)參的引用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技教育與學(xué)生實(shí)踐基地的未來發(fā)展
- 提高電動(dòng)工具使用效率保障員工操作安全
- 提高商業(yè)學(xué)校實(shí)驗(yàn)室安全管理的措施與方法
- 三人合作經(jīng)營企業(yè)合同協(xié)議書2025
- 上海房屋租賃合同范本使用權(quán)轉(zhuǎn)讓協(xié)議
- 專業(yè)合作社經(jīng)營權(quán)轉(zhuǎn)讓合同
- 二級(jí)建造師崗位合同范本
- 中藥材種苗合同培育技術(shù)探討
- 個(gè)人結(jié)算賬戶權(quán)益與義務(wù)合同2025
- 個(gè)人股權(quán)購買合同書
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗(yàn)
- 2025年上海市嘉定區(qū)中考英語一模試卷
- 潤滑油、潤滑脂培訓(xùn)課件
- 2025年中核財(cái)務(wù)有限責(zé)任公司招聘筆試參考題庫含答案解析
- 華中師大一附中2024-2025學(xué)年度上學(xué)期高三年級(jí)第二次考試數(shù)學(xué)試題(含解析)
- ADA糖尿病醫(yī)學(xué)診療標(biāo)準(zhǔn)指南修訂要點(diǎn)解讀(2025)課件
- 健康管理-理論知識(shí)復(fù)習(xí)測(cè)試卷含答案
- 成人腦室外引流護(hù)理-中華護(hù)理學(xué)會(huì)團(tuán)體 標(biāo)準(zhǔn)
- JGJ106-建筑基樁檢測(cè)技術(shù)規(guī)范
- 高技能公共實(shí)訓(xùn)基地建設(shè)方案
- 市第一人民醫(yī)院“十四五”發(fā)展規(guī)劃(2020-2025)
評(píng)論
0/150
提交評(píng)論