C++程序設(shè)計(jì)-培訓(xùn)課件-完整版-377p_第1頁
C++程序設(shè)計(jì)-培訓(xùn)課件-完整版-377p_第2頁
C++程序設(shè)計(jì)-培訓(xùn)課件-完整版-377p_第3頁
C++程序設(shè)計(jì)-培訓(xùn)課件-完整版-377p_第4頁
C++程序設(shè)計(jì)-培訓(xùn)課件-完整版-377p_第5頁
已閱讀5頁,還剩749頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C++程序設(shè)計(jì)吉林大學(xué)軟件學(xué)院2022/11/261C++程序設(shè)計(jì)吉林大學(xué)軟件學(xué)院2022/11/251教師郵箱:liay@參考書: C++程序設(shè)計(jì)教程錢能 清華大學(xué)出版社第2版課堂紀(jì)律:上機(jī):2022/11/262教師郵箱:liay@2022/11/25第一章:概述1-1培養(yǎng)目標(biāo)理解和掌握c++語言的基本語義和語法,初步理解面向?qū)ο蟮乃枷耄醪秸莆彰嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)方法。提高編程能力和調(diào)試程序的能力,為后面的學(xué)習(xí)打好基礎(chǔ)。2022/11/263第一章:概述1-1培養(yǎng)目標(biāo)2022/111-2C語言與C++語言C語言回顧:

1972年bell實(shí)驗(yàn)室研制C語言特點(diǎn):高度靈活性、實(shí)現(xiàn)上的高效性(比FORTRAN)簡捷和高效(比Pascal)2022/11/2641-2C語言與C++語言C語言回顧:2022/1C語言局限: 程序達(dá)到一定規(guī)模時(shí),模塊之間的協(xié)調(diào)性存在問題,程序的重用性也存在問題,程序員難以控制程序的復(fù)雜性。

2022/11/265C語言局限:2022/11/255C++產(chǎn)生:1980年貝爾實(shí)驗(yàn)室BjanreStroustrup對C改進(jìn)與擴(kuò)充最初稱為“帶類的C”,(cwithclasses).1983年正式命名為C++3次修訂后1994年制定了ANSIc++草案1998年11月,ISO標(biāo)準(zhǔn)被批準(zhǔn)。2022/11/266C++產(chǎn)生:2022/11/256C++是C的改進(jìn)與擴(kuò)充C++包括C的全部屬性、特征、優(yōu)點(diǎn),是在C的基礎(chǔ)上的改進(jìn)與擴(kuò)充

C++是C語言改進(jìn)的基礎(chǔ)上,添加了對面向?qū)ο蟪绦蛟O(shè)計(jì)部分的支持C++包括過程性語言和類部分C++是C的超集,C是C++的子集C++是混合型語言,即是過程型的,又是面向?qū)ο笮偷?022/11/267C++是C的改進(jìn)與擴(kuò)充2022/11/2571-3面向過程的程序設(shè)計(jì) “面向過程”是一種以事件為中心的編程思想。

就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個一個依次調(diào)用就可以了。2022/11/2681-3面向過程的程序設(shè)計(jì)2022/11/258

1-4面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征1.對象一個對象是客觀世界的一個實(shí)體數(shù)據(jù)與數(shù)據(jù)處理過程作為一個整體——對象C++采用“類”來支持對象,同類對象抽象出其共性,形成類,類封裝了數(shù)據(jù)與處理數(shù)據(jù)的過程(函數(shù))

2022/11/2691-4面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征1.2.繼承與重用舉例C++采用繼承支持重用。 可通過繼承現(xiàn)有類,并對其進(jìn)行擴(kuò)展,生成新類,即新類是從現(xiàn)有類派生出來的,成為派生類。3.多態(tài)性:多態(tài)性指同一個操作在不同的類上有著不同行為。2022/11/26102.繼承與重用3.多態(tài)性:2022/11/25101-5:舉例比較面向?qū)ο蠛兔嫦蜻^程程序設(shè)計(jì)例如五子棋,面向過程的設(shè)計(jì)思路就是首先分析問題的步驟:

1、開始游戲,

2、黑子先走,

3、繪制畫面,

4、判斷輸贏,

5、輪到白子,

6、繪制畫面,

7、判斷輸贏,

8、返回步驟2,

9、輸出最后結(jié)果。

把上面每個步驟用分別的函數(shù)來實(shí)現(xiàn),問題就解決了而面向?qū)ο蟮脑O(shè)計(jì)則是從另外的思路來解決問題。整個五子棋可以分為:

1、黑白雙方,這兩方的行為是一模一樣的,

2、棋盤系統(tǒng),負(fù)責(zé)繪制畫面,

3、規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。

第一類對象(玩家對象)負(fù)責(zé)接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,同時(shí)利用第三類對象(規(guī)則系統(tǒng))來對棋局進(jìn)行判定。2022/11/26111-5:舉例比較面向?qū)ο蠛兔嫦蜻^程程序設(shè)計(jì)例如五子棋,而面面向過程和面向?qū)ο蟛皇菍α⒌拿嫦蜻^程和面向?qū)ο髮㈤L期并存從程序機(jī)構(gòu)上,c++的單一程序體本質(zhì)上是基于過程的,因?yàn)檫\(yùn)行程序時(shí),總是啟動過程。2022/11/2612面向過程和面向?qū)ο蟛皇菍α⒌?022/11/2512/*thisisasimplec++program*/#include<iostream>usingnamespacestd;//#include<iostream.h>intmain(){inta,b,result;cout<<"pleaseinputtwonumbers:\n";cin>>a>>b;result=3*a-2*b+1;cout<<"resultis"<<result<<endl;return0;}

1-6 C++的程序結(jié)構(gòu)1.預(yù)處理命令:宏定義命令、文件包含命令和條件編譯命令2.輸入和輸出:3.函數(shù):4.語句:是組成程序的基本單元。以分號結(jié)束。5.變量:6.其他:如符號常量和注釋信息。C++中盡量把常量定義為符號常量#definePI3.1415constdoublePI=3.1415;2022/11/2613/*thisis 1-6 C++的程序結(jié)構(gòu)1.預(yù)處理

