




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、傳智播客C+錦程講義傳智掃地僧1、C+寸C的擴展1簡單的C+程序1.1求圓的周長和面積數(shù)據(jù)描述:半徑,周長,面積均用實型數(shù)表示數(shù)據(jù)處理:輸入半徑r;計算周長=2*不計算面積=兀r2;輸出半徑,周長,面積;方法 1:1:用結構化方法編程,求圓的周長和面積/countthegirthandareaofcircle#includeusingnamestd;voidmain()doubler,girth,area;constdoublePI=3.1415;coutr;/輸入girth=2*PI*r;area=PI*r*r;coutradius=rendl;coutgirth=girthendl;cou
2、tarea=areaendl;方法2:用面向對象方法編程,求圓的周長和面積分析分析圓類成員變量半輕成員函敢置半徑值求圓的半徑求周長求面積#includeusingnamestd;classCircledoubleradius;/成員變量public:/類的訪問控制voidSet_Radius(doubler)radius=r;/成員函數(shù)radius;通過成員函數(shù)設置成員變量2*3.14f*radius;/通過成員函數(shù)獲取成員變量3.14f*radius*radius;;voidmain()CircleA,B;用類定義對象A.Set_Radius(6.23);類的調用doubleGet_Radi
3、us()doubleGet_Girth()doubleGet_Area()returnreturnreturncoutA.Radius=A.GetRadius()endl;coutA.Girth=A.Get_Girth()endl;coutA.Area=A.Get_Area()endl;B.Set_Radius(10.5);coutB.radius=B.Get_Radius()endl;coutB.Girth=B.Get_Girth()endl;coutB.Area=B.Get_Area()endl;總結:建立類、對象、成員變量、成員函數(shù),輸入輸入流基本概念。1.2初學者易犯錯誤模型/demo
4、02_circle_err.cpp#includeusingnamespacestd;/c+的命名空間classcirclepublic:doubler;doublepi=3.1415926;doublearea=pi*r*r;intmain()circlepi;cout請輸入areapi.r;coutpi.areaJava/C#/D等現(xiàn)代開發(fā)語言的基礎,學習C+標能夠快速掌握這些語言3)C+是各大知名軟件企業(yè)挑選人才的標準之一4) C+對C的加強4.1 namespace命名空間2)C+命名空間基本常識所謂namespace,是指標識符的各種可見范圍。C+而準程序庫中的所有標識符都被定義于一
5、個名為std的namespace中。一:和格式不一樣,前者沒有后綴,實際上,在你的編譯器include文件夾里面可以看到,二者是兩個文件,打開文件就會發(fā)現(xiàn),里面的代碼是不一樣的。后綴為.h的頭文件c+標準已經(jīng)明確提出不支持了,早些的實現(xiàn)將標準庫功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c+標準為了和C區(qū)別開, 也為了正確使用命名空間, 規(guī)定頭文件不使用后綴.h。因此,1)當使用時,相當于在c中調用庫函數(shù),使用的是全局命名空間,也就是早期的c+實現(xiàn);2)當使用的時候,該頭文件沒有定義全局命名空間,必須使用namespacestd;這樣才能正確使用cout。二:由于namespace的概念
6、,使用C+標準程序庫的任何標識符時,可以有三種選擇:1、直接指定標識符。例如std:ostream而不是ostream。完整語句如下:std:coutstd:hex3.4std:endl;2、使用using關鍵字。usingstd:cout;usingstd:endl;usingstd:cin;以上程序可以寫成coutstd:hex3.4endl;3、最方便的就是使用usingnamespacestd;例如:usingnamespacestd;這樣命名空間std內定義的所有標識符都有效(曝光)。就好像它們被聲明為全局變量一樣。那么以上語句可以如下寫:couthex3,4endl;因為標準庫非常
7、的龐大,所以程序員在選擇的類的名稱或函數(shù)名時就很有可能和標準庫中的某個名字相同。所以為了避免這種情況所造成的名字沖突,就把標準庫中的一切都被放在名字空間std中。但這又會帶來了一個新問題。無數(shù)原有的C+弋碼都依賴于使用了多年的偽標準庫中的功能,他們都是在全局空間下的。所以就有了iostream,h*D等等這樣的頭文件,一個是為了兼容以前的C+弋碼,一個是面向對會支持息常處理為了支持新的標準。命名空間std封裝的是標準程序庫的名稱,標準程序庫為了和以前的頭文件區(qū)別,一般不加.h3)C+命名空間定義及使用語法/*在C+珅,名稱(name)可以是符號常量、變量、宏、函數(shù)、結構、枚舉、類和對象等等。為
8、了避免,在大規(guī)模程序的設計中,以及在程序員使用各種各樣的C+保時,這些標識符的命名發(fā)生沖突,標準C+引入了關鍵字namespace(命名空間/名字空間/名稱空間/名域),可以更好地控制標識符的作用域。/*std是C+標準命名空間,C+標準程序庫中的所有標識符都被定義在std中,比如標準庫中的類iostream、vector等都定義在該命名空間中,使用時要加上using聲明(usingnamespacestd)或using指示(如std:string、std:vector)./*C中的命名空間在C語言中只有一個全局作用域C語言中所有的全局標識符共享同一個作用域標識符之間可能發(fā)生沖突C+中提出了命
9、名空間的概念命名空間將全局作用域分成不同的部分不同命名空間中的標識符可以同名而不會發(fā)生沖突命名空間可以相互嵌套全局作用域也叫默認命名空間/*C+命名空間的定義:namespacename,-*/*C+命名空間的使用:使用整個命名空間:usingnamespacename;使用命名空間中的變量:usingname:variable;使用默認命名空間中的變量:二variable默認情況下可以直接使用默認命名空間中的所有標識符*/3C+命名空間編程實踐namespaceNameSpaceA(inta=0;)namespaceNameSpaceB(inta=1;namespaceNameSpaceC(
10、structTeacher(charname10;intage;);)intmain()(usingnamespaceNameSpaceA;usingNameSpaceB:NameSpaceC:Teacher;printf(a=%dn,a);printf(a=%dn,NameSpaceB:a);NameSpaceB二NameSpaceC:Teachert2Teachert1=aaa,3;printf(=%sn,);printf(t1.age=%dn,t1.age);system(pause);return0;4 結論1)當使用iostream的時候,該頭文件沒有定義
11、全局命名空間,必須使用namespacestd;這樣才能正確使用cout。若不引入usingnamespacestd,需要這樣做。std:cout。c+標準為了和C區(qū)別開.也為了正確使用命名空間.規(guī)定頭文件不使用后綴.h。C+命名空間的定義:namespacename,-usingnamespaceNameSpaceA;namespce定義可嵌套?!皩嵱眯浴痹黾?includeiostreamusingnamespacestd;/C語言中的變量都必須在作用域開始的位置定義!/C+中更強調語言的“實用性”,所有的變量都可以在需要使用時再定義。intmain11()inti=0;printf(dd
12、d);intk;system(pause);return0;register關鍵字增強/register關鍵字請求編譯器讓變量a直接放在寄存器里面,速度快/在c語言中register修飾的變量不能取地址,但是在c+里面做了內容/*/1register關鍵字的變化register關鍵字請求“編譯器”將局部變量存儲于寄存器中C語言中無法取得register變量地址在C+43依然支持register關鍵字C+編譯器有自己的優(yōu)化方式,不使用register也可能做優(yōu)化C+中可以取得register變量的地址/2C+編譯器發(fā)現(xiàn)程序中需要取register變量的地址時,register對變量的聲明變得無效
13、。/3早期C語言編譯器不會對代碼進行優(yōu)化,因此register變量是一個很好的補充。*/intmain22()(registerinta=0;printf(&a=%xn,&a);system(pause);return0;其他補充:請閱讀register關鍵字常識課外閱讀.docx4.4變量檢測增強/*在C語言中,重復定義多個同名的全局變量是合法的在C+中,不允許定義多個同名的全局變量C語言中多個同名的全局變量最終會被鏈接到全局數(shù)據(jù)區(qū)的同一個地址空間上intg_var;intg_var=1;C+直接拒絕這種二義性的做法。*/intmain(intargc,char*argv口)
14、(printf(g_var=%dn,g_var);return0;struct類型加強struct類型的加強:C語言的struct定義了一組變量的集合,C編譯器并不認為這是一種新的類型C+中白sstruct是一個新類型的定義聲明structStudent(charname100;intage;);intmain(intargc,char*argv)(Studentsi=wang,1;Students2=wang2,2;return0;C+中所有的變量和函數(shù)都必須有類型/*C+中所有的變量和函數(shù)都必須有類型C語言中的默認類型在C+中是不合法的函數(shù)f的返回值是什么類型,參數(shù)又是什么類型?函數(shù)g可以
15、接受多少個參數(shù)?*/更換成.cpp試試f(i)printf(i=%dn,i);g()return5;intmain(intargc,char*argv)f(10);printf(g()=%dn,g(1,2,3,4,5);getchar();return0;)總結:/*在C語言中intf();表示返回值為int,接受任意參數(shù)的函數(shù)intf(void);表示返回值為int的無參函數(shù)在C+中intf();和intf(void)具有相同的意義,都表示返回值為int的無參函數(shù)*/C+更加強調類型,任意的程序元素都必須顯示指明類型4.2-4.64.2-4.6 屬于語法級別的增強。4.7新增Bool類型關鍵
16、字/*C+中的布爾類型C+啦C語言的基本類型系統(tǒng)之上增加了boolC+43白bbool可取的值只有true和false理論上bool只占用一個字節(jié),如果多個bool變量定義在一起,可能會各占一個bit,這取決于編譯器的實現(xiàn)true代表真值,編譯器內部用1來表示false代表非真值,編譯器內部用0來表示bool類型只有true(非0)和false(0)兩個值C+斕譯器會在賦值時將非0值轉換為true,0值轉換為false*/intmain(intargc,char*argv)inta;boolb=true;printf(b=%d,sizeof(b)=%dn,b,sizeof(b);b=4;a=b
17、;printf(a=%d,b=%dn,a,b);b=-4;a=b;printf(a=%d,b=%dn,a,b);a=10;b=a;printf(a=%d,b=%dn,a,b);b=0;printf(b=%dn,b);system(pause);return0;4.8三目運算符功能增強1 三目運算符在 C 和 C+編譯器的表現(xiàn)intmain()inta=10;intb=20;返回一個最小數(shù)并且給最小數(shù)賦值成3三目運算符是一個表達式,表達式不可能做左值(ab?a:b)=30;printf(a=%d,b=%dn,a,b);system(pause);return0;2 結論1)C語言返回變量的值C+
18、詡言是返回變量本身C語言中的三目運算符返回的是變量值,不能作為左值使用C+用的三目運算符可直接返回變量本身,因此可以出現(xiàn)在程序的任何地方2)注意:三目運算符可能返回的值中如果有一個是常量值,則不能作為左值使用(a當左值的條件:要有內存空間;C+編譯器幫助程序員取了一個地址而已思考:如何讓C中的三目運算法當左值呢?5C/C+中的const1const基礎知識(用法、含義、好處)intmain()(constinta;intconstb;constint*c;int*constd;constint*conste;return0;)Intfunc1(const)初級理解:const是定義常量=con
19、st意味著只讀/第一個第二個意思一樣代表一個常整形數(shù)第三個c是一個指向常整形數(shù)的指針(所指向的內存數(shù)據(jù)不能被修改,但是本身可以修改)第四個d常指針(指針變量不能被修改,但是它所指向內存空間可以被修改)第五個e一個指向常整形的常指針(指針和它所指向的內存空間,均不能被修改)Const好處/合理的利用const,/1指針做函數(shù)參數(shù),可以有效的提高代碼可讀性,減少bug;/2清楚的分清參數(shù)的輸入和輸出特性intsetTeacher_err(constTeacher*p)Const修改形參的時候,在利用形參不能修改指針所向的內存空間2C中“冒牌貨”intmain()(constinta=10;int*
20、p=(int*)&a;printf(a=%dn,a);*p=11;printf(a=%dn,a);printf(Hellon);return0;解釋:C+編譯器對const常量的處理當碰見常量聲明時,在符號表中放入常量=問題:那有如何解釋取地址編譯過程中若發(fā)現(xiàn)使用常量則直接以符號表中的值替換編譯過程中若發(fā)現(xiàn)對const使用了extern或者&操作符,則給對應的常量分配存儲空間(兼容C)?聯(lián)想:int&a=1(err)&constint&a=10(ok)?C+中const符號表原理圖注意:C+編譯器雖然可能為const常量分配空間,但不會使用其存儲空間中的
21、值。結論:C語言中的const變量C語言中const變量是只讀變量,有自己的存儲空間C+中白cconst常量可能分配存儲空間,也可能不分配存儲空間當const常量為全局,并且需要在其它文件中使用當使用&操作符取const常量的地址3const和#define相同之處/練習解釋為什么/#defineN10intmain()constinta=1;constintb=2;intarraya+b=0;inti=0;for(i=0;i(a+b);i+)printf(array%d=%dn,i,arrayi);getchar();return0;C+中白Cconst修飾的,是一個真正的常量,而不
22、是C中變量(只讀)。在const修飾的常量編譯期間,就已經(jīng)確定下來了。4const和#define的區(qū)別對比加深C+中白const常量類似于宏定義constintc=5;#definec5C+中白const常量與宏定義不同const常量是由編譯器處理的,提供類型檢查和作用域檢查宏定義由預處理器處理,單純的文本替換/在func1定義a,在func2中能使用嗎?在func1中定義的b,在func2中能使用嗎?sivoidfun1()#definea10constintb=20;#undefa#undefvoidfun2()printf(a=%dn,a);/printf(b=%dn,b);intma
23、in()fun1();fun2();return0;)5結論C語言中的const變量C語言中const變量是只讀變量,有自己的存儲空間C+中白Cconst常量可能分配存儲空間,也可能不分配存儲空間當const常量為全局,并且需要在其它文件中使用,會分配存儲空間當使用&操作符,取const常量的地址時,會分配存儲空間當constint&a=10;const修飾引用時,也會分配存儲空間6引用專題講座1引用(普通引用)變量名回顧變量名實質上是一段連續(xù)存儲空間的別名,是一個標號(門牌號)程序中通過變量來申請并命名內存空間通過變量的名字可以使用存儲空間問題1:對一段連續(xù)的內存空間只能取一
24、個別名嗎?1 引用概念在C+中新增加了引用的概念引用可以看作一個已定義變量的別名弓I用的語法:Type&name=var;引用做函數(shù)參數(shù)那?(引用作為函數(shù)參數(shù)聲明時不進行初始化)voidmain01()inta=10;/c編譯器分配4個字節(jié)內存。a內存空間的別名int&b=a;/b就是a的別名。a=11;/直接賦值int*p=&a;*p=12;a)b)c)d)printf(a%dn,a);)b=14;printf(a:%db:%d,a,b);system(pause);)2 引用是 C+的概念屬于C+斕譯器對C的擴展問題:C 中可以編譯通過嗎?intmain()inta
25、=0;int&b=a;/int*constb=&ab=11;/*b=11;return0;)結論:請不要用 a 勺語法考慮 b=113 引用做函數(shù)參數(shù)普通引用在聲明時必須用其它的變量進行初始化,引用作為函數(shù)參數(shù)聲明時不進行初始化/05復雜數(shù)據(jù)類型的引用structTeachercharname64;intage;);voidprintfT(Teacher*pT)coutageendl;)/pT是t1的別名,相當于修改了t1voidprintfT2(Teacher&pT)/coutpT.ageendl;pT.age=33;)/pT和t1的是兩個不同的變量voidprint
26、fT3(TeacherpT)(coutpT.agepT=t1printf(t1.age:%dn,t1.age);/35couthello.)(intt=*aF=t;return0,)inta=10;int&b=a;/b 是 a 的別名,請問 c+編譯器后面做了什么工作?b=11;coutaendl;printf(a:%dn,a);printf(b:%dn,b);printf(&a:%dn,&a);printf(&b:%dn,&b);/請思考:對同一內存空間可以取好幾個名字嗎?system(pause);return0;單獨定義的引用時,必須初始化;說明很像一個常量思考2:普通引用有自己的空間嗎?structTeacerint&a;int&b;intmain()printf(sizeof(Teacher)%dn,sizeof(Teacer);system(pause);return0;引用是一個有地址,引用是常量。char*constp6 引用的本質1)引
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024桂林山水職業(yè)學院輔導員招聘筆試真題
- 綿陽江油市總醫(yī)院招聘員額工作人員筆試真題2024
- 智慧鄉(xiāng)村導視系統(tǒng)的設計原則與應用實踐
- 湘教版勞動實踐六年級下冊專題4 項目2 任務3《打磨拋光、上油保護》教案
- 2024年青海省鄉(xiāng)村振興局下屬事業(yè)單位真題
- 2025年事業(yè)單位考試公共基礎知識考試練習題庫100題【答案】
- 項目風險管理合同
- 2025年木材加工、處理機械項目建議書
- 創(chuàng)新教育設計啟迪未來思維
- 智能教室中的教育機器人-未來教育的探索
- 腦卒中溶栓護理課件
- 2025年城建技師考試題庫及答案
- 2025年中國LTCC技術行業(yè)市場現(xiàn)狀、前景分析研究報告(智研咨詢發(fā)布)
- 租賃住房培訓課件下載
- 房管員試題資料
- 2025至2030中國扭蛋機行業(yè)市場發(fā)展現(xiàn)狀及商業(yè)模式與投融資戰(zhàn)略報告
- 2024年蘇州昆山國創(chuàng)投資集團有限公司招聘筆試真題
- 商場吸煙區(qū)管理制度
- 2025年四川省成都市中考地理真題(原卷版)
- 糖尿病足截肢術后護理
- 廣東省東莞市2022-2023學年高二下學期期末物理試題(含答案)
評論
0/150
提交評論