




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、傳智播客C+課程講義 1、C+對(duì)C的擴(kuò)展1簡(jiǎn)單的C+程序1.1求圓的周長(zhǎng)和面積 數(shù)據(jù)描述:半徑,周長(zhǎng),面積均用實(shí)型數(shù)表示數(shù)據(jù)處理:輸入半徑 r;計(jì)算周長(zhǎng) = 2*r ;計(jì)算面積 = * r2 ;輸出半徑,周長(zhǎng),面積;方法1:用結(jié)構(gòu)化方法編程,求圓的周長(zhǎng)和面積 / count the girth and area of circle#includeusing name std;void main () double r, girth, area ; const double PI = 3.1415 ; cout r ; /輸入 girth = 2 * PI * r ; area = PI * r
2、 * r ; cout radius = r endl ; cout girth = girth endl ; cout area = area endl ;方法2:用面向?qū)ο蠓椒ň幊?,求圓的周長(zhǎng)和面積#include using name std;class Circle double radius ; /成員變量 public : /類(lèi)的訪(fǎng)問(wèn)控制 void Set_Radius( double r ) radius = r ; /成員函數(shù) double Get_Radius() return radius ; /通過(guò)成員函數(shù)設(shè)置成員變量 double Get_Girth() return
3、2 * 3.14f * radius ; /通過(guò)成員函數(shù)獲取成員變量 double Get_Area() return 3.14f * radius * radius ; ;void main() Circle A, B ; /用類(lèi)定義對(duì)象 A.Set_Radius( 6.23 ) ; /類(lèi)的調(diào)用 cout A.Radius = A.Get_Radius() endl ; cout A.Girth = A.Get_Girth() endl ; cout A.Area = A.Get_Area() endl ; B.Set_Radius( 10.5 ) ; cout B.radius = B.G
4、et_Radius() endl ; cout B.Girth= B.Get_Girth() endl ; cout B.Area = B.Get_Area() endl ; 總結(jié):建立類(lèi)、對(duì)象、成員變量、成員函數(shù),輸入輸入流基本概念。1.2初學(xué)者易犯錯(cuò)誤模型/ demo02_circle_err.cpp#includeusing namespace std;/c+的命名空間class circlepublic:double r;double pi = 3.1415926;double area = pi*r*r;int main()circle pi;cout 請(qǐng)輸入area pi.r;co
5、ut pi.area endl;/亂碼system(pause);return 0;總結(jié):從內(nèi)存四區(qū)的角度,解釋為什么會(huì)出現(xiàn)亂碼理解為什么需要成員函數(shù)2程序設(shè)計(jì)方法的發(fā)展歷程面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)方法 設(shè)計(jì)思路自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。程序結(jié)構(gòu):按功能劃分為若干個(gè)基本模塊,形成一個(gè)樹(shù)狀結(jié)構(gòu)。各模塊間的關(guān)系盡可能簡(jiǎn)單,功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成。其模塊化實(shí)現(xiàn)的具體方法是使用子程序。優(yōu)點(diǎn):有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開(kāi)發(fā)和維護(hù)。缺點(diǎn):可重用性差、數(shù)據(jù)安全性差、難以開(kāi)發(fā)大型軟
6、件和圖形界面的應(yīng)用軟件把數(shù)據(jù)和處理數(shù)據(jù)的過(guò)程分離為相互獨(dú)立的實(shí)體。當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過(guò)程都要進(jìn)行相應(yīng)的修改。每一種相對(duì)于老問(wèn)題的新方法都要帶來(lái)額外的開(kāi)銷(xiāo)。圖形用戶(hù)界面的應(yīng)用程序,很難用過(guò)程來(lái)描述和實(shí)現(xiàn),開(kāi)發(fā)和維護(hù)也都很困難。面向?qū)ο蟮姆椒?將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法封裝在一起,作為一個(gè)相互依存、不可分離的整體對(duì)象。對(duì)同類(lèi)型對(duì)象抽象出其共性,形成類(lèi)。類(lèi)通過(guò)一個(gè)簡(jiǎn)單的外部接口,與外界發(fā)生關(guān)系。對(duì)象與對(duì)象之間通過(guò)消息進(jìn)行通信。面向?qū)ο蟮幕靖拍?對(duì)象一般意義上的對(duì)象:是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物??梢允怯行蔚模ū热缫惠v汽車(chē)),也可以是無(wú)形的(比如一項(xiàng)計(jì)劃)。是構(gòu)成世界的一個(gè)獨(dú)立單位,具
7、有靜態(tài)特征:可以用某種數(shù)據(jù)來(lái)描述動(dòng)態(tài)特征:對(duì)象所表現(xiàn)的行為或具有的功能面向?qū)ο蠓椒ㄖ械膶?duì)象:是系統(tǒng)中用來(lái)描述客觀(guān)事物的一個(gè)實(shí)體,它是用來(lái)構(gòu)成系統(tǒng)的一個(gè)基本單位。對(duì)象由一組屬性和一組行為構(gòu)成。屬性:用來(lái)描述對(duì)象靜態(tài)特征的數(shù)據(jù)項(xiàng)。行為:用來(lái)描述對(duì)象動(dòng)態(tài)特征的操作序列。類(lèi) 分類(lèi)人類(lèi)通常的思維方法分類(lèi)所依據(jù)的原則抽象忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類(lèi),得出一個(gè)抽象的概念。例如,石頭、樹(shù)木、汽車(chē)、房屋等都是人們?cè)陂L(zhǎng)期的生產(chǎn)和生活實(shí)踐中抽象出的概念。面向?qū)ο蠓椒ㄖ械念?lèi)具有相同屬性和服務(wù)的一組對(duì)象的集合為屬于該類(lèi)的全部對(duì)象提供了抽象的
8、描述,包括屬性和行為兩個(gè)主要部分。類(lèi)與對(duì)象的關(guān)系:猶如模具與鑄件之間的關(guān)系,一個(gè)屬于某類(lèi)的對(duì)象稱(chēng)為該類(lèi)的一個(gè)實(shí)例。封裝 也就是把客觀(guān)事物封裝成抽象的類(lèi),并且類(lèi)可以把自己的數(shù)據(jù)和方法只讓可信的類(lèi)或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單元。盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)外形成一個(gè)邊界(或者說(shuō)一道屏障),只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。繼承對(duì)于軟件復(fù)用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟件開(kāi)發(fā)效率的重要原因之一。定義:特殊類(lèi)的對(duì)象擁有其一般類(lèi)的全部屬性與服務(wù),稱(chēng)作特殊類(lèi)對(duì)一般類(lèi)的繼承。例如:將輪船作為一個(gè)一般類(lèi),客輪便是一個(gè)特殊類(lèi)。多態(tài) 多態(tài)是指在一般類(lèi)
9、中定義的屬性或行為,被特殊類(lèi)繼承之后,可以具有不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在一般類(lèi)及其各個(gè)特殊類(lèi)中具有不同的語(yǔ)義。面向?qū)ο蟮能浖こ?面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用。它包括:面向?qū)ο蟮姆治觯∣OA)面向?qū)ο蟮脑O(shè)計(jì)(OOD)面向?qū)ο蟮木幊蹋∣OP)面向?qū)ο蟮臏y(cè)試(OOT)面向?qū)ο蟮能浖S護(hù)(OOSM)總結(jié):面向過(guò)程程序設(shè)計(jì):數(shù)據(jù)結(jié)構(gòu) + 算法主要解決科學(xué)計(jì)算問(wèn)題,用戶(hù)需求簡(jiǎn)單而固定特點(diǎn):分析解決問(wèn)題所需要的步驟利用函數(shù)實(shí)現(xiàn)各個(gè)步驟依次調(diào)用函數(shù)解決問(wèn)題問(wèn)題:軟件可重用性差軟件可維護(hù)性差構(gòu)建的軟件無(wú)法滿(mǎn)足用戶(hù)需求面向?qū)ο蟪绦蛟O(shè)計(jì):由現(xiàn)實(shí)世界建立軟
10、件模型將現(xiàn)實(shí)世界中的事物直接映射到程序中,可直接滿(mǎn)足用戶(hù)需求特點(diǎn):直接分析用戶(hù)需求中涉及的各個(gè)實(shí)體在代碼中描述現(xiàn)實(shí)世界中的實(shí)體在代碼中關(guān)聯(lián)各個(gè)實(shí)體協(xié)同工作解決問(wèn)題優(yōu)勢(shì):構(gòu)建的軟件能夠適應(yīng)用戶(hù)需求的不斷變化直接利用面向過(guò)程方法的優(yōu)勢(shì)而避開(kāi)其劣勢(shì)3 C語(yǔ)言和C+語(yǔ)言關(guān)系C語(yǔ)言是在實(shí)踐的過(guò)程中逐步完善起來(lái)的沒(méi)有深思熟慮的設(shè)計(jì)過(guò)程使用時(shí)存在很多“灰色地帶” 殘留量過(guò)多低級(jí)語(yǔ)言的特征 直接利用指針進(jìn)行內(nèi)存操作C語(yǔ)言的目標(biāo)是高效最終程序執(zhí)行效率的高效當(dāng)面向過(guò)程方法論暴露越來(lái)越多的缺陷的時(shí)候,業(yè)界開(kāi)始考慮在工程項(xiàng)目中引入面向?qū)ο蟮脑O(shè)計(jì)方法,而第一個(gè)需要解決的問(wèn)題就是:高效的面向?qū)ο笳Z(yǔ)言,并且能夠兼容已經(jīng)存在
11、的代碼。C語(yǔ)言 + 面向?qū)ο蠓椒ㄕ?Objective C /C+C語(yǔ)言和C+并不是對(duì)立的競(jìng)爭(zhēng)關(guān)系C+是C語(yǔ)言的加強(qiáng),是一種更好的C語(yǔ)言C+是以C語(yǔ)言為基礎(chǔ)的,并且完全兼容C語(yǔ)言的特性學(xué)習(xí)C+并不會(huì)影響原有的C語(yǔ)言知識(shí),相反會(huì)根據(jù)加深對(duì)C的認(rèn)知;學(xué)習(xí)C+可以接觸到更多的軟件設(shè)計(jì)方法,并帶來(lái)更多的機(jī)會(huì)。C+是一種更強(qiáng)大的C,通過(guò)學(xué)習(xí)C+能夠掌握更多的軟件設(shè)計(jì)方法C+是Java/C#/D等現(xiàn)代開(kāi)發(fā)語(yǔ)言的基礎(chǔ),學(xué)習(xí)C+后能夠快速掌握這些語(yǔ)言3)C+是各大知名軟件企業(yè)挑選人才的標(biāo)準(zhǔn)之一 4 C+對(duì)C的加強(qiáng)4.1 namespace命名空間1 C+命名空間基本常識(shí)所謂namespace,是指標(biāo)識(shí)符的各種
12、可見(jiàn)范圍。C+標(biāo)準(zhǔn)程序庫(kù)中的所有標(biāo)識(shí)符都被定義于一個(gè)名為std的namespace中。一 :和格式不一樣,前者沒(méi)有后綴,實(shí)際上,在你的編譯器include文件夾里面可以看到,二者是兩個(gè)文件,打開(kāi)文件就會(huì)發(fā)現(xiàn),里面的代碼是不一樣的。后綴為.h的頭文件c+標(biāo)準(zhǔn)已經(jīng)明確提出不支持了,早些的實(shí)現(xiàn)將標(biāo)準(zhǔn)庫(kù)功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c+標(biāo)準(zhǔn)為了和C區(qū)別開(kāi),也為了正確使用命名空間,規(guī)定頭文件不使用后綴.h。 因此,1)當(dāng)使用時(shí),相當(dāng)于在c中調(diào)用庫(kù)函數(shù),使用的是全局命名空間,也就是早期的c+實(shí)現(xiàn);2)當(dāng)使用的時(shí)候,該頭文件沒(méi)有定義全局命名空間,必須使用namespace std;這樣才
13、能正確使用cout。二: 由于namespace的概念,使用C+標(biāo)準(zhǔn)程序庫(kù)的任何標(biāo)識(shí)符時(shí),可以有三種選擇:1、直接指定標(biāo)識(shí)符。例如std:ostream而不是ostream。完整語(yǔ)句如下: std:cout std:hex 3.4 std:endl;2、使用using關(guān)鍵字。 using std:cout; using std:endl; using std:cin; 以上程序可以寫(xiě)成 cout std:hex 3.4 endl;3、最方便的就是使用using namespace std; 例如: using namespace std;這樣命名空間std內(nèi)定義的所有標(biāo)識(shí)符都有效(曝光)。就好
14、像它們被聲明為全局變量一樣。那么以上語(yǔ)句可以如下寫(xiě): cout hex 3.4 endl;因?yàn)闃?biāo)準(zhǔn)庫(kù)非常的龐大,所以程序員在選擇的類(lèi)的名稱(chēng)或函數(shù)名 時(shí)就很有可能和標(biāo)準(zhǔn)庫(kù)中的某個(gè)名字相同。所以為了避免這種情況所造成的名字沖突,就把標(biāo)準(zhǔn)庫(kù)中的一切都被放在名字空間std中。但這又會(huì)帶來(lái)了一個(gè)新問(wèn) 題。無(wú)數(shù)原有的C+代碼都依賴(lài)于使用了多年的偽標(biāo)準(zhǔn)庫(kù)中的功能,他們都是在全局空間下的。所以就有了 和等等這樣的頭文件,一個(gè)是為了兼容以前的C+代碼,一個(gè)是為了支持新的標(biāo)準(zhǔn)。命名空間std封裝的是標(biāo)準(zhǔn)程序庫(kù)的名稱(chēng),標(biāo)準(zhǔn)程序庫(kù)為了和以前的頭文件區(qū)別,一般不加.h2 C+命名空間定義及使用語(yǔ)法/*在C+中,名稱(chēng)(n
15、ame)可以是符號(hào)常量、變量、宏、函數(shù)、結(jié)構(gòu)、枚舉、類(lèi)和對(duì)象等等。為了避免,在大規(guī)模程序的設(shè)計(jì)中,以及在程序員使用各種各樣的C+庫(kù)時(shí),這些標(biāo)識(shí)符的命名發(fā)生沖突,標(biāo)準(zhǔn)C+引入了關(guān)鍵字namespace(命名空間/名字空間/名稱(chēng)空間/名域),可以更好地控制標(biāo)識(shí)符的作用域。*/*std是c+標(biāo)準(zhǔn)命名空間,c+標(biāo)準(zhǔn)程序庫(kù)中的所有標(biāo)識(shí)符都被定義在std中,比如標(biāo)準(zhǔn)庫(kù)中的類(lèi)iostream、vector等都定義在該命名空間中,使用時(shí)要加上using聲明(using namespace std) 或using指示(如std:string、std:vector).*/*C中的命名空間在C語(yǔ)言中只有一個(gè)全局作用
16、域C語(yǔ)言中所有的全局標(biāo)識(shí)符共享同一個(gè)作用域標(biāo)識(shí)符之間可能發(fā)生沖突 C+中提出了命名空間的概念命名空間將全局作用域分成不同的部分不同命名空間中的標(biāo)識(shí)符可以同名而不會(huì)發(fā)生沖突命名空間可以相互嵌套全局作用域也叫默認(rèn)命名空間*/*C+命名空間的定義:namespace name */*C+命名空間的使用:使用整個(gè)命名空間:using namespace name;使用命名空間中的變量:using name:variable;使用默認(rèn)命名空間中的變量::variable默認(rèn)情況下可以直接使用默 認(rèn)命名空間中的所有標(biāo)識(shí)符*/3 C+命名空間編程實(shí)踐namespace NameSpaceAint a = 0
17、;namespace NameSpaceBint a = 1;namespace NameSpaceCstruct Teacherchar name10;int age;int main()using namespace NameSpaceA;using NameSpaceB:NameSpaceC:Teacher;printf(a = %dn, a);printf(a = %dn, NameSpaceB:a);NameSpaceB:NameSpaceC:Teacher t2Teacher t1 = aaa, 3;printf( = %sn, );printf(t1.age = %dn, t1.
18、age);system(pause);return 0;4 結(jié)論當(dāng)使用的時(shí)候,該 HYPERLINK /view/668911.htm t _blank 頭文件沒(méi)有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。若不引入using namespace std ,需要這樣做。std:cout。c+標(biāo)準(zhǔn)為了和C區(qū)別開(kāi),也為了正確使用命名空間,規(guī)定 HYPERLINK /view/668911.htm t _blank 頭文件不使用后綴.h。C+命名空間的定義:namespace name using namespace NameSpaceA;namespce定義可嵌
19、套。4.2 “實(shí)用性”增加#include iostreamusing namespace std;/C語(yǔ)言中的變量都必須在作用域開(kāi)始的位置定義!/C+中更強(qiáng)調(diào)語(yǔ)言的“實(shí)用性”,所有的變量都可以在需要使用時(shí)再定義。int main11()int i = 0;printf(ddd);int k;system(pause);return 0;4.3 register關(guān)鍵字增強(qiáng) /register關(guān)鍵字 請(qǐng)求編譯器讓變量a直接放在寄存器里面,速度快/在c語(yǔ)言中 register修飾的變量 不能取地址,但是在c+里面做了內(nèi)容/*/1register關(guān)鍵字的變化register關(guān)鍵字請(qǐng)求“編譯器”將局部
20、變量存儲(chǔ)于寄存器中C語(yǔ)言中無(wú)法取得register變量地址在C+中依然支持register關(guān)鍵字C+編譯器有自己的優(yōu)化方式,不使用register也可能做優(yōu)化C+中可以取得register變量的地址/2C+編譯器發(fā)現(xiàn)程序中需要取register變量的地址時(shí),register對(duì)變量的聲明變得無(wú)效。/3早期C語(yǔ)言編譯器不會(huì)對(duì)代碼進(jìn)行優(yōu)化,因此register變量是一個(gè)很好的補(bǔ)充。*/int main22()register int a = 0; printf(&a = %xn, &a);system(pause);return 0;其他補(bǔ)充:請(qǐng)閱讀register關(guān)鍵字常識(shí)課外閱讀.docx4.4
21、變量檢測(cè)增強(qiáng)/*在C語(yǔ)言中,重復(fù)定義多個(gè)同名的全局變量是合法的在C+中,不允許定義多個(gè)同名的全局變量C語(yǔ)言中多個(gè)同名的全局變量最終會(huì)被鏈接到全局?jǐn)?shù)據(jù)區(qū)的同一個(gè)地址空間上int g_var;int g_var = 1;C+直接拒絕這種二義性的做法。*/int main(int argc, char *argv)printf(g_var = %dn, g_var);return 0;4.5 struct類(lèi)型加強(qiáng) struct類(lèi)型的加強(qiáng):C語(yǔ)言的struct定義了一組變量的集合,C編譯器并不認(rèn)為這是一種新的類(lèi)型C+中的struct是一個(gè)新類(lèi)型的定義聲明struct Student char name
22、100; int age;int main(int argc, char *argv) Student s1 = wang, 1; Student s2 = wang2, 2; return 0;4.6 C+中所有的變量和函數(shù)都必須有類(lèi)型/*C+中所有的變量和函數(shù)都必須有類(lèi)型C語(yǔ)言中的默認(rèn)類(lèi)型在C+中是不合法的函數(shù)f的返回值是什么類(lèi)型,參數(shù)又是什么類(lèi)型?函數(shù)g可以接受多少個(gè)參數(shù)?*/更換成.cpp試試f(i)printf(i = %dn, i);g()return 5;int main(int argc, char *argv)f(10);printf(g() = %dn, g(1, 2, 3
23、, 4, 5);getchar();return 0;總結(jié):/*在C語(yǔ)言中int f( );表示返回值為int,接受任意參數(shù)的函數(shù)int f(void);表示返回值為int的無(wú)參函數(shù)在C+中int f( );和int f(void)具有相同的意義,都表示返回值為int的無(wú)參函數(shù)*/C+更加強(qiáng)調(diào)類(lèi)型,任意的程序元素都必須顯示指明類(lèi)型4.2-4.6屬于語(yǔ)法級(jí)別的增強(qiáng)。4.7新增Bool類(lèi)型關(guān)鍵字 /*C+中的布爾類(lèi)型C+在C語(yǔ)言的基本類(lèi)型系統(tǒng)之上增加了boolC+中的bool可取的值只有true和false理論上bool只占用一個(gè)字節(jié),如果多個(gè)bool變量定義在一起,可能會(huì)各占一個(gè)bit,這取決于
24、編譯器的實(shí)現(xiàn)true代表真值,編譯器內(nèi)部用1來(lái)表示false代表非真值,編譯器內(nèi)部用0來(lái)表示bool類(lèi)型只有true(非0)和false(0)兩個(gè)值C+編譯器會(huì)在賦值時(shí)將非0值轉(zhuǎn)換為true,0值轉(zhuǎn)換為false*/int main(int argc, char *argv)int a;bool b = true;printf(b = %d, sizeof(b) = %dn, b, sizeof(b);b = 4;a = b;printf(a = %d, b = %dn, a, b);b = -4;a = b;printf(a = %d, b = %dn, a, b);a = 10;b = a
25、;printf(a = %d, b = %dn, a, b);b = 0;printf(b = %dn, b);system(pause);return 0;4.8三目運(yùn)算符功能增強(qiáng)1三目運(yùn)算符在C和C+編譯器的表現(xiàn) int main()int a = 10;int b = 20;/返回一個(gè)最小數(shù) 并且給最小數(shù)賦值成3/三目運(yùn)算符是一個(gè)表達(dá)式 ,表達(dá)式不可能做左值(a b ? a : b )= 30;printf(a = %d, b = %dn, a, b); system(pause);return 0;2結(jié)論 1)C語(yǔ)言返回變量的值 C+語(yǔ)言是返回變量本身C語(yǔ)言中的三目運(yùn)算符返回的是變量值
26、,不能作為左值使用C+中的三目運(yùn)算符可直接返回變量本身,因此可以出現(xiàn)在程序的任何地方2)注意:三目運(yùn)算符可能返回的值中如果有一個(gè)是常量值,則不能作為左值使用(a 當(dāng)左值的條件:要有內(nèi)存空間;C+編譯器幫助程序員取了一個(gè)地址而已思考:如何讓C中的三目運(yùn)算法當(dāng)左值呢?5 C/C+中的const 1 const基礎(chǔ)知識(shí)(用法、含義、好處)int main()const int a;int const b;const int *c;int * const d;const int * const e ;return 0;Int func1(const )初級(jí)理解:const是定義常量=const意味著只
27、讀含義:/第一個(gè)第二個(gè)意思一樣 代表一個(gè)常整形數(shù)/第三個(gè) c是一個(gè)指向常整形數(shù)的指針(所指向的內(nèi)存數(shù)據(jù)不能被修改,但是本身可以修改)/第四個(gè) d 常指針(指針變量不能被修改,但是它所指向內(nèi)存空間可以被修改)/第五個(gè) e一個(gè)指向常整形的常指針(指針和它所指向的內(nèi)存空間,均不能被修改)Const好處/合理的利用const,/1指針做函數(shù)參數(shù),可以有效的提高代碼可讀性,減少bug;/2清楚的分清參數(shù)的輸入和輸出特性int setTeacher_err( const Teacher *p)Const修改形參的時(shí)候,在利用形參不能修改指針?biāo)虻膬?nèi)存空間2 C中“冒牌貨”int main()const i
28、nt a = 10;int *p = (int*)&a; printf(a=%dn, a);*p = 11;printf(a=%dn, a);printf(Hello.n);return 0;解釋?zhuān)篊+編譯器對(duì)const常量的處理當(dāng)碰見(jiàn)常量聲明時(shí),在符號(hào)表中放入常量 =問(wèn)題:那有如何解釋取地址編譯過(guò)程中若發(fā)現(xiàn)使用常量則直接以符號(hào)表中的值替換編譯過(guò)程中若發(fā)現(xiàn)對(duì)const使用了extern或者&操作符,則給對(duì)應(yīng)的常量分配存儲(chǔ)空間(兼容C)?聯(lián)想: int &a = 1(err) & const int &a = 10(ok)? C+中const符號(hào)表原理圖注意:C+編譯器雖然可能為const常量分
29、配空間,但不會(huì)使用其存儲(chǔ)空間中的值。結(jié)論:C語(yǔ)言中的const變量C語(yǔ)言中const變量是只讀變量,有自己的存儲(chǔ)空間C+中的const常量可能分配存儲(chǔ)空間,也可能不分配存儲(chǔ)空間 當(dāng)const常量為全局,并且需要在其它文件中使用當(dāng)使用&操作符取const常量的地址3 const和#define相同之處/練習(xí) 解釋為什么/#define N 10 int main() const int a = 1; const int b = 2; int arraya + b = 0; int i = 0; for(i=0; i(a+b); i+) printf(array%d = %dn, i, array
30、i); getchar(); return 0;C+中的const修飾的,是一個(gè)真正的常量,而不是C中變量(只讀)。在const修飾的常量編譯期間,就已經(jīng)確定下來(lái)了。4 const和#define的區(qū)別 對(duì)比加深C+中的const常量類(lèi)似于宏定義const int c = 5; #define c 5C+中的const常量與宏定義不同const常量是由編譯器處理的,提供類(lèi)型檢查和作用域檢查 宏定義由預(yù)處理器處理,單純的文本替換/在func1定義a,在func2中能使用嗎?/在func1中定義的b,在func2中能使用嗎?練習(xí)void fun1() #define a 10 const int
31、b = 20; /#undef a # undefvoid fun2() printf(a = %dn, a); /printf(b = %dn, b);int main() fun1(); fun2(); return 0;5 結(jié)論C語(yǔ)言中的const變量C語(yǔ)言中const變量是只讀變量,有自己的存儲(chǔ)空間C+中的const常量可能分配存儲(chǔ)空間,也可能不分配存儲(chǔ)空間 當(dāng)const常量為全局,并且需要在其它文件中使用,會(huì)分配存儲(chǔ)空間當(dāng)使用&操作符,取const常量的地址時(shí),會(huì)分配存儲(chǔ)空間當(dāng)const int &a = 10; const修飾引用時(shí),也會(huì)分配存儲(chǔ)空間6引用專(zhuān)題講座1引用(普通引用)
32、變量名回顧變量名實(shí)質(zhì)上是一段連續(xù)存儲(chǔ)空間的別名,是一個(gè)標(biāo)號(hào)(門(mén)牌號(hào)) 程序中通過(guò)變量來(lái)申請(qǐng)并命名內(nèi)存空間 通過(guò)變量的名字可以使用存儲(chǔ)空間問(wèn)題1:對(duì)一段連續(xù)的內(nèi)存空間只能取一個(gè)別名嗎?1 引用概念在C+中新增加了引用的概念引用可以看作一個(gè)已定義變量的別名引用的語(yǔ)法:Type& name = var; d) 引用做函數(shù)參數(shù)那?(引用作為函數(shù)參數(shù)聲明時(shí)不進(jìn)行初始化)void main01()int a = 10; /c編譯器分配4個(gè)字節(jié)內(nèi)存。a內(nèi)存空間的別名int &b = a; /b就是a的別名。a =11; /直接賦值int *p = &a;*p = 12;printf(a %d n,a);b
33、= 14; printf(a:%d b:%d, a, b);system(pause);2 引用是C+的概念 屬于C+編譯器對(duì)C的擴(kuò)展問(wèn)題:C中可以編譯通過(guò)嗎?int main()int a = 0;int &b = a; /int * const b = &a b = 11; /*b = 11;return 0;結(jié)論:請(qǐng)不要用C的語(yǔ)法考慮 b=113 引用做函數(shù)參數(shù) 普通引用在聲明時(shí)必須用其它的變量進(jìn)行初始化,引用作為函數(shù)參數(shù)聲明時(shí)不進(jìn)行初始化/05復(fù)雜數(shù)據(jù)類(lèi)型 的引用struct Teacherchar name64;int age ;void printfT(Teacher *pT)co
34、utageendl;/pT是t1的別名 ,相當(dāng)于修改了t1void printfT2(Teacher &pT)/coutpT.ageendl;pT.age = 33;/pT和t1的是兩個(gè)不同的變量void printfT3(Teacher pT)coutpT.age pT = t1printf(t1.age:%d n, t1.age); /35couthello.endl; system(pause);return ;4 引用的意義 1)引用作為其它變量的別名而存在,因此在一些場(chǎng)合可以代替指針2)引用相對(duì)于指針來(lái)說(shuō)具有更好的可讀性和實(shí)用性5 引用本質(zhì)思考思考1:C+編譯器背后做了什么工作?in
35、t main() int a = 10;int &b = a;/b是a的別名,請(qǐng)問(wèn)c+編譯器后面做了什么工作?b = 11;coutab?&a:&b) = 111;/當(dāng)被調(diào)用的函數(shù)當(dāng)左值的時(shí)候,必須返回一個(gè)引用。j1() = 100; /編譯器幫我們打造了環(huán)境j1();*(j2() = 200; /相當(dāng)于我們程序員手工的打造 做左值的條件j2();system(pause);返回值是形參,當(dāng)引用int g1(int *p)*p = 100;return *p;int& g2(int *p) /*p = 100;return *p;/當(dāng)我們使用引用語(yǔ)法的時(shí)候 ,我們不去關(guān)心編譯器引用是怎么做的/
36、當(dāng)我們分析亂碼這種現(xiàn)象的時(shí)候,我們才去考慮c+編譯器是怎么做的。void main23()int a1 = 10;a1 = g2(&a1);int &a2 = g2(&a1); /用引用去接受函數(shù)的返回值,是不是亂碼,關(guān)鍵是看返回的內(nèi)存空間是不是被編譯器回收了。printf(a1:%d n, a1);printf(a2:%d n, a2);system(pause);返回值非基礎(chǔ)類(lèi)型 struct Teacharchar name64;int age;/如果返回引用不是基礎(chǔ)類(lèi)型,是一個(gè)類(lèi),那么情況非常賦值。涉及到copy構(gòu)造函數(shù)和=操作重載,拋磚。struct Teacharchar name
37、64;int age;/如果返回引用不是基礎(chǔ)類(lèi)型,是一個(gè)類(lèi),那么情況非常賦值。涉及到copy構(gòu)造函數(shù)和=操作重載,拋磚。struct Teachar & OpTeacher(struct Teachar &t1)9指針引用 #include iostreamusing namespace std;struct Teacherchar name64;int age;int getTe(Teacher *myp )Teacher *p = (Teacher *)malloc(sizeof(Teacher);if (p =NULL)return -1;memset(p, 0, sizeof(Teac
38、her);p-age = 33;*myp = p; /return 0;/指針的引用而已int getTe2(Teacher* &myp)myp = (Teacher *)malloc(sizeof(Teacher);myp-age = 34;return 0;void main333()Teacher *p = NULL;/getTe(&p);getTe2(p);printf(age:%d n, p-age);system(pause);2常引用下面開(kāi)始進(jìn)入const引用難點(diǎn)1 使用變量初始化const引用 思考cost int &a = b PK const int &a = 10;?問(wèn)題
39、:const引用,在C+中可以聲明const引用const Type& name = var;const引用讓變量擁有只讀屬性 案例1:int main()int a = 10;const int &b = a; /int *p = (int *)&b;b = 11; /err/*p = 11; /只能用指針來(lái)改變了coutaendl;printf(a:%dn, a);printf(b:%dn, b);printf(&a:%dn, &a);printf(&b:%dn, &b);system(pause);return 0;案例2:void main41()int a = 10;const in
40、t &b = a; /const引用 使用變量a初始化a = 11;/b = 12; /通過(guò)引用修改a,對(duì)不起修改不了system(pause);struct Teacher1char name64;int age;void printTe2(const Teacher1 *const pt)/const引用讓變量(所指內(nèi)存空間)擁有只讀屬性void printTe(const Teacher1 &t)/t.age = 11;void main42()Teacher1 t1;t1.age = 33;printTe(t1);system(pause);2使用字面量常量初始化const引用思考:1
41、、用變量對(duì)const引用初始化,const引用分配內(nèi)存空間了嗎?2、用常量對(duì)const引用初始化,const引用分配內(nèi)存空間了嗎?void main()const int b = 10;printf(b:%d, &b);/int &a1 = 19; 如果不加const編譯失敗const int &a = 19;printf(&a:%d n, &a);system(pause);3 綜合案例void main()/普通引用int a = 10;int &b = a;/常量引用 :讓變量引用只讀屬性const int &c = a; /常量引用初始化 分為兩種/1 用變量 初始化 常量引用int
42、x = 20;const int& y = x;printf(y:%d n, y);/2 用常量 初始化 常量引用/int &m = 10; /引用是內(nèi)存空間的別名 字面量10沒(méi)有內(nèi)存空間 沒(méi)有方法做引用const int &m = 10; couthello.endl;system(pause);return ;3 const引用結(jié)論 1)Const & int e 相當(dāng)于 const int * const e2)普通引用 相當(dāng)于 int *const e13)當(dāng)使用常量(字面量)對(duì)const引用進(jìn)行初始化時(shí),C+編譯器會(huì)為常量值分配空間,并將引用名作為這段空間的別名4)使用字面量對(duì)con
43、st引用初始化后,將生成一個(gè)只讀變量4const修飾類(lèi) 后續(xù)課程介紹5綜合練習(xí)int& j()static int a = 0;return a;int& g()int a = 0;return a;int main()int a = g();int& b = g();j() = 10;printf(a = %dn, a);printf(b = %dn, b);printf(f() = %dn, f();system(pause);return 0;7C+對(duì)C的函數(shù)擴(kuò)展 1 inline內(nèi)聯(lián)函數(shù)C+中的const常量可以替代宏常數(shù)定義,如:const int A = 3; #define A
44、3C+中是否有解決方案替代宏代碼片段呢?(替代宏代碼片段就可以避免宏的副作用?。〤+中推薦使用內(nèi)聯(lián)函數(shù)替代宏代碼片段C+中使用inline關(guān)鍵字聲明內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)聲明時(shí)inline關(guān)鍵字必須和函數(shù)定義結(jié)合在一起,否則編譯器會(huì)直接忽略?xún)?nèi)聯(lián)請(qǐng)求。/宏替換和函數(shù)調(diào)用區(qū)別#include iostreamusing namespace std;#define MYFUNC(a, b) (a) (b) ? (a) : (b) inline int myfunc(int a, int b) return a m = m;this-n = n;return 0;protected:private:;int
45、 main()int rv =0;Test21 t1; /無(wú)參構(gòu)造函數(shù)的調(diào)用方法Test21 t2;/t1.init(100, 200);/t2.init(300, 400);coutt1.getM() t1.getN()endl;coutt2.getM() t2.getN()endl;/定義對(duì)象數(shù)組時(shí),沒(méi)有機(jī)會(huì)進(jìn)行顯示初始化Test21 arr3;/Test arr_23 = Test(1,3), Test(), Test();system(pause);return rv;3.2構(gòu)造函數(shù)的分類(lèi)及調(diào)用C+編譯器給程序員提供的對(duì)象初始化方案,高端大氣上檔次。/有參數(shù)構(gòu)造函數(shù)的三種調(diào)用方法cla
46、ss Testprivate:int a;int b;public:/無(wú)參數(shù)構(gòu)造函數(shù)Test();/帶參數(shù)的構(gòu)造函數(shù)Test(int a, int b);/賦值構(gòu)造函數(shù)Test(const Test &obj);public:void init(int _a, int _b)a = _a;b = _b;1無(wú)參數(shù)構(gòu)造函數(shù)調(diào)用方法: Test t1, t2;2有參構(gòu)造函數(shù)有參構(gòu)造函數(shù)的三種調(diào)用方法 /有參數(shù)構(gòu)造函數(shù)的三種調(diào)用方法class Test5private:int a;public:/帶參數(shù)的構(gòu)造函數(shù)Test5(int a)printf(na:%d, a);Test5(int a, int
47、 b)printf(na:%d b:%d, a, b);public:;int main55()Test5 t1(10); /c+編譯器默認(rèn)調(diào)用有參構(gòu)造函數(shù) 括號(hào)法 Test5 t2 = (20, 10); /c+編譯器默認(rèn)調(diào)用有參構(gòu)造函數(shù) 等號(hào)法Test5 t3 = Test5(30); /程序員手工調(diào)用構(gòu)造函數(shù) 產(chǎn)生了一個(gè)對(duì)象 直接調(diào)用構(gòu)造構(gòu)造函數(shù)法system(pause);return 0;3拷貝構(gòu)造函數(shù)調(diào)用時(shí)機(jī)賦值構(gòu)造函數(shù)的四種調(diào)用場(chǎng)景(調(diào)用時(shí)機(jī))第1和第2個(gè)調(diào)用場(chǎng)景 #include iostreamusing namespace std;class AApublic:AA() /
48、無(wú)參構(gòu)造函數(shù) 默認(rèn)構(gòu)造函數(shù)cout我是構(gòu)造函數(shù),自動(dòng)被調(diào)用了endl;AA(int _a) /無(wú)參構(gòu)造函數(shù) 默認(rèn)構(gòu)造函數(shù)a = _a; AA(const AA &obj2) cout我也是構(gòu)造函數(shù),我是通過(guò)另外一個(gè)對(duì)象obj2,來(lái)初始化我自己endl; a = obj2.a + 10; AA()cout我是析構(gòu)函數(shù),自動(dòng)被調(diào)用了endl;void getA()printf(a:%d n, a);protected:private:int a;/單獨(dú)搭建一個(gè)舞臺(tái)void ObjPlay01()AA a1; /變量定義/賦值構(gòu)造函數(shù)的第一個(gè)應(yīng)用場(chǎng)景/用對(duì)象1 初始化 對(duì)象2 AA a2 = a1;
49、 /定義變量并初始化 /初始化法a2 = a1; /用a1來(lái)=號(hào)給a2 編譯器給我們提供的淺copy第二個(gè)應(yīng)用場(chǎng)景/單獨(dú)搭建一個(gè)舞臺(tái)void ObjPlay02()AA a1(10); /變量定義/賦值構(gòu)造函數(shù)的第一個(gè)應(yīng)用場(chǎng)景/用對(duì)象1 初始化 對(duì)象2 AA a2(a1); /定義變量并初始化 /括號(hào)法/a2 = a1; /用a1來(lái)=號(hào)給a2 編譯器給我們提供的淺copya2.getA(); /注意:初始化操作 和 等號(hào)操作 是兩個(gè)不同的概念第3個(gè)調(diào)用場(chǎng)景#include iostreamusing namespace std;class Location public:Location( i
50、nt xx = 0 , int yy = 0 ) X = xx ; Y = yy ; cout Constructor Object.n ; Location( const Location & p ) /復(fù)制構(gòu)造函數(shù) X = p.X ; Y = p.Y ; cout Copy_constructor called. endl ; Location() cout X , Y Object destroyed. endl ; int GetX () return X ; int GetY () return Y ; private : int X , Y ; ;/alt + f8 排版void
51、f ( Location p ) cout Funtion: p.GetX() , p.GetY() endl ; void mainobjplay() Location A ( 1, 2 ) ; /形參是一個(gè)元素,函數(shù)調(diào)用,會(huì)執(zhí)行實(shí)參變量初始化形參變量f ( A ) ; void main() mainobjplay();system(pause);第4個(gè)調(diào)用場(chǎng)景 第四個(gè)應(yīng)用場(chǎng)景#include iostreamusing namespace std;class Location public:Location( int xx = 0 , int yy = 0 ) X = xx ; Y =
52、yy ; cout Constructor Object.n ; Location( const Location & p ) /復(fù)制構(gòu)造函數(shù) X = p.X ; Y = p.Y ; cout Copy_constructor called. endl ; Location() cout X , Y Object destroyed. endl ; int GetX () return X ; int GetY () return Y ; private : int X , Y ; ;/alt + f8 排版void f ( Location p ) cout Funtion: p.GetX(
53、) , p.GetY() endl ; Location g()Location A(1, 2);return A;/對(duì)象初始化操作 和 =等號(hào)操作 是兩個(gè)不同的概念/匿名對(duì)象的去和留,關(guān)鍵看,返回時(shí)如何接void mainobjplay() /若返回的匿名對(duì)象,賦值給另外一個(gè)同類(lèi)型的對(duì)象,那么匿名對(duì)象會(huì)被析構(gòu)/Location B;/B = g(); /用匿名對(duì)象 賦值 給B對(duì)象,然后匿名對(duì)象析構(gòu)/若返回的匿名對(duì)象,來(lái)初始化另外一個(gè)同類(lèi)型的對(duì)象,那么匿名對(duì)象會(huì)直接轉(zhuǎn)成新的對(duì)象Location B = g();cout傳智掃地僧測(cè)試endl; void main() mainobjplay()
54、;system(pause);4默認(rèn)構(gòu)造函數(shù)二個(gè)特殊的構(gòu)造函數(shù)1)默認(rèn)無(wú)參構(gòu)造函數(shù)當(dāng)類(lèi)中沒(méi)有定義構(gòu)造函數(shù)時(shí),編譯器默認(rèn)提供一個(gè)無(wú)參構(gòu)造函數(shù),并且其函數(shù)體為空2)默認(rèn)拷貝構(gòu)造函數(shù)當(dāng)類(lèi)中沒(méi)有定義拷貝構(gòu)造函數(shù)時(shí),編譯器默認(rèn)提供一個(gè)默認(rèn)拷貝構(gòu)造函數(shù),簡(jiǎn)單的進(jìn)行成員變量的值復(fù)制3.3構(gòu)造函數(shù)調(diào)用規(guī)則研究 1)當(dāng)類(lèi)中沒(méi)有定義任何一個(gè)構(gòu)造函數(shù)時(shí),c+編譯器會(huì)提供默認(rèn)無(wú)參構(gòu)造函數(shù)和默認(rèn)拷貝構(gòu)造函數(shù)2)當(dāng)類(lèi)中定義了拷貝構(gòu)造函數(shù)時(shí),c+編譯器不會(huì)提供無(wú)參數(shù)構(gòu)造函數(shù)3) 當(dāng)類(lèi)中定義了任意的非拷貝構(gòu)造函數(shù)(即:當(dāng)類(lèi)中提供了有參構(gòu)造函數(shù)或無(wú)參構(gòu)造函數(shù)),c+編譯器不會(huì)提供默認(rèn)無(wú)參構(gòu)造函數(shù)4 )默認(rèn)拷貝構(gòu)造函數(shù)成員變量簡(jiǎn)
55、單賦值總結(jié):只要你寫(xiě)了構(gòu)造函數(shù),那么你必須用。構(gòu)造析構(gòu)階段性總結(jié) 1)構(gòu)造函數(shù)是C+中用于初始化對(duì)象狀態(tài)的特殊函數(shù)2)構(gòu)造函數(shù)在對(duì)象創(chuàng)建時(shí)自動(dòng)被調(diào)用3)構(gòu)造函數(shù)和普通成員函數(shù)都遵循重載規(guī)則4)拷貝構(gòu)造函數(shù)是對(duì)象正確初始化的重要保證5)必要的時(shí)候,必須手工編寫(xiě)拷貝構(gòu)造函數(shù) =1個(gè)對(duì)象的初始化講完了,增加一個(gè)案例。3.4深拷貝和淺拷貝默認(rèn)復(fù)制構(gòu)造函數(shù)可以完成對(duì)象的數(shù)據(jù)成員值簡(jiǎn)單的復(fù)制 對(duì)象的數(shù)據(jù)資源是由指針指示的堆時(shí),默認(rèn)復(fù)制構(gòu)造函數(shù)僅作指針值復(fù)制1淺拷貝問(wèn)題拋出和分析深拷貝淺拷貝現(xiàn)象出現(xiàn)的原因2淺拷貝程序C+提供的解決方法顯示提供copy構(gòu)造函數(shù)顯示操作重載=號(hào)操作,不使用編譯器提供的淺copy
56、class Namepublic:Name(const char *pname)size = strlen(pname);pName = (char *)malloc(size + 1);strcpy(pName, pname);Name(Name &obj)/用obj來(lái)初始化自己pName = (char *)malloc(obj.size + 1);strcpy(pName, obj.pName);size = obj.size;Name()cout開(kāi)始析構(gòu)endl;if (pName!=NULL)free(pName);pName = NULL;size = 0;void operato
57、r=(Name &obj3)if (pName != NULL)free(pName);pName = NULL;size = 0;cout測(cè)試有沒(méi)有調(diào)用我。endl;/用obj3來(lái)=自己pName = (char *)malloc(obj3.size + 1);strcpy(pName, obj3.pName);size = obj3.size; protected:private:char *pName;int size;/對(duì)象的初始化 和 對(duì)象之間=號(hào)操作是兩個(gè)不同的概念void playObj()Name obj1(obj1.);Name obj2 = obj1; /obj2創(chuàng)建并初始
58、化Name obj3(obj3.);/重載=號(hào)操作符obj2 = obj3; /=號(hào)操作cout業(yè)務(wù)操作。5000a = a;this-b = b;this-c = c;printf(a:%d,b:%d,c:%d n, a, b, c);printf(ABC construct .n);ABC()printf(a:%d,b:%d,c:%d n, a, b, c);printf(ABC() .n);protected:private:int a;int b;int c;class MyDpublic:MyD():abc1(1,2,3),abc2(4,5,6),m(100)/MyD()coutMy
59、D()endl;MyD()coutMyD()endl;protected:private:ABC abc1; /c+編譯器不知道如何構(gòu)造abc1ABC abc2;const int m;int run()MyD myD;return 0;int main_dem03()run();system(pause);return 0;3.6構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序研究構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序1)當(dāng)類(lèi)中有成員變量是其它類(lèi)的對(duì)象時(shí),首先調(diào)用成員變量的構(gòu)造函數(shù),調(diào)用順序與聲明順序相同;之后調(diào)用自身類(lèi)的構(gòu)造函數(shù)2)析構(gòu)函數(shù)的調(diào)用順序與對(duì)應(yīng)的構(gòu)造函數(shù)調(diào)用順序相反3.7構(gòu)造函數(shù)和析構(gòu)函數(shù)綜合練習(xí)通過(guò)訓(xùn)練,
60、把所學(xué)知識(shí)點(diǎn)都穿起來(lái)1構(gòu)造析綜合訓(xùn)練demo10_構(gòu)造析構(gòu)練習(xí)強(qiáng)化.cpp(講解)展示分析過(guò)程,注意賦值構(gòu)函數(shù)的調(diào)用2匿名對(duì)象強(qiáng)化訓(xùn)練demo10_構(gòu)造析構(gòu)練習(xí)強(qiáng)化.cpp匿名對(duì)象生命周期匿名對(duì)象的去和留3匿名對(duì)象強(qiáng)化訓(xùn)練構(gòu)造中調(diào)用構(gòu)造demo11_匿名對(duì)象練習(xí)強(qiáng)化.cpp構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù),是一個(gè)蹩腳的行為。3.8 對(duì)象的動(dòng)態(tài)建立和釋放1 new和delete基本語(yǔ)法1)在軟件開(kāi)發(fā)過(guò)程中,常常需要?jiǎng)討B(tài)地分配和撤銷(xiāo)內(nèi)存空間,例如對(duì)動(dòng)態(tài)鏈表中結(jié)點(diǎn)的插入與刪除。在C語(yǔ)言中是利用庫(kù)函數(shù)malloc和free來(lái)分配和撤銷(xiāo)內(nèi)存空間的。C+提供了較簡(jiǎn)便而功能較強(qiáng)的運(yùn)算符new和delete來(lái)取代mal
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第15課 物聯(lián)系統(tǒng)原型的運(yùn)行與調(diào)試 教學(xué)設(shè)計(jì) -初中信息技術(shù)七年級(jí)下冊(cè)浙教版2023
- 2025至2030年中國(guó)民用氙氣燈安定器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)椰果罐頭數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)柜臺(tái)開(kāi)發(fā)平臺(tái)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 江蘇省啟東市2023-2024學(xué)年高二上學(xué)期期中考試地理試卷(解析版)
- 湖北省云學(xué)名校聯(lián)盟2023-2024學(xué)年高二上學(xué)期12月聯(lián)考地理試題(解析版)
- 2024藥品代理合同(32篇)
- 2025至2030年中國(guó)數(shù)字電路實(shí)驗(yàn)儀數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 《故都的秋》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 2025至2030年中國(guó)排球中胎數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 門(mén)機(jī)司機(jī)室更換施工方案
- 預(yù)制裝配式鋼筋混凝土排水檢查井標(biāo)準(zhǔn)圖集
- 評(píng)估胎兒健康的技術(shù)
- 全自動(dòng)甘蔗剝?nèi)~裝置的設(shè)計(jì)
- 梁湘潤(rùn).命學(xué)精華
- T-CSAE 11.3-2021 商用車(chē)潤(rùn)滑導(dǎo)則 第3部分:潤(rùn)滑脂的選用
- 工業(yè)級(jí)七水硫酸亞鐵
- 內(nèi)科休克急救
- 變電站的電氣主接線(xiàn)課件
- 婦科運(yùn)用PDCA循環(huán)降低腹腔鏡術(shù)后腸脹氣的發(fā)生率品管圈成果匯報(bào)
- 新零售實(shí)務(wù)PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論