1-7 C++程序的實(shí)現(xiàn)編輯、編譯、運(yùn)行1.編輯:將編寫好的C++源程序輸入到計(jì)算機(jī)中,生成磁盤文件的過程。磁盤文件的名字要用擴(kuò)展名.cpp。2.編譯:C++程序的實(shí)現(xiàn)必須要使用某種C++語言的編譯器對程序進(jìn)行編譯。功能是:將程序的源代碼轉(zhuǎn)換成為機(jī)器代碼的形式,稱為目標(biāo)代碼(.obj),然后,再使目標(biāo)代碼進(jìn)行連接,生成可執(zhí)行文件(.exe)。編譯過程可分為三個子過程:預(yù)處理過程、編譯過程、連接過程2022/11/2614 1-7 C++程序的實(shí)現(xiàn)編輯、編譯、運(yùn)行2022/11/2(1)預(yù)處理過程:執(zhí)行預(yù)處理命令(2)編譯過程: 進(jìn)行詞法分析和語法分析的過程,又稱源程序分析的過程。 符號表:又稱字典。映射程序中的各種符號及其他們的屬性。是在進(jìn)行詞法分析和語法分析是生成的,在生成中間代碼和可執(zhí)行的機(jī)器代碼時(shí)使用。 錯誤處理程序: 生成目標(biāo)代碼:.OBJ為擴(kuò)展名的磁盤文件,機(jī)器可識別文件內(nèi)容,卻不能執(zhí)行。(3)連接過程:編譯器對每個源文件單獨(dú)進(jìn)行編譯,多個源程序的目標(biāo)代碼以及庫文件(.Lib)連接在一起,才能形成可執(zhí)行文件(.exe)。由連接器完成.3.運(yùn)行:2022/11/2615(1)預(yù)處理過程:執(zhí)行預(yù)處理命令2022/11/2515上機(jī)環(huán)境:Visualc++6.0Visualstudio20102022/11/2616上機(jī)環(huán)境:2022/11/2516一個C++程序有一個主函數(shù),主函數(shù)是程序執(zhí)行的開始點(diǎn)。C++不允許函數(shù)定義嵌套。函數(shù)有兩種:標(biāo)準(zhǔn)庫函數(shù)和用戶自定義函數(shù)。 第二章 函數(shù)

2022/11/2617一個C++程序有一個主函數(shù),主函數(shù)是程序執(zhí)行的開始點(diǎn)。 第2-1內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)也稱內(nèi)嵌或內(nèi)置函數(shù),它的語法格式與普通函數(shù)一樣,只是在函數(shù)原型或函數(shù)定義標(biāo)題頭之前加上關(guān)鍵字inline。

inlineintisnumber(char);inlineintisnumber(charch){return(ch>='0'&&ch<='9')?1:0;}

編譯器為內(nèi)聯(lián)函數(shù)創(chuàng)建一段源代碼,每遇到一次該函數(shù)的調(diào)用都用相應(yīng)的一段代碼來代替。內(nèi)聯(lián)函數(shù)主要是解決運(yùn)行效率的問題。使用內(nèi)聯(lián)函數(shù)可以省去函數(shù)調(diào)用所需的建立棧內(nèi)存環(huán)境,進(jìn)行參數(shù)傳遞,產(chǎn)生程序轉(zhuǎn)移的時(shí)間開銷內(nèi)聯(lián)函數(shù)應(yīng)是使用頻率高,代碼卻很短的函數(shù)。2022/11/26182-1內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)也稱內(nèi)嵌或內(nèi)置函數(shù),它的語法格式與內(nèi)聯(lián)函數(shù)必須在調(diào)用之前聲明或定義。#include<iostream>usingnamespacestd;inlineintisnumber(char);//intisnumber(char);(則正常函數(shù)調(diào)用)

intmain(){charc;while(cin>>c&&c!='\n'){if(isnumber(c))cout<<"youenteredadigit\n";elsecout<<"youenteredanon-digit\n";}return0;}intisnumber(charch)//inlineintisnumber(charch){return(ch>='0'&&ch<='9')?1:0;}此處inline可省略2022/11/2619內(nèi)聯(lián)函數(shù)必須在調(diào)用之前聲明或定義。此處inline可省略2內(nèi)聯(lián)函數(shù)的函數(shù)體限制: 內(nèi)聯(lián)函數(shù)中,不能含有switch和while。 遞歸函數(shù)不能用來做內(nèi)聯(lián)函數(shù)。 內(nèi)聯(lián)函數(shù)中不能說明數(shù)組。 否則,按普通函數(shù)調(diào)用那樣產(chǎn)生調(diào)用代碼。

(內(nèi)聯(lián)函數(shù)是建議性,不是指令性)內(nèi)聯(lián)函數(shù)只適合于1-5行的小函數(shù)類結(jié)構(gòu)中所有在類內(nèi)部定義的函數(shù),都是內(nèi)聯(lián)函數(shù)。2022/11/2620內(nèi)聯(lián)函數(shù)的函數(shù)體限制:2022/11/25202-2重載函數(shù)

intabs(int); longl_abs(long); doubled_abs(double);重載函數(shù): intabs(int); longabs(long); doubleabs(double);C++用一種函數(shù)名技術(shù)可準(zhǔn)確的判斷出應(yīng)使用那一個函數(shù)。

abs(-10); //調(diào)用intabs(int);

abs(-1000000); //調(diào)用longabs(long); abs(12.3); //調(diào)用doubleabs(double);

簡化編程,在編程邏輯上,親近了人類的思維2022/11/26212-2重載函數(shù) intabs(int);簡化編程

