




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第 13 章 C+基礎(chǔ),13.1 C+概述 13.2 C+對C的擴(kuò)充 13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),2,13.1 C+概述,(1) 保留字 (2) 數(shù)據(jù)描述 (3) C與C+亦有不同之處,13.1 C+概述,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),3,C+是從C語言的基礎(chǔ)上發(fā)展而來的 C語言編寫的程序可以在C+下使用 C語言源程序文件的擴(kuò)展名為.C C+源程序文件的擴(kuò)展名一般為.cpp C與C+的不兼容性之處:,13.1 C+概述,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),4,(1) 保留字,保留字是一種語言中具有特定含義與用途的標(biāo)識符,在
2、程序中不能作為用戶自定義標(biāo)識符,13.1 C+概述,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),5,(2) 數(shù)據(jù)描述,在C+中,結(jié)構(gòu)、聯(lián)合和枚舉類型名可直接作類型名定義變量 如:struct STUDENT char name20; /*學(xué)生姓名*/ char num10; /*學(xué)生學(xué)號*/ int score; /*成績*/ ; C+中類型變量定義形式: STUDENT lisi; C語言中該類型變量定義形式: struct STUDENT lisi;,13.1 C+概述,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),6,C+中若全局變量在定義變量的模塊之外使用,即其它模塊要使用它,則必須先使用exter
3、n說明符對該變量進(jìn)行聲明。 C語言中void類型的指針可以賦值給任何類型的指針,C+中不能。 定義: int a, *p_int; C語言中:void *p_void= C+中: p_int=(int *)p_void; (使用強(qiáng)制類型轉(zhuǎn)換),13.1 C+概述,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),7,(3) C與C+在函數(shù)上的不同:,C+中函數(shù)必須先定義或聲明函數(shù)原型才能調(diào)用。 C+中函數(shù)若有參數(shù),則在函數(shù)聲明中必須列出參數(shù)。 C+中在函數(shù)定義時(shí),形式參數(shù)的類型應(yīng)在參數(shù)表中聲明。 int Sum(int a,int b) return (a+b); C語言中,未說明為void類型的函數(shù)可以
4、不返回值;C+中,未說明為void類型的函數(shù)(構(gòu)造函數(shù)除外)都必須有返回值。,13.1 C+概述,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),8,13.2 C+對C的擴(kuò)充,13.2.1 C+的輸入輸出 13.2.2 C+的行注釋 13.2.3 const常量定義與使用 13.2.4 局部變量的定義與全局變量作用域運(yùn)算符 13.2.5 變量的引用 13.2.6 函數(shù)重載 13.2.7 帶缺省參數(shù)的函數(shù) 13.2.8 內(nèi)聯(lián)函數(shù) 13.2.9 new和delete算符,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),9,13.2.1 C+的輸入輸出,在頭文件iostream.h中, C+提
5、供了標(biāo)準(zhǔn)流: 標(biāo)準(zhǔn)輸入流cin, 缺省設(shè)備為鍵盤。 標(biāo)準(zhǔn)輸出流cout, 缺省設(shè)備為顯示器。 標(biāo)準(zhǔn)出錯(cuò)輸出流cerr, 立即輸出,缺省設(shè)備為顯示器。 標(biāo)準(zhǔn)出錯(cuò)輸出流cerr的緩沖形式clog, 緩沖區(qū)滿輸出,缺省設(shè)備為顯示器。 標(biāo)準(zhǔn)流是不需要打開與關(guān)閉文件就可以使用的流式文件。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),10,(1)用標(biāo)準(zhǔn)輸出流cout 進(jìn)行輸出,格式: cout輸出項(xiàng); “”叫插入運(yùn)算符,將輸出項(xiàng)插入到輸出流中 例如: cout” This is a C+ Programn” ; 相當(dāng)于語句: printf(” This is a C+ Programn
6、”);,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),11,cout允許使用多個(gè)插入運(yùn)算符“”將多個(gè)輸出項(xiàng)插入到輸出流中。 插入運(yùn)算符的結(jié)合方向是自左向右。 例如: int a=15,b=32; cout”a=”an”b=”bn; 輸出結(jié)果為: a=15 b=32 在iostream.h中,定義了一個(gè)與n相同的控制字符endl。 cout”a=”aendl”b=”bendl ;,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),12,cout通過控制符setw來設(shè)置。 格式為:setw(n) 表明要為后續(xù)的一個(gè)輸出項(xiàng)預(yù)留n列。如輸出項(xiàng)長度不夠n,則數(shù)據(jù)右對齊;如
7、超過n列,則按實(shí)際長度輸出。 例如: cout”a=”setw(4)a”b=”b endl ”a+b=”a+bendl ”x=”setw(3)xendl; 輸出結(jié)果為: a=5b=10 /代表空格 a+b=15 x=3.14159,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),13,(2)用標(biāo)準(zhǔn)輸入流cin進(jìn)行輸入,從鍵盤輸入數(shù)據(jù)時(shí),使用cin與提取運(yùn)算符從輸入流中提取數(shù)據(jù)。 例如: int a; float x; cinax; /相當(dāng)于scanf(“%d%f ”, 連續(xù)輸入多個(gè)變量值時(shí),各值以空格或回車分隔。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),
8、14,例13.1 流cin與cout的使用,#include void main() int score; char name20; cout name; /輸入姓名 cinscore; /輸入成績 cout “ Your name is ” name endl; cout “Your score is ” score endl; ,13.2 C+對C的擴(kuò)充,運(yùn)行情況如下: Input your name and score: TanJing 98 Your name is TanJing Your score is 98,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),15,帶參數(shù)(定義在iostre
9、am.h中)與帶參數(shù)的格式控制操作符(定義在iomanip.h中):, dec以十進(jìn)制形式輸入或輸出整數(shù); oct以八進(jìn)制形式輸入或輸出整數(shù); hex以十六進(jìn)制形式輸入或輸出整數(shù); ws用于輸入時(shí)跳過開頭的空白符; endl用于輸出時(shí)換行; ends用于輸出時(shí)插入空格字符; setbase(int n)基數(shù)轉(zhuǎn)換成n(n的取值為0,8,10或16),可用于輸入和輸出; setw(int n)設(shè)置域?qū)挒閚,可用于輸入和輸出; setfill(int c)設(shè)置填充字符為c,可用于輸出; setprecision(int n)設(shè)置精度為n位,可用于輸入和輸出,但用于輸入時(shí)應(yīng)多加一位。,13.2 C+對
10、C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),16,13.2.2 C+的行注釋,注釋界限符:/*和*/ “/*/”注釋方式不能嵌套 單行注釋符: / 注釋自“/”開始至行尾,適合于不超過一行的注釋。 main( ) /*main( )函數(shù) /*嵌套注釋。*/ */ /* main( )函數(shù) /嵌套注釋。 */ ,13.2 C+對C的擴(kuò)充,該注釋方式不允許,該注釋方式允許,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),17,13.2.3 const常量定義與使用,C語言中,用define宏定義來定義常量。但在編譯預(yù)處理時(shí)將符號常量用其后的常量作簡單的替換,易出現(xiàn)意想不到的問題。 例如: #define
11、 N 2 #define M N+1 #define NUM (M+1)*M/2 通常將NUM的值看成6:NUM=(3+1)*3/2=6 實(shí)際上編譯預(yù)處理后其值:NUM=(2+1+1)*2+1/2=8 C+常量定義格式為: const 類型標(biāo)識符 常量標(biāo)識符=常量表達(dá)式; const解決了上述問題,它定義的常量可以用指針操作。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),18,const用于修飾指針時(shí),有三種組合: (1)指向常量的指針,定義格式為: const 類型標(biāo)識符 *變量名=常量; 例如: const char *str=”China”; 或char const
12、*str=”China”; str是一個(gè)指向常量的指針,稱為常量指針,不能改變所指常量的值。 例如: str0=S;重新賦值不允許 但指針str本身不是一個(gè)常量,而是一個(gè)變量,可以指向另一個(gè)常量。 例如:str=”Changsha”;,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),19,(2)指針為常量,稱為指針常量,定義格式為: 類型標(biāo)識符 * const 指針變量名=常量; 例如: char *const str=”China”; 不能寫為:char const *str=”China”; str是一個(gè)常量,不能修改str的值。 例:str=”Changsha”; 在C+
13、中是非法的。 但str沒有定義為指向常量,其所指的值可以改變。 例如:str0=S;是合法的。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),20,(3)指向常量的常指針,指針和它所指的對象都為常量 const 類型標(biāo)識符 *const 變量名=常量; 例如:const char *const str=”China”; 指針str不能指向”China”以外的字符串,也不能改變指針?biāo)傅膶ο?例如:下面的操作都是錯(cuò)誤的。 str=”Changsha”; str2=A;,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),21,13.2.4 局部變量的定義與全局變量作
14、用域運(yùn)算符,(1) 局部變量的定義 C+語言把局部變量的定義看成是執(zhí)行語句,只要在局部變量首次使用前已定義即可。這樣,可將變量定義置于使用該變量的語句之前,便于閱讀和修改。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),22,例13.4 輸入一個(gè)班學(xué)生的C語言成績(最多40人),求班平均成績,#include const int MaxN=40; / MaxN表示每班最多人數(shù) main( ) float sum=0; / sum存放學(xué)生的總成績 for (int n=1;nscore; sum+=score; couty_or_n; if (y_or_n = =N| y_or
15、_n = =n) break; cout“n學(xué)生人數(shù)為:”nendl“平均成績?yōu)?sum/nendl; ,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),23,(2) 全局變量作用域運(yùn)算符: 例13.5 變量作用域示例。 include int a=10; main() float a=3.14; printf(“a=%fn”,a); 輸出結(jié)果為:3.140000 C語言規(guī)定:局部變量與全局變量同名時(shí),在局部變量作用域內(nèi),全局變量被屏蔽。,13.2 C+對C的擴(kuò)充,#include int a=10; void main() float a=3.14; cout”a=”:aen
16、dl; 輸出結(jié)果為a=10 C+通過作用域運(yùn)算符“:”來使用全局變量a,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),24,13.2.5 變量的引用,(1)引用的概念 引用是以別名的方式來使用另一變量或常量,其作用是為變量取一個(gè)別名。 引用的聲明格式: 類型標(biāo)識符 b是a的引用,亦即b是a的別名,對b的任何操作就是對a的操作。a和b具有相同的存儲單元,只是名稱不同而已,b就是a本身。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),25,在使用引用時(shí),應(yīng)注意以下幾個(gè)方面: 創(chuàng)建一個(gè)引用時(shí)必須將其初始化成對某一具體變量或常量的引用; 程序中不能改變引用對象,即不能改變成對另一變量或常量的
17、引用; 必須確保引用是和一個(gè)合法的存儲單元相連; 對常量的別名引用必須是const類型的引用。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),26,(2)引用作為函數(shù)參數(shù),C語言中,函數(shù)的參數(shù)傳遞有兩種: 一是值傳遞,把變量名作為實(shí)參。 二是指針傳遞。 C+擴(kuò)展函數(shù)參數(shù)傳遞的第三種方式。即用引用型變量作為函數(shù)參數(shù)。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),27, 值傳遞,#include void Swap(int a, int b) inttemp; temp=a; a=b; b=temp; couta=a,b=bendl; void main()
18、inti=5,j=10; couti=i,j=jendl; Swap(i,j); couti=i,j=jendl; 程序執(zhí)行結(jié)果為: i=5,j=10 a=10,b=5 i=5,j=10,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),28,傳遞變量的指針,#include void Swap(int *p1,int *p2) int temp; temp=*p1; *p1= *p2; *p2=temp; void main ( ) int a=5, b=10; cout“a=”a“,”“b=”bendl;/輸出a,b交換前的值 Swap (/輸出a,b交換后的值 程序執(zhí)行結(jié)果
19、為: a=5,b=10 a=10,b=5,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),29, 采用引用作為函數(shù)參數(shù),#include void Swap(int /輸出調(diào)用swap( )后i,j的值 程序執(zhí)行結(jié)果為: i=5,j=10 a=10,b=5 i=10,j=5,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),30,(3)引用作為函數(shù)的返回值,#include int /調(diào)用后t的值 程序執(zhí)行結(jié)果為: 9 t= 9 10 t=10,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),31,13.2.6 函數(shù)重載,函數(shù)重載是指允許同一作用域
20、用同一函數(shù)名來定義不同的函數(shù)。 重載函數(shù)的參數(shù)必須具備以下差別之一: (1) 函數(shù)參數(shù)個(gè)數(shù)不同。 (2) 函數(shù)參數(shù)類型不完全相同。 函數(shù)的參數(shù)表稱為函數(shù)的特征 注意 : (1)僅返回類型不同的函數(shù)不能重載; (2)若函數(shù)參數(shù)除其中一個(gè)是另一個(gè)的類型的const或引用外均相同,則不能重載。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),32,例如:求兩數(shù)之和的函數(shù) int Sum(int n,int m); 正確的重載: float Sum(float n,float m);/ 參數(shù)類型不同,可以重載 int Sum(int n,int m,int p); / 參數(shù)個(gè)數(shù)不同,可
21、以重載 錯(cuò)誤的函數(shù)重載: float Sum(int n,int m);/僅返回類型不同,不能重載。 int Sum(const int n,int m);/參數(shù)是同類型的const,不能重載。 int Sum(int /參數(shù)是同類型的引用,不能重載。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),33,例13.10 利用重載函數(shù)求不同類型、不同個(gè)數(shù)的數(shù)的最小值。,#include int Min(int x,int y) return xz) temp=z; return temp; float Min(float x,float y,float z) float temp
22、; if (xy) temp=x; else temp=y;,if (tempz) temp=z; return temp; int main( ) coutendlMin(5,10)endl; coutMin(10,4,8)endl; float min,x=10.1,y=15.1,z=8.4; min=Min(x,y,z); coutminendl; return 0; 輸出結(jié)果為: 5 4 8.4,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),34,13.2.7 帶缺省參數(shù)的函數(shù),例13.11 求三個(gè)整數(shù)的最大值 #include int Fmax(int a, int
23、 b,int c=-32768) int temp; temp=ab?a:b; if (tempmnq; max=Fmax(m,n,q); coutMax=maxendl; cout”Input m,n:”;,cinmn ; max=Fmax(m,n); coutMax=maxendl; 程序執(zhí)行結(jié)果為: Input m,n,q:8 5 10 Max=10 Input m,n,q:8 5 Max=8,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),35,使用缺省參數(shù)函數(shù)時(shí)應(yīng)注意:,(1)一旦某參數(shù)定義了缺省值,其后續(xù)參數(shù)(即其右邊的所有參數(shù))均須定義缺省值; 例如:int Fm
24、ax(int a, int b=0,int c); 錯(cuò)誤:b有缺省值,c也必須有缺省值。 (2)調(diào)用含缺省參數(shù)的函數(shù)時(shí),若某參數(shù)用缺省值,則其后的所有參數(shù)都應(yīng)用缺省值; 例如: Fmax(a, , c); 錯(cuò)誤:b使用缺省值,則c也必須使用缺省值。 (3)如在函數(shù)原型(即函數(shù)聲明)中定義了缺省參數(shù),就不能在函數(shù)原型有效范圍里的函數(shù)定義中再設(shè)置缺省參數(shù)。若在函數(shù)定義時(shí)設(shè)置缺省參數(shù),則不能在函數(shù)體外再說明缺省參數(shù)的函數(shù)原型。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),36,例如: int Fmax(int a, int b,int c=-32768); /在原型中設(shè)置缺省值
25、int Fmax(int a, int b,int c=-32768) /錯(cuò)誤:前面函數(shù)原型已經(jīng)設(shè)置缺省值 或者直接在函數(shù)定義時(shí)設(shè)缺省值: int Fmax(int a, int b,int c=-32768) /允許:前面沒有說明函數(shù)原型,可以在定義函數(shù)時(shí)設(shè)置缺省值 ,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),37,(4)不要同時(shí)使用重載函數(shù)與缺省參數(shù)的函數(shù),因?yàn)樵谡{(diào)用函數(shù)時(shí),如果實(shí)參與形參個(gè)數(shù)不同,則系統(tǒng)無法判斷是使用重載函數(shù)還是缺省參數(shù)的函數(shù)。這也是使用缺省參數(shù)函數(shù)帶來的副作用。 (5)缺省參數(shù)函數(shù)的使用提高了函數(shù)的易用性,但過度的使用會降低程序的可讀性。,13.2
26、 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),38,13.2.8 內(nèi)聯(lián)函數(shù),宏替換所產(chǎn)生問題的典型示例: #include #define Square(x) x*x /宏定義,求x的平方 void main( ) int x; coutx; cout “x的平方為:”Square(x)endl; cout “x+2的平方為:”Square(x+2)endl; 程序執(zhí)行的結(jié)果為: 輸入x::5 x的平方為:25 x+2的平方為:17 執(zhí)行結(jié)果有誤,原因是Square(x+2)經(jīng)宏替換后為:x+2*x+2。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),39,內(nèi)聯(lián)函數(shù)
27、定義方法: 在進(jìn)行函數(shù)定義或函數(shù)聲明時(shí),在函數(shù)首部最左邊冠以“inline”關(guān)鍵字。 #include inline int Square(int x)/內(nèi)聯(lián)函數(shù),求x的平方 return x*x; void main( ) int x; coutx; coutx的平方為:Square(x)endl; coutx+2的平方為:Square(x+2)endl; C+編譯器用“內(nèi)聯(lián)函數(shù)”函數(shù)體中的代碼替換原來的函數(shù)調(diào)用,同時(shí)將實(shí)參代替形參,如同預(yù)處理時(shí)的宏替換 。,程序執(zhí)行的結(jié)果為: 輸入x: 5 x的平方為:25 x+2的平方為:49,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基
28、礎(chǔ),40,使用內(nèi)聯(lián)函數(shù)應(yīng)注意:,(1)內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在對該函數(shù)的調(diào)用之前,最簡單的方法是放在頭文件中; (2)在類中定義的成員函數(shù)自動(dòng)成為“內(nèi)聯(lián)函數(shù)”; (3)遞歸函數(shù)不能作內(nèi)聯(lián)函數(shù); (4)通常只將調(diào)用相對少的短函數(shù)定義為“內(nèi)聯(lián)函數(shù)”,在循環(huán)中最好不要使用內(nèi)聯(lián)函數(shù); (5)在內(nèi)聯(lián)函數(shù)中不能含有復(fù)雜的控制結(jié)構(gòu),如switch、while。,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),41,13.2.9 new和delete算符,動(dòng)態(tài)的分配和撤銷內(nèi)存空間。 new 分配存儲單元,格式為: new 數(shù)據(jù)類型 或 new 數(shù)據(jù)類型元素個(gè)數(shù);/對數(shù)組 例如: (1) int
29、 *p; p= new int;/分配一個(gè)整型單元(兩字節(jié)),返回地址指針賦給p (2) float *pf=new float; /分配一個(gè)浮點(diǎn)4字節(jié)用于浮點(diǎn)數(shù),返回地址指針賦給pf。 (3)申請一塊80個(gè)字符的空間: char *PAarrayNew=new char80;,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),42,delete釋放用new 分配的空間,格式為: delete 指向分配空間的指針變量; /分配的是單個(gè)對象空間 或:delete 指向分配空間的指針變量; /分配的是數(shù)組空間 例如: 釋放例(1)的內(nèi)存: delete p; 釋放例(3)的空間: d
30、elete PArrayNew ;,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),43,注意: 使用new分配存儲單元,必須指明存放數(shù)據(jù)的數(shù)據(jù)類型,據(jù)此自動(dòng)確定分配所需內(nèi)存,返回其首地址。若無法分配到所要的內(nèi)存,則返回0。 用new分配的存儲單元,必須用delete釋放。 用new分配的存儲塊不能自動(dòng)初始化為0。但可以在分配時(shí)用表達(dá)式或表達(dá)式序列顯式初始化存儲單元;new不能自動(dòng)對數(shù)組進(jìn)行初始化。 例如: int *P_Int=new int (0);/new申請1個(gè)整型變量,并初始化為0 int *PArray=new int 10(0);/錯(cuò)誤:不允許初始化數(shù)組,13.2
31、 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),44,例如: struct STUDENT char *name; char *id; float score; *PStudent; PStudent=new STUDENT;/為用戶定義類型分配存儲單元 PStudent-name=”WangWu”;/初始化存儲單元 PStudent-id=”0309301”; PStudent-score=98;,13.2 C+對C的擴(kuò)充,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),45,例13.13 new與delete使用示例,#include #include struct Book char na
32、me20; float price; ;,13.2 C+對C的擴(kuò)充,void main() Book *b; b=new Book; strcpy(b-name,”C+ Programming”); b-price=45.8; coutnamepricenameendl; 不能再使用b 程序執(zhí)行結(jié)果: C+ Programming 45.8,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),46,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),13.3.1 類與對象 13.3.2 構(gòu)造函數(shù)與析構(gòu)函數(shù) 13.3.3 靜態(tài)成員 13.3.4 友元 13.3.5 運(yùn)算符重載 13.3.6 繼承與派生 13.3.7 多態(tài)性與虛函
33、數(shù) 13.3.8 IO流 13.3.9 文件輸入輸出流 13.3.10 模板 13.3.11 異常處理,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),47,13.3.1 類與對象,面向?qū)ο蟪绦蛟O(shè)計(jì)方法就其實(shí)質(zhì)而言是一種面向數(shù)據(jù)的程序設(shè)計(jì)方法,它謀求的是設(shè)計(jì)結(jié)果與問題在結(jié)構(gòu)上保持一致。 對象:將數(shù)據(jù)(或稱為屬性、狀態(tài))及施加在數(shù)據(jù)上的功能(或稱為操作、行為、方法)捆綁在一起。 類:由對象抽象而為類,通過繼承形成類層次。 對象間通過發(fā)送消息而相互聯(lián)系和相互作用,從而完成系統(tǒng)的有關(guān)功能。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),48,面向?qū)ο蟮某?/p>
34、序設(shè)計(jì)語言應(yīng)具有的特征: 支持對象(Object)的有關(guān)概念; 將對象抽象為類(Class); 類通過繼承(Inheritance)形成類層次; 對象間通過傳遞消息(Message)而相互聯(lián)系。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),49,(1)對結(jié)構(gòu)的擴(kuò)充,C結(jié)構(gòu)中只含有數(shù)據(jù)成員; C+的結(jié)構(gòu)中增加了與數(shù)據(jù)成員的處理有關(guān)的函數(shù),稱之為成員函數(shù)。 在C+中,結(jié)構(gòu)體的成員通常分為兩類: 私有成員(private) 公有成員(public)。 在缺省的情況下,如例13.13,C+規(guī)定結(jié)構(gòu)體的成員是公有的。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章
35、C+基礎(chǔ),50,例13.14 C+的結(jié)構(gòu)體示例,#include #include struct COMPLEX double real; double image; double AbsComplex( ) double temp; temp=real*real+image*image; return sqrt(temp); ;,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),int main( ) COMPLEX cpl; cpl.real=6; cpl.image=8; cout“復(fù)數(shù)“cpl.real + cpl.image i“的絕對值為:”; coutcpl.AbsComplex( )endl;
36、return 0; 程序執(zhí)行結(jié)果為: 復(fù)數(shù)6+8i的絕對值為:10,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),51,(2) 類與對象,“類”:就是對一組具有相同屬性(特征)和操作(行為)的事物。 “類”由“對象”進(jìn)行抽象而成 一個(gè)“對象”就是一個(gè)“類”的具體實(shí)例 對象具有以下幾個(gè)方面的特征: 對象的標(biāo)志符或名字; 描述對象的屬性; 與對象的屬性有關(guān)的操作。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),52,例如:“劉偉”是一個(gè)“學(xué)生”對象。,對象名:劉偉 對象的屬性: 姓名:劉偉 學(xué)號:00001 年齡:22 性別:男 總分:712 對象的操作:修改,13.3 C+面向?qū)?/p>
37、象程序設(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),53,類聲明形式:,class 類名 private: 私有數(shù)據(jù)成員和成員函數(shù) public: 公有數(shù)據(jù)成員和成員函數(shù) protected: 保護(hù)數(shù)據(jù)成員和成員函數(shù) 對象名表;,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),54,說明:,類聲明中的private、public和protected三個(gè)關(guān)鍵字的出現(xiàn)次序和次數(shù)可以是任意的。如果private在類聲明一開始就出現(xiàn),則可以省略。 private、public和protected用來設(shè)置訪問安全保護(hù)措施: private后聲明的數(shù)據(jù)成員和成員函數(shù)只能被類的成員和友元
38、函數(shù)訪問; public后聲明的數(shù)據(jù)成員和成員函數(shù)沒有訪問限制; protected同private基本相似,不同:子類可以使用protected之后聲明的數(shù)據(jù)成員和成員函數(shù),但不能使用private之后聲明的數(shù)據(jù)成員和成員函數(shù)。 數(shù)據(jù)成員的數(shù)據(jù)類型可以是任何數(shù)據(jù)類型,但不能用auto、register或extern修飾,且不能在類聲明時(shí)賦初值。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),55,例如 :,class Cstudent private: /下面是該類的三個(gè)私有成員 char Name20; int Id; int Score; public: /公用成
39、員 void display() /類的成員函數(shù),是類的實(shí)現(xiàn) coutNameendl; coutIdendl; coutScoreendl; ; /類定義結(jié)束,其后的分號不能少 Cstudent st1,st2; /創(chuàng)建Cstudent類的兩個(gè)對象st1、st2,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),56,類中的常見成員函數(shù):,構(gòu)造函數(shù):用來對數(shù)據(jù)成員進(jìn)行初始化,創(chuàng)建對象時(shí)調(diào)用,名字與類名相同,一個(gè)類可有多個(gè)構(gòu)造函數(shù),但參數(shù)個(gè)數(shù)或類型應(yīng)不同。 析構(gòu)函數(shù):用來釋放分配給對象的空間,撤銷對象時(shí)調(diào)用,名字是在構(gòu)造函數(shù)名前加一個(gè)波浪號(),且函數(shù)沒有參數(shù),無返回值,一
40、個(gè)類只有一個(gè)。 靜態(tài)成員函數(shù):成員函數(shù)之前有“static”關(guān)鍵字,一般用于靜態(tài)數(shù)據(jù)成員或全局變量的訪問,同靜態(tài)數(shù)據(jù)成員一樣,為該類的所有對象共享。 內(nèi)聯(lián)成員函數(shù):一般在類內(nèi)部定義,調(diào)用該成員函數(shù)時(shí),C+編譯器將用函數(shù)體中的代碼替代函數(shù)調(diào)用表達(dá)式。 虛函數(shù):成員函數(shù)前有“Virtual”關(guān)鍵字。 const成員函數(shù):const對象是一個(gè)常量,非const成員函數(shù)有可能修改數(shù)據(jù)成員,const成員函數(shù)是用來為const對象服務(wù)的。 友元函數(shù):聲明時(shí)函數(shù)前加“friend”關(guān)鍵字。它可以是另一個(gè)類的成員函數(shù),也可以是不屬于任何類的普通函數(shù)。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三
41、章 C+基礎(chǔ),57,例13.15 類的使用示例,#include #include class Cstudent private: int Id; /學(xué)號 float Score; /成績 public: char Name20; void SetScore(float Blscore) Score=Blscore; float DisScore( ) return Score; void SetId(int Idnum ); /置學(xué)號成員函數(shù)聲明,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),int DisId( ); /聲明顯示學(xué)號函數(shù) /聲明顯示類的各成員變量的成員函數(shù) void Display()
42、coutNameendl; coutIdendl; coutScoreendl; ; /類定義結(jié)束,其后的分號不能少 /在類的外部實(shí)現(xiàn)定義學(xué)號成員函數(shù) int Cstudent:DisId( ) return Id; void Cstudent:SetId( int Idnum ) Id=Idnum;,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),58,主函數(shù)中使用類:,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),程序執(zhí)行結(jié)果為: 姓名:劉偉 學(xué)號:3301 成績:98 劉偉 3301 98,int main() Cstudent Liuwei; /創(chuàng)建一個(gè)Cstudent類對象Liuwei strcpy(Liu
43、wei.Name,“劉偉”); /Name是類的公用數(shù)據(jù)成員,可以在類外使用。 Liuwei.SetId(3301); /學(xué)號與成績是私有成員,只能由成員函數(shù)使用 /不能Liuwei.Id=3301; Liuwei.SetScore(98); cout 姓名: Liuwei.Name endl; cout 學(xué)號: Liuwei.DisId() endl; cout 成績: Liuwei.DisScore() endl; Liuwei.Display(); return 0; ,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),59,外部定義成員函數(shù)的一般格式為:,函數(shù)類型 類名:函數(shù)名(形參說明表列) 函
44、數(shù)體 例如:上例中的設(shè)置學(xué)號成員函數(shù)。 void Cstudent:SetId( int Idnum ) Id=Idnum; 注意: Cstudent:SetId(int Idnum)是一個(gè)整體,說明SetId( )是類Cstudent中的成員函數(shù)。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),60,消息(Message):,消息是“對象”與“對象”之間的聯(lián)系接口,用于調(diào)用某個(gè)對象的成員函數(shù)(或稱激活某個(gè)方法) 一個(gè)消息由三個(gè)部分組成: 消息的接受對象,即“類”的對象名 ; 消息名,即類中公有成員函數(shù)的函數(shù)名 ; 零個(gè)或多個(gè)參數(shù),即公有成員函數(shù)的形式參數(shù)。 例如: 向
45、“STUDENT”類的一個(gè)對象“Liuwei”發(fā)送一個(gè)消息,通知它執(zhí)行“Display”方法,消息表示為:Liuwei.Display( ); “Liuwei”為消息接受的對象 “Display”為消息名 消息不帶參數(shù),對象由相應(yīng)的方法對消息進(jìn)行響應(yīng)。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),61,13.3.2 構(gòu)造函數(shù)與析構(gòu)函數(shù),(1) 構(gòu)造函數(shù) 構(gòu)造函數(shù)是與類同名的特殊成員函數(shù),聲明類對象時(shí),構(gòu)造函數(shù)被自動(dòng)調(diào)用,為對象分配內(nèi)存空間,對該對象進(jìn)行初始化 構(gòu)造函數(shù)的聲明格式為: class 類名 public: 類名();/缺省構(gòu)造函數(shù)原型 類名(參數(shù)表);/一般
46、構(gòu)造函數(shù)原型 類名(類名 int Id; int Score; public: Cstudent( ) /類的缺省構(gòu)造函數(shù) strcpy(Name,”劉偉”); Id=3301; Score=98; void Display() coutNameendl; coutIdendl; coutScoreendl; ;,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),int main() Cstudent Liuwei; /系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)Cstudent()對對象 /Liuwei進(jìn)行初始化 /以下的初始化語句不需要了。 /strcpy(Liuwei.Name,“劉偉”); / Liuwei.SetId(330
47、1); / Liuwei.SetScore(98); cout 姓名:Liuwei.Nameendl; cout 學(xué)號:Liuwei.DisId()endl; cout“成績:Liuwei.DisScore()endl; Liuwei.Display(); return 0; ,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),63,帶參數(shù)的構(gòu)造函數(shù),#include #include class Cstudent private: char Name20; int Id; int Score; public: Cstudent(char n20,int i, int sc=0 ); /構(gòu)造函數(shù)原型聲明,
48、有形參,可缺省參數(shù) void Display() cout 姓名: Name endl; cout 學(xué)號:Id endl; cout 成績: Score endl; ; Cstudent:Cstudent(char n20,int i, int sc=0 ) strcpy(Name,n); Id=i; Score=sc; ,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),int main() Cstudent Liuwei(“劉偉”,3301,98), WangWu(“王五”,3302); /創(chuàng)建兩個(gè)Cstudent類對象Liuwei與 /WangWu,以不同的實(shí)參進(jìn)行初始化 Liuwei.Display()
49、; WangWu.Display(); return 0; 執(zhí)行結(jié)果為: 姓名:劉偉 學(xué)號:3301 成績:98 姓名:王五 學(xué)號:3302 成績:0 帶形參的構(gòu)造函數(shù)根據(jù)參數(shù)的不同完成不同的初始化。,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),64,拷貝構(gòu)造函數(shù),當(dāng)構(gòu)造函數(shù)將自己所在的類的引用作為參數(shù)時(shí),稱之為拷貝構(gòu)造函數(shù)。 拷貝構(gòu)造函數(shù)的定義如下: C:C(const C int Id; int Score; public: Cstudent(char n20,int i, int sc=0 ) /普通構(gòu)造函數(shù),有形參,可缺省參數(shù) strcpy(Name,n); Id=i; Score=sc;
50、Cstudent(const Cstudent ,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),void Display() cout“姓名:”Name“ “ “學(xué)號:”Id“ ” “成績:”Scoreendl; ; int main() Cstudent LiuWei(“劉偉”,3301,98); /用普通構(gòu)造函數(shù)創(chuàng)建LiuWei Cstudent WangWu(LiuWei); /用拷貝構(gòu)造函數(shù)創(chuàng)建對象WangWu /用已有對象LiuWei的值對WangWu初始化 LiuWei.Display(); WangWu.Display(); return 0; 程序執(zhí)行結(jié)果: 姓名:劉偉 學(xué)號:3301 成績
51、:98 姓名:劉偉 學(xué)號:3301 成績:98,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),66,對沒有定義構(gòu)造函數(shù)的類,若類的全部數(shù)據(jù)成員均為公有數(shù)據(jù)成員,則其對象的數(shù)據(jù)成員可以象結(jié)構(gòu)體變量一樣來初始化。,#include #include class Cstudent public: char Name20; int Id; int Score; void Display() cout“姓名:”Nameendl; cout “學(xué)號:”Idendl; cout“成績:”Scoreendl; LiuWei=劉偉,3301,98;,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),int main() LiuWei.D
52、isplay(); return 0; 程序執(zhí)行結(jié)果: 姓名:劉偉 學(xué)號:3301 成績:98,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),67,隱含的對象指針:this,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),this是一個(gè)隱含指針,不能被顯式地聲明,它是一個(gè)局部變量。 對象的每個(gè)成員函數(shù)都有一個(gè)指向該對象的指針。對象的成員函數(shù)通過this指針可以知道自己屬于哪一個(gè)對象、哪些成員屬于同一個(gè)對象。通過this指針,同一個(gè)對象的成員可以互相調(diào)用,而無需指明成員所在的對象。 this指針指向具體的對象,可以顯式的使用。,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),68,例如:,class X int Xi; publ
53、ic: X(int I) Xi=I; /隱含使用this指針 ; 它相當(dāng)于: class X int Xi; public: X(int I) this-Xi=I; /顯式的使用this指針 ;,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),69,(2)析構(gòu)函數(shù),構(gòu)造函數(shù)在創(chuàng)建對象時(shí)自動(dòng)完成為其分配內(nèi)存空間及初始化工作,在對象使用完之后撤消對象的工作由類中另一個(gè)特殊函數(shù),即析構(gòu)函數(shù)來完成。 析構(gòu)函數(shù)的名字是在類名前加一個(gè)“”, 以區(qū)別于構(gòu)造函數(shù)。 一個(gè)類只能有一個(gè)析構(gòu)函數(shù),析構(gòu)函數(shù)不能被重載(構(gòu)造函數(shù)可以重載)。 不能帶任何參數(shù),也不能有返回值(包括void類型)。 析
54、構(gòu)函數(shù)不能釋放new申請的空間。對于用new動(dòng)態(tài)申請的內(nèi)存空間,則必須用delete操作釋放??梢詫elete放在析構(gòu)函數(shù)中,在撤消對象時(shí)亦可釋放new申請的空間。 如果一個(gè)類沒有顯式地說明析構(gòu)函數(shù),則系統(tǒng)自動(dòng)生成一個(gè)缺省的析構(gòu)函數(shù)。,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),70,例13.18 構(gòu)造函數(shù)與析構(gòu)函數(shù)使用示例,#include #include class COMPLEX private: double real; double image; public: double AbsComplex( ) double temp; temp=real*re
55、al+image*image; return sqrt(temp); COMPLEX(double r,double i) real=r; image=i; COMPLEX() /析構(gòu)函數(shù) cout自動(dòng)調(diào)用析構(gòu)函數(shù)endl; ;,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),int main( ) COMPLEX cpl(6,8); /調(diào)用“構(gòu)造函數(shù)”初始化對象的 /私有成員real和image /COMPLEX c; /錯(cuò)誤:因?yàn)椤皹?gòu)造函數(shù)”有兩個(gè)參數(shù) cout“復(fù)數(shù)6+8i的絕對值:” cpl.AbsComplex( ) endl; return 0; ,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),71,例1
56、3.19 用戶自定義析構(gòu)函數(shù),#include #include class Cstudent private: char *Name; int Id; int Score; public: Cstudent(char *n,int i, int sc=0 ) cout自動(dòng)調(diào)用構(gòu)造函數(shù)endl; Name=new char 20; /用new為Name分配空間 strcpy(Name,n); Id=i; Score=sc; ,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),Cstudent( ) /析構(gòu)函數(shù) if (Name) delete Name; /若Name非空,則釋放其占用的空間 Name=NULL
57、; coutCstudent的對象被撤消,自動(dòng)調(diào)用析構(gòu)函數(shù)endl; void Display() cout“姓名:”Name“ ” “學(xué)號:”Id“ ” “成績:”Scoreendl; ; int main() Cstudent LiuWei(“劉偉”,3301,98); /用構(gòu)造函數(shù)創(chuàng)建對象LiuWei LiuWei.Display(); return 0; ,C語言程序設(shè)計(jì)教程第十三章 C+基礎(chǔ),72,13.3.3 靜態(tài)成員,13.3 C+面向?qū)ο蟪绦蛟O(shè)計(jì),關(guān)鍵字static用于一個(gè)類的成員,聲明它們?yōu)殪o態(tài)的,稱這樣的成員為靜態(tài)成員。 一旦把類的成員函數(shù)聲明為靜態(tài),將為所有該類的對象所共享。任意一個(gè)對象對靜態(tài)成員的操作結(jié)果都會影響該類的其它對象
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 42567.4-2025工業(yè)過程測量變送器試驗(yàn)的參比條件和程序第4部分:物位變送器的特定程序
- 別墅果樹出售合同范本
- 勘查標(biāo)準(zhǔn)合同范本
- 上海古董拍賣合同范本
- 信托轉(zhuǎn)讓合同范本
- 單位與單位入股合同范本
- 鄉(xiāng)村道路跨寬施工合同范本
- 加工企業(yè)入股合同范本
- 單位施工合同范例
- 包裝盒印刷廠合同范本
- 2025年湖南工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫含答案
- 社會企業(yè)參與養(yǎng)老服務(wù)的模式與效果
- 2025年執(zhí)業(yè)醫(yī)師定期考核題庫及參考答案
- 2025年北京交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 心理健康七個(gè)一主題活動(dòng)方案
- 多元化票務(wù)系統(tǒng)設(shè)計(jì)-深度研究
- 絕緣墊技術(shù)規(guī)范說明
- 2024年菏澤職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- GB/T 22180-2024速凍裹衣魚
- 《公路施工組織設(shè)計(jì)》課件
- 人教版地理七年級下冊7.1.1 亞洲的自然環(huán)境(課件33張)
評論
0/150
提交評論