在同一作用范圍中為多個函數(shù)定義(其功能通常是相近的)指定一個共同的函數(shù)名,委托編譯器根據(jù)每一個單獨(dú)函數(shù)的形參個數(shù)、類型和位置的差異,在幕后進(jìn)行名稱細(xì)分并選擇合適的函數(shù)調(diào)用匹配的現(xiàn)象稱為函數(shù)重載。voidprint(double);voidprint(long);voidprint(double,char*);voidprint(char*,double);voidf(){print(1L);//print(long)print(1.0);//print(double)print(2.0,”hello”);//print(double,char*)print(”hello”,3.0);//print(char*,double)}讓重載函數(shù)執(zhí)行不同的功能,是不好的編程風(fēng)格。2022/11/2622在同一作用范圍中為多個函數(shù)定義(其功能匹配重載函數(shù)的順序:(1)嚴(yán)格匹配(2)內(nèi)部轉(zhuǎn)換(相容類型匹配)(3)通過用戶定義的轉(zhuǎn)換尋找求一個匹配。

voidprint(int);voidprint(double);voidfunction(){print(3);print(5.0);print(‘a(chǎn)’);print(3.1415f);}voidprint(long);voidprint(double);voidfunction(){inta;print(a);//有二義性}print(long(a));或者print(double(a));2022/11/2623匹配重載函數(shù)的順序:voidprint(long);pri重載的內(nèi)部實(shí)現(xiàn):C++用名字粉碎(namemangling)(名字細(xì)分、名字壓軋)的方法來改變函數(shù)名。用v,c,i,f,l,d,r分別表示void,char,int,float,long,double,f(chara);//f_cintf(chara,intb,doublec);//f_cid2022/11/2624重載的內(nèi)部實(shí)現(xiàn):2022/11/2524返回值類型不能夠作為重載依據(jù)(區(qū)分、細(xì)分重載)voidfunc(int);intfunc(int);fucn(10);//error這樣規(guī)定保證對重載的解析與環(huán)境無關(guān)floatsqrt(float);doublesqrt(double);voidf(doubleda,floatfla){ floatfl=sqrt(da);//調(diào)用sqrt(double) doubled=sqrt(da);//調(diào)用sqrt(double)fl=sqrt(fla);//調(diào)用sqrt(float)d=sqrt(fla);//調(diào)用sqrt(float)}2022/11/2625返回值類型不能夠作為重載依據(jù)(區(qū)分、細(xì)分重載)2022/112-3默認(rèn)參數(shù)的函數(shù)默認(rèn)參數(shù)也稱為缺省參量。例:voiddelay(intloops);voiddelay(intloops){if(loops==0) return;for(inti=0;i<loops;i++);}允許函數(shù)默認(rèn)參數(shù)值,是為了讓編程簡單,讓編譯器做更多的檢查錯誤工作。默認(rèn)參數(shù)函數(shù)的聲明 當(dāng)又有聲明又有定義時(shí),定義中不允許默認(rèn)參數(shù)。 若只有定義,則默認(rèn)參數(shù)才可出現(xiàn)在函數(shù)定義中將loops定義成默認(rèn)值為1000

voiddelay(int=1000);調(diào)用時(shí):delay(); delay(2000);2022/11/26262-3默認(rèn)參數(shù)的函數(shù)默認(rèn)參數(shù)也稱為缺省參量。將loo默認(rèn)參數(shù)的順序規(guī)定: 一個函數(shù)中可以有多個默認(rèn)參數(shù),默認(rèn)參數(shù)應(yīng)從右至左逐漸定義,當(dāng)調(diào)用函數(shù)時(shí),從左向右匹配參數(shù)。例:voidfoo(inta,intb,boolc);

voidfoo(inta,intb,boolc=false);//ok,c是最后一個參數(shù)

voidfoo(inta,intb=0,boolc);

//fail,b不是最后一參數(shù)2022/11/26272022/11/2527當(dāng)調(diào)用有默認(rèn)參數(shù)的函數(shù)時(shí),從左向右匹配參數(shù)。#include<iostream>usingnamespacestd;voidfun(inta=1,intb=3,intc=5){cout<<"a="<<a<<","<<"b="<<b<<","<<"c="<<c<<","<<endl;}intmain(){ fun(); fun(7); fun(7,9); fun(7,9,11); cout<<"OK"; return0;}2022/11/2628當(dāng)調(diào)用有默認(rèn)參數(shù)的函數(shù)時(shí),從左向右匹配參數(shù)。2022/11/默認(rèn)值的規(guī)定:默認(rèn)值可以是全局變量、全局常量、函數(shù)。不可以是局部變量。因?yàn)槟J(rèn)值是在編譯時(shí)確定的,必須是靜態(tài)確定的。2022/11/2629默認(rèn)值的規(guī)定:2022/11/2529函數(shù)重載與函數(shù)默認(rèn)參數(shù):(1)默認(rèn)參數(shù)不能用于細(xì)分重載函數(shù)。例1:voidfunc(int,int);voidfunc(int=3,int=4);func(22,32);例2:voidfunc(int);voidfunc(int,int);是重載函數(shù)而voidfunc(int);voidfunc(int,int=4);在 func(3)調(diào)用時(shí)有二義性應(yīng)該避免重載過程中的涉及參數(shù)個數(shù)的默認(rèn)設(shè)置2022/11/2630函數(shù)重載與函數(shù)默認(rèn)參數(shù):例2:voidfunc(int);(2)函數(shù)重載與函數(shù)默認(rèn)參數(shù):默認(rèn)函數(shù)可將一系列簡單的重載函數(shù)合成為一個。intmonth,intday,intyear;voidTdate(){month=4;day=15;year=1995;}voidTdate(intm){month=m;day=15;year=1995;}voidTdate(intm,intd) {month=m;day=d;year=1995;}voidTdate(intm,intd,inty) {month=m;day=d;year=y;}voidTdate(intm=4,intd=15,inty=1995){month=m;day=d;year=y;}intmain(){Tdate();Tdate(1);Tdate(1,2);Tdate(1,2,3);return0;}重載函數(shù)的功能相同,只是參數(shù)個數(shù)不同,用默認(rèn)參數(shù)值的方法比較簡便2022/11/2631(2)函數(shù)重載與函數(shù)默認(rèn)參數(shù):intmain()重載函數(shù)的如果參數(shù)值用來確定不同的操作,則用函數(shù)重載比較好#include<iostream>usingnamespacestd;voidprint();voidprint(int*);intmain(){ intarr[10]; intsum=0; for(inti=0;i<10;i++){ cin>>arr[i]; sum=sum+arr[i]; } if(sum>100) print(arr); else print(); return0;}voidprint(int*pa){ cout<<"thearraycanbeused"<<endl; for(inti=0;i<10;i++){ cout<<pa[i]<<""; } cout<<endl;}voidprint(){ cout<<"thearraycannotbeused<<endl";}2022/11/2632如果參數(shù)值用來確定不同的操作,則用函數(shù)重載比較好voidp無名參數(shù)函數(shù)的定義和聲明中,都可以省略形參名.voidprint(int,int);voidprint(inta,int){ cout<<a<<endl;}voidfunc(){ print(1,2);}

2022/11/2633無名參數(shù)2022/11/25332-4:程序運(yùn)行時(shí)的內(nèi)存布局(1)代碼區(qū)(codearea):存放程序的代碼(各個函數(shù)的代碼塊)(2)全局變量區(qū)(dataarea):存放程序的全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)(3)堆區(qū)(heaparea):存放程序的動態(tài)數(shù)據(jù)可以用malloc()與free()以及new和delete來申請與釋放堆內(nèi)存,也稱動態(tài)內(nèi)存、動態(tài)數(shù)據(jù)區(qū)。(4)棧區(qū)(stackarea):存放程序的局部數(shù)據(jù)(各個函數(shù)中的數(shù)據(jù))2022/11/26342-4:程序運(yùn)行時(shí)的內(nèi)存布局(1)代碼區(qū)(codear3-1:指針1.指針變量的定義與賦值指針是一種數(shù)據(jù)類型,用于存放內(nèi)存單元的地址。int*ip;定義同時(shí)賦值:inta;int*p=&a;定義之后,單獨(dú)使用賦值語句:inta,*p;p=&a;inta[10],*p;p=a;p=&a[0]; 第三章: 指針和引用

2022/11/26353-1:指針 第三章: 指針和引用2022/11/25353.與地址相關(guān)的運(yùn)算*和&“*”稱為指針運(yùn)算符(間接訪問運(yùn)算符),表示指針?biāo)赶虻淖兞康闹怠R辉\(yùn)算符inta;int*p=&a;*p=5;“&”稱為取地址運(yùn)算符,用來得到一個對象的地址。一元運(yùn)算符。*和&是兩個互逆的操作,當(dāng)這兩個操作符碰到一起時(shí),其作用相互抵消,例如

*&k=3與

k=3

效果完全相同2022/11/26363.與地址相關(guān)的運(yùn)算*和&2022/11/25364.用指針處理數(shù)組元素例:int*p,i,a[6]={0,1,2,3,4,5};p=a;for(i=0;i<6;i++)printf(“%d”,____);a[i]*(a+i)p[i]*(p+i)*p++*a++考慮:[]的作用[]和*的比較;越界訪問數(shù)組名和指針(1)數(shù)組名的內(nèi)涵在于其指代實(shí)體是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)就是數(shù)組;(2)數(shù)組名的外延在于其能夠轉(zhuǎn)換為指向其指代實(shí)體的指針,而且是個指針常量;(3)數(shù)組名作為函數(shù)形參時(shí),在函數(shù)體內(nèi),其失去了本身的內(nèi)涵,僅僅只是個指針;

#include<iostream>usingnamespacestd;voidarrayTest(charstr[])//char*str,charstr[10]{cout<<sizeof(str)<<endl;cout<<++str<<endl;}intmain(){charstr1[10]=“Yandme”;arrayTest(str1);return0;}2022/11/26374.用指針處理數(shù)組元素(1)數(shù)組名的內(nèi)涵在于其指代實(shí)體是一種5.void指針與NULL指針值(1)void指針(void*p)空類型指針 不指向任何類型,僅僅是一個地址。 不能進(jìn)行指針運(yùn)算,也不能進(jìn)行間接引用。*p 其他類型指針可以賦值給空類型指針 空類型指針經(jīng)顯示轉(zhuǎn)換后方可賦給其他指針。inta=30; int*ip=&a; void*vp=ip;//ok從int*到void*的隱式轉(zhuǎn)換*vp=10;//errorvp++; //errorinta;void*p=&a;char*q=(char*)p;2022/11/26385.void指針與NULL指針值2022/11/2538(2)NULL是空指針值,不指向任何地方。任何類型的指針都可以賦該值。 int*ptr

=NULL; int*ptr

=0;NULL與void*是不同的概念2022/11/2639(2)NULL是空指針值,不指向任何地方。任何類型的指針都可練習(xí)題chara[]="abcdefghij";char*q=a;int*p=(int*)a;while(*q)*q++=*q+1;p+=2;printf("%s",p);//sizeof(char)=1//sizeof(int)=42022/11/2640練習(xí)題2022/11/25406.指針和常量const說明符 const為指定說明符(也稱為常類型說明符),使用指定時(shí),程序執(zhí)行的過程中指定的內(nèi)容不能被改變(凍結(jié))。即一次初始化后,指定的內(nèi)容始終不變。(1)定義一般常量使用const說明常量:intconstx=2;或constintx=2;

定義或說明一個常數(shù)組可采用如下格式:

<類型說明符>const<數(shù)組名>[<大小>]…

或者

const<類型說明符><數(shù)組名>[<大小>]…

doubleconsta[2]={1.0,2.0}常量定義時(shí),應(yīng)被初始化。constinti=5;i++;(錯誤);constinti;必須初始化;C中常量定義用#definePI3.14159c++中使用constdoublePI=3.1415;積極使用const,避免使用宏,可以用const、enum定義常量。2022/11/26416.指針和常量2022/11/2541(2)指針常量和常量指針(指向常量的指針)

指針常量:在指針定義語句的指針名前加const,表示指針本身是常量。

inta;int*constp=&a; 定義時(shí)必須初始化指針值p不可以修改,指針指向的內(nèi)容可以修改。即p是常量,不可以作為左值進(jìn)行運(yùn)算,*p可以修改

左值:是對應(yīng)內(nèi)存數(shù)據(jù)的一個表達(dá)式,左值對應(yīng)的內(nèi)存空間的內(nèi)容允許刷新??梢猿霈F(xiàn)在賦值運(yùn)算符的左側(cè)。右值:右值指的是引用了一個存儲在某個內(nèi)存地址里的數(shù)據(jù)。出現(xiàn)在賦值運(yùn)算符的右側(cè)。要求左值運(yùn)算:++,--,+=等常量指針:在指針的定義類型前加const,表示指向的對象是常量。如constint*pi 或intconst*pi;均可。以上定義表明,*pi是常量,不能將*pi作為左值進(jìn)行操作。定義指向常量的指針時(shí),定義時(shí)不必須先初始化。2022/11/2642(2)指針常量和常量指針(指向常量的指針)2022/11/2例:指針常量inta[10];int*constp=a;intb[6];p=b;//錯誤*p=6;//正確*(p+6)=6;//正確*p++=7;//錯誤constintc=0;int*constq=&c;//錯誤例:常量指針 constinta=78; constintb=28; intc=18; constint*pi=&a; pi=&b; //ok *pi=68; //error pi=&c; //ok *pi=88; //error c=98; //ok int*f=&a;//錯誤(a本身不能被修改就不允許外界提供修改的漏洞)2022/11/2643例:指針常量2022/11/2543(3)指向常量的指針常量(常量指針常量)形式:constint*constp=&a;定義時(shí)必須初始化p與*p都是常量。他們都不能作為左值進(jìn)行操作intb[10];conststaticinta[10]={0};int*constp=a; 錯誤constint*constp=a;正確constint*constq=b;正確p++;錯誤*p=1;錯誤*(a+2)=2;錯誤*q=5;錯誤q++;錯誤b[0]=5;正確(4)常量的特殊用法:intf(intb)const;2022/11/2644(3)指向常量的指針常量(常量指針常量)2022/11/25重載和const形參 (1)voidf(int*); voidf(constint*);//有效重載,是不是指向const對象(2)voidf(int*); voidf(int*const);//無效重載,重定義不能基于指針本身是否const實(shí)現(xiàn)重載2022/11/2645重載和const形參2022/11/25457.堆內(nèi)存的分配1.堆內(nèi)存(heap):堆是一塊內(nèi)存區(qū)域,堆允許程序在運(yùn)行時(shí)(而不是編譯時(shí)),申請某個大小的內(nèi)存空間。堆內(nèi)存又稱為動態(tài)內(nèi)存。2.獲得堆內(nèi)存

c中用函數(shù)malloc()(在頭文件malloc.h中)來獲得堆內(nèi)存;c++中用操作符new來獲得堆內(nèi)存。3.釋放堆內(nèi)存

c中用函數(shù)free()(在頭文件malloc.h中)來釋放堆內(nèi)存;c++中用操作符delete來釋放堆內(nèi)存。2022/11/26467.堆內(nèi)存的分配2022/11/2546使用malloc申請空間void*malloc(unsignedlongsize);例:#include“stdio.h”#include“malloc.h”intmain(){int*p,i;p=(int*)malloc(10*sizeof(int));for(i=0;i<10;i++)scanf(“%d”,p++);p-=10;for(i=0;i<10;i++)printf(“%d”,p[i]);free(p);//只能釋放malloc申請的空間

return0;}2022/11/2647使用malloc申請空間2022/11/2547使用new和delete進(jìn)行動態(tài)內(nèi)存分配和釋放

運(yùn)算符new和delete是C++新增的運(yùn)算符,提供了存儲的動態(tài)分配和釋放功能。它的作用相當(dāng)于C語言的函數(shù)malloc()和free(),但是性能更為優(yōu)越。使用new和delete:

(1)new類型(初始化值); int*p;p=newint(100);//動態(tài)分配一個整數(shù)并初始化deletep;(2)new類型[數(shù)組大小]

int*p;p=newint[10];//分配一個含有10個整數(shù)的整形數(shù)組

delete[]p;//刪除這個數(shù)組

使用new較之使用malloc()有以下的幾個優(yōu)點(diǎn):

(1)new自動計(jì)算要分配類型的大小,不使用sizeof運(yùn)算符,比較省事,可以避免錯誤。

(2)自動地返回正確的指針類型,不用進(jìn)行強(qiáng)制指針類型轉(zhuǎn)換。

(3)可以用new對分配的對象進(jìn)行初始化。(4)不用使用頭文件聲明(malloc.h),更簡潔。2022/11/2648使用new和delete進(jìn)行動態(tài)內(nèi)存分配和釋放

2022/include“stdio.h”intmain(){int*p,i;p=newint[10];for(i=0;i<10;i++)scanf(“%d”,p++);p-=10;for(i=0;i<10;i++)printf(“%d”,p[i]);delete[]p;//只能釋放new申請的空間return0;}2022/11/2649include“stdio.h”2022/11/2549new操作符若申請成功,返回首單元地址;否則返回NULL值。

int*p=newint[10];

if(p==NULL)//if(!p)或者if(p==0){cout<<“can’tallocatemorememory!\n”;exit(1);}//exit是在調(diào)用處強(qiáng)行退出程序//exit(1)表示異常退出.

exit(0)表示正常退出2022/11/2650new操作符若申請成功,返回首單元地址;否則返回NULL值。動態(tài)空間:動態(tài)申請二維數(shù)組#include“stdio.h”intmain(){int**p,i,j;p=newint*[3];for(i=0;i<3;i++) p[i]=newint[3];for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%d”,*(p+i)+j);for(i=0;i<3;i++) for(j=0;j<3;j++) printf("%d",p[i][j]);for(i=0;i<3;i++) delete[]p[i];delete[]p; return0;}2022/11/2651動態(tài)空間:動態(tài)申請二維數(shù)組2022/11/25518.函數(shù)指針和指針函數(shù)(1)指針函數(shù):返回指針值的函數(shù)。定義格式:類型修飾符*函數(shù)名(形參表){函數(shù)體}int*f(inta);(2)函數(shù)指針:指向函數(shù)地址(程序區(qū))的指針。與函數(shù)名等價(jià)的指針。函數(shù)名是指向函數(shù)的指針常量。函數(shù)指針定義

若函數(shù)原型為:類型函數(shù)名(形參表);

則相應(yīng)函數(shù)指針定義為:類型(*變量名)(形參表);//()的優(yōu)先級大于*char*p(int);char(*p)(int);例:intf1(intn);

int(*pf1)(intn);

pf1=f1;//pf1是與f1等價(jià)的函數(shù)指針指針函數(shù)用來申請空間或者查找數(shù)據(jù);函數(shù)指針用來臨時(shí)制定參與運(yùn)算的函數(shù);2022/11/26528.函數(shù)指針和指針函數(shù)2022/11/2552(3)通過函數(shù)指針來調(diào)用函數(shù)例:intadd(inta,intb){returna+b;}

intmain()

{

int(*p)(int,int);

p=add;//p是與add等價(jià)的函數(shù)指針

cout<<add(3,5);

cout<<(*p)(3,5);

//四種調(diào)用形式效果等價(jià)

cout<<p(3,5);

cout<<(*add)(3,5); return0;

}

結(jié)果:8888

2022/11/2653(3)通過函數(shù)指針來調(diào)用函數(shù)2022/11/25534.函數(shù)指針作函數(shù)形參

例:計(jì)算以0.10為步長,特定范圍內(nèi)的三角函數(shù)之和。

#include<iostream.h>

#include<math.h>

doublesigma(double(*func)(double),doubledl,doubledu)

{doubledt=0.0;for(doubled=dl;d<du;d+=0.1)dt+=func(d);

returndt;

}

intmain()

{doubledsum;

dsum=sigma(sin,0.1,1.0);

cout<<"thesumofsinfrom0.1to1.0is"<<dsum<<endl;dsum=sigma(cos,0.5,3.0);

cout<<"thesumofcosfrom0.5to3.0is"<<dsum<<endl; return0;}

2022/11/26544.函數(shù)指針作函數(shù)形參2022/11/25545.用typedef來簡化函數(shù)指針

(1)typedefint(*FUN)(inta,intb);intf(int,int);FUNfunp=f;FUN不是指針變量,是指針類型名。(2)typedefintFUNC(int,int);//先定義函數(shù)類型 FUNC*funp=f;6.函數(shù)的返回類型可以是函數(shù)指針

typedefint(*SIG)();typedefvoid(*SIGARG)();SIGsignal(int,SIGARG);2022/11/26555.用typedef來簡化函數(shù)指針2022/11/25553-2引用1.引用(reference)的概念為一個變量、函數(shù)等對象規(guī)定一個別名,該別名稱為引用。此后,對別名的操作即是對別名所代表的對象的操作。對象:存儲器中一片連續(xù)的區(qū)域;*(a+10)=7左值:就是引用某個對象的表達(dá)式2022/11/26563-2引用對象:存儲器中一片連續(xù)的區(qū)域;2022/12.聲明引用:聲明引用格式如下:

格式:類型標(biāo)識符&別名;例1:inti=0;int&ir=i;//定義引用ir作為對象i的別名ir=2;int*p=&ir;//等同于int*p=&i;如果:intj;int&i=j;則i==j;&i==&j;聲明引用,不為之分配內(nèi)存空間。例2:inta[10],*p=a; int&ra1=a[6];//ra1代表數(shù)組元素a[6] int*&rp1=p;//rp1代表指針變量p int&rp2=*p;//rp2代表p所指向的那個對象, //即數(shù)組元素a[0]2022/11/26572.聲明引用:聲明引用格式如下:2022/11/25573.引用必須初始化。引用一旦被聲明則不能再修改.Intj,k;int&s=j(luò);int&s=k;(錯誤)int&i;錯誤externint&r3//ok,r3在別處初始化int*i;intk;int*&j=i;j=&k;k=5;int*&l=j;cout<<*j<<*i<<*l;注意:為提高可讀性,引用與變量、指針定義盡量不在同一行。盡量避免這樣的語句inta,&ra=a,*p=&a;2022/11/26583.引用必須初始化。引用一旦被聲明則不能再修改.2022/void&a=3;//errorvoid本質(zhì)不是一個類型,只是在語法上相當(dāng)于一個類型,沒有該類型的對象。2022/11/2659void&a=3;//error2022/11/25594、引用的使用-參數(shù)傳遞voidswap(int&,int&);voidswap1(int*,int*);voidswap2(int,int);intmain(){inta=1,b=2;swap2(a,b);cout<<a<<b;swap1(&a,&b);cout<<a<<b;swap(a,b);cout<<a<<b;

return0;}voidswap(int&a1,int&b1){intc;c=a1;a1=b1;b1=c;}voidswap1(int*a1,int*b1){intc;c=*a1;*a1=*b1;*b1=c;}

voidswap2(inta1,intb1){intc;c=a1;a1=b1;b1=c;}形參和實(shí)參結(jié)合規(guī)則:形參為引用時(shí),形參(引用)接收實(shí)參(對象)的地址?;虮硎鰹椋?/p>

形參為引用時(shí),凡遇到形參(引用)的地方,全部用實(shí)參(對象)來代替。

傳遞引用給函數(shù)與傳遞指針的效果相同??勺x性比指針傳遞好(傳值方式的調(diào)用與可讀性,性能卻強(qiáng)于傳值方式)參數(shù)結(jié)合符合初始化標(biāo)準(zhǔn)可使用引用傳遞從函數(shù)返回多個值(指針和引用都可以)2022/11/26604、引用的使用-參數(shù)傳遞2022/11/25605.引用和指針的關(guān)系指針是個變量,可再賦值;而引用建立時(shí)必須進(jìn)行初始化并且決不會再關(guān)聯(lián)其它不同的變量。指針操縱兩個實(shí)體(指針值、指向的值);引用只能操縱一個實(shí)體。引用在內(nèi)部用指針實(shí)現(xiàn),被看成是指針常量,不能操作自身的地址值,只能訪問所指向的實(shí)體。在語言層面,引用的用法和對象一樣;在二進(jìn)制層面,引用一般都是通過指針來實(shí)現(xiàn)的,只不過編譯器幫我們完成了轉(zhuǎn)換.

實(shí)際上“引用”可以做的任何事情“指針”也都能夠做,為什么還要“引用”?

答案是“用適當(dāng)?shù)墓ぞ咦銮∪缙浞值墓ぷ鳌薄?/p>

指針能夠毫無約束地操作內(nèi)存中的東西,盡管指針功能強(qiáng)大,但是非常危險(xiǎn)。引用是指針出于安全考慮的替代品。2022/11/26615.引用和指針的關(guān)系2022/11/2561

在以下情況下你應(yīng)該使用指針:一是你考慮到存在不指向任何對象的可能(在這種情況下,你能夠設(shè)置指針為空)

二是你需要能夠在不同的時(shí)刻指向不同的對象(在這種情況下,你能改變指針的指向)。

如果總是指向一個對象并且一旦指向一個對象后就不會改變指向,那么你應(yīng)該使用引用。2022/11/2662在以下情況下你應(yīng)該使用指針:2022/11/6.用const限定引用用const限定引用聲明方式:Inti;constint&p=i;用這種方式聲明的引用不能通過引用對目標(biāo)變量的值進(jìn)行修改,保證了引用的安全性。作為參數(shù)可以保證在函數(shù)執(zhí)行時(shí)不被修改inti;constint*p=&i;constint&p=i;效率相同2022/11/26636.用const限定引用2022/11/2563double&dr=1;//errorconstdouble&cdr=1;//ok解釋是:doubletemp=double(1);constdouble&cdr=temp;注意:c++不分變量的const引用,和const變量的引用,因?yàn)橐帽旧砭筒荒苤匦沦x值,使它指向另一個變量。即沒有constintconst&a=1,只有constdouble&a=12022/11/2664double&dr=1;//error2022/7.引用的使用-用引用返回值floatt;floatf1(floatr){floatk;k=3.14*r*r;cout<<"f1::kis"<<&k<<endl;return(k);}float&f2(floatr){t=3.14*r*r;cout<<"f2::tis"<<&t<<endl;return(t);}

float&f3(floatr){floatf;f=3.14*r*r;cout<<"f3::fis"<<&f<<endl;return(f);}intmain(){

floata=f1(5);constfloat&b=f1(5);cout<<"b:"<<&b<<endl;cout<<"a="<<a<<","<<"b="<<b<<endl;

floatc=f2(5);float&d=f2(5);cout<<"d:"<<&d<<endl;cout<<"c="<<c<<","<<"d="<<d<<endl;

floate=f3(5);float&f=f3(5);cout<<"e="<<e<<","<<"f="<<f<<endl;}f1::kis0x0013FF08f1::kis0x0013FF08b:0x0013FF74a=78.5,b=78.5f2::tis0x0042DD68f2::tis0x0042DD68d:0x0042DD68c=78.5,d=78.5f3::fis0x0013FF08f3::fis0x0013FF08e=5.88384e-039,f=5.88384e-0392022/11/26657.引用的使用-用引用返回值intmain()f1::k用普通的返回值的方法返回一個函數(shù)的函數(shù)值時(shí),需在內(nèi)存中先創(chuàng)建一個臨時(shí)變量,在被調(diào)函數(shù)返回時(shí),將函數(shù)值復(fù)制到該臨時(shí)變量中,主調(diào)函數(shù)再以該臨時(shí)變量的值進(jìn)行運(yùn)算。這種方法產(chǎn)生了函數(shù)值的副本。用引用返回一個函數(shù)值的最大好處是:在內(nèi)存中不產(chǎn)生被返回值的副本。別返回一個局部對象的引用。2022/11/2666用普通的返回值的方法返回一個函數(shù)的函數(shù)值時(shí),需在內(nèi)存中先創(chuàng)建8.引用的使用-函數(shù)調(diào)用作為左值inta=0,b=0,c=0;int&count(intk){if(k>60)return(a);if(k<=60&&k>30)return(b);if(k<=30)return(c);}intmain(){inti,j;for(i=0;i<15;i++){cin>>j;count(j)++;}cout<<a<<b<<c;return0;}2022/11/26678.引用的使用-函數(shù)調(diào)用作為左值2022/11/25679.返回堆中變量的引用int&a=newint(2)//error(若不能正確分配內(nèi)存,new返回NULL值,而引用不能是NULL值)#include<cstdlib>#include<iostream>usingnamespacestd;intmain(){ int*pint=newint(1); if(pint==NULL) { cout<<“can’tallocatemorememory!\n”; exit(1); } int&rint=*pint; //…… delete&rint;//等價(jià)于deletepint; return0;}2022/11/26689.返回堆中變量的引用2022/11/2568分析程序,寫出結(jié)果:#include<iostream.h>voidmain(){ int*p; int*&rp=p;intx=100; int&rx=x; p=&x; cout<<"*p="<<*p<<endl; cout<<"x="<<x<<endl; cout<<"rx="<<rx<<endl; cout<<"*rp="<<*rp<<endl; x++;(*p)++;rx++;(*rp)++; cout<<"*p="<<*p<<endl; cout<<"x="<<x<<endl; cout<<"rx="<<rx<<endl; cout<<"*rp="<<*rp<<endl;}2022/11/2669分析程序,寫出結(jié)果:#include<iostream.h第四章:類1.從結(jié)構(gòu)到類結(jié)構(gòu):相關(guān)聯(lián)的數(shù)據(jù)元素組成一個單獨(dú)的統(tǒng)一體

structSavings{ unsignedaccountnumber; //賬號 floatbalance; //結(jié)算額};‘;’是必需的structSavingsa,b;或者Savingsa,b;常用形式結(jié)構(gòu)分量稱為成員,使用“.”操作符訪問成員voidfn(){Savingsa;Savingsb;a.accountnumber=1;b.accountnumber=2;}粗糙的數(shù)據(jù)類型,沒有涉及復(fù)合數(shù)據(jù)的操作。2022/11/2670第四章:類1.從結(jié)構(gòu)到類粗糙的數(shù)據(jù)類型,沒有涉及復(fù)C的結(jié)構(gòu)中不含有成員函數(shù)。C++的類中既能包含數(shù)據(jù)成員,又包含函數(shù)成員或稱成員函數(shù)。

classSavings{ public: floatdeposit(floatamount) //成員函數(shù)

{ balance+=amount; returnbalance; }

unsignedaccountnumber; //數(shù)據(jù)成員

floatbalance; //結(jié)算額};

//類的聲明時(shí)不分配內(nèi)存空間

voidfn(){Savingsa,b;//對象(對象和變量)

Savings*pa=&a,*pb=&b;//對象指針

a.accountnumber=123;pb->accountnumber=456;pa->balance=1000;b.balance=2000;a.deposit(100);pa->deposit(200);(*pb).deposit(100);(&b)->deposit(200);}//.的前面是對象,->的前面是地址,成員函數(shù)的調(diào)用一定是和某個對象捆綁在一起2022/11/2671C的結(jié)構(gòu)中不含有成員函數(shù)。2022/11/2571一個類的一般構(gòu)造:

classclass_name_identifier{public:

公共數(shù)據(jù)成員聲明語句; 公共函數(shù)成員聲明語句;

private:

私有數(shù)據(jù)成員聲明語句; 私有函數(shù)成員聲明語句;

protected:

保護(hù)數(shù)據(jù)成員聲明語句; 保護(hù)函數(shù)成員聲明語句;}; 2022/11/2672一個類的一般構(gòu)造:2022/11/2572C++中類與結(jié)構(gòu)的區(qū)別

structSavings{public://可省略

floatdeposit(floatamount){ balance+=amount; returnbalance;}

private:intaccountnumber;floatbalance; };classSavings{private://可省略

intaccountnumber; floatbalance;

public:floatdeposit(floatamount){ balance+=amount;returnbalance;}};C++中類與結(jié)構(gòu)的區(qū)別:默認(rèn)情況下,class定義的成員是private的,而struct定義的成員是public的。2022/11/2673C++中類與結(jié)構(gòu)的區(qū)別classSavingsC++中類與2.對象的引用以及返回對象的函數(shù)classStudent{public:intage;charname[9];floatscore;};intmain(){voidadd(Student&);Studentget();Studenta[30];for(i=0;i<30;i++)add(a[i]=get()); return0;}voidadd(Student&b){if(b.age<20)b.age++;}Studentget(){Studenttemp;cin>>temp.age;cin>>;cin>>temp.score;return(temp);}2022/11/26742.對象的引用以及返回對象的函數(shù)voidadd(Stud3.公有&保護(hù)&私有成員classStudent{public:floatscore;voidp(){age=20;}voidq(){add();}voidr(inta){cout<<a;}private://和protected只有繼承區(qū)別intage;voidadd(){score=0;p();age++;}};intmain(){Studenta;a.p();a.q();a.score=80;a.age=20;//錯誤a.add();//錯誤a.r(5);a.r((int)(a.score));a.r(a.age);//錯誤return0;}2022/11/26753.公有&保護(hù)&私有成員intmain()2022/114.成員函數(shù)&非成員函數(shù)classStudent{public:voidp(){age=20;cout<<age;}intq(){return(age)}floatscore;private:charname[9];intage;};voidp(inta){cout<<a;}intmain(){Studenta;a.p();p(a.q());

return0;}2022/11/26764.成員函數(shù)&非成員函數(shù)voidp(inta)2022成員函數(shù)與普通函數(shù)的區(qū)別:成員函數(shù)屬于類,成員函數(shù)定義是類設(shè)計(jì)的一部分,其作用域是類作用域.而普通函數(shù)一般為全局函數(shù)成員函數(shù)的操作主體是對象,使用時(shí)通過捆綁對象來行使其職責(zé),而普通函數(shù)被調(diào)用時(shí)沒有操作主體2022/11/2677成員函數(shù)與普通函數(shù)的區(qū)別:2022/11/25775.重載成員函數(shù)classStudent{public:floatgrade(){//…}floatgrade(floatnewgpa){//…}protected://….};classSlope{public:floatgrade(){//…}protected://….};chargrade(floatvalue){//…}

voidmain(){Students;Slopet;s.grade(3.2);floatv=s.grade();charc=grade(v);floatm=t.grade();}2022/11/26785.重載成員函數(shù)voidmain()2022/11/26.定義成員函數(shù)(1)在類的內(nèi)部定義成員函數(shù)#include<iostream>usingnamespacestd;classTdate{public:voidset(intm,intd,inty){month=m;day=d;year=y;}intisleapyear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidprint(){cout<<month<<"/"<<day<<"/"<<year<<endl;}private: intmonth; intday; intyear;};

intmain(){Tdatea;a.set(2,4,1998);a.print();if(a.isleapyear())cout<<"isleapyear!“elsecout<<“isnotleapyear!";return0;}Set與month全名::作用域區(qū)分符、作用域運(yùn)算符、名字空間引導(dǎo)符2022/11/26796.定義成員函數(shù)intmain(){Set與month例:用::表示全局變量和函數(shù)intmonth; intday;intyear;voidset(intmonth,intday,intyear){::month=month;::day=day;::year=year;}classTdate{public:voidset(intm,intd,inty){ ::set(m,d,y);}private: intmonth; intday; intyear;};2022/11/2680例:用::表示全局變量和函數(shù)2022/11/2580類內(nèi)部提供的成員函數(shù)定義默認(rèn)為內(nèi)聯(lián)函數(shù)。類中定義的成員函數(shù)一般規(guī)模較小(1-5句)不能使用結(jié)構(gòu)化語句類定義一般在頭文件中,便于多個程序使用。2022/11/26812022/11/2581//例子文件名Student.hclassStudent{public:voidp(){

age=19;cout<<age;}

floatscore;protected:charname;intage;};a.cpp#include“Student.h”main(){Studenta;a.p();}b.cpp#include“Student.h”voidhh(){Studenta;a.p();}//類定義和使用的分離2022/11/2682//例子a.cpp2022/11/2582(2)在類之后定義成員函數(shù)classTdate{public:

voidset(intm,intd,inty);intisleapyear();voidprint();private: intmonth; intday; intyear;};voidTdate::set(intm,intd,inty){month=m;day=d;year=y;}

intTdate::isleapyear(){return(year%4==0&&year%100!=0)||(year%400==0);}

voidTdate::print(){cout<<month<<“/”<<day<<“/”<<year<<endl:}2022/11/2683(2)在類之后定義成員函數(shù)voidTdate::set類定義和成員函數(shù)定義的分離//tdate.h(類的定義)classTdate{public:voidset(intm,intd,inty);intisleapyear();voidprint();private: intmonth; intday; intyear;}://tdate.cpp(類的實(shí)現(xiàn))#include<iostream>usingnamespacestd;#include“tdate.h”voidTdate::set(intm,intd,inty){month=m;day=d;year=y;}intTdate::isleapyear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidTdate::print(){cout<<month<<“/”<<day<<“/”<<year<<endl:}

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論