2013電子研高級(jí)程序設(shè)計(jì)第10章類和對(duì)象_第1頁
2013電子研高級(jí)程序設(shè)計(jì)第10章類和對(duì)象_第2頁
2013電子研高級(jí)程序設(shè)計(jì)第10章類和對(duì)象_第3頁
2013電子研高級(jí)程序設(shè)計(jì)第10章類和對(duì)象_第4頁
2013電子研高級(jí)程序設(shè)計(jì)第10章類和對(duì)象_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第 10 10 章章第第 10 10 章章 類和對(duì)象類和對(duì)象 第第 10 10 章章主要內(nèi)容10.1 類和對(duì)象的定義類和對(duì)象的定義10.2 初始化對(duì)象、撤消對(duì)象初始化對(duì)象、撤消對(duì)象10.3 成員函數(shù)的特性成員函數(shù)的特性10.4 構(gòu)造函數(shù)和對(duì)象成員構(gòu)造函數(shù)和對(duì)象成員10.5 this 指針指針第第 10 10 章章10.1 10.1 類和對(duì)象的定義類和對(duì)象的定義10.1.1 10.1.1 從結(jié)構(gòu)體到類從結(jié)構(gòu)體到類以前,定義結(jié)構(gòu)體類型,描述一個(gè)對(duì)象以前,定義結(jié)構(gòu)體類型,描述一個(gè)對(duì)象 :struct SPerson /只有數(shù)據(jù)成員只有數(shù)據(jù)成員 char name20; /姓名姓名char sex;

2、 /性別性別 int age; /年齡年齡;把一個(gè)對(duì)象可能具有的動(dòng)作,加入到對(duì)象的描述中,就形成了類。把一個(gè)對(duì)象可能具有的動(dòng)作,加入到對(duì)象的描述中,就形成了類。類是對(duì)具有相同屬性和行為的一個(gè)或多個(gè)對(duì)象的描述。類是對(duì)具有相同屬性和行為的一個(gè)或多個(gè)對(duì)象的描述。類是面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。類是面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。現(xiàn)實(shí)世界中,任何事物都可以稱為對(duì)象。每一個(gè)對(duì)象都具有靜態(tài)屬現(xiàn)實(shí)世界中,任何事物都可以稱為對(duì)象。每一個(gè)對(duì)象都具有靜態(tài)屬性和動(dòng)態(tài)屬性。性和動(dòng)態(tài)屬性。一般地,將對(duì)象的數(shù)值一般地,將對(duì)象的數(shù)值屬性稱為靜態(tài)屬性;將屬性稱為靜態(tài)屬性;將對(duì)象可進(jìn)行的動(dòng)作稱為對(duì)象可進(jìn)行的動(dòng)作稱為動(dòng)態(tài)屬性。動(dòng)態(tài)屬性。如需

3、描述具體的人,應(yīng)定義結(jié)構(gòu)體變量,將人的具體屬性值賦值給對(duì)象的如需描述具體的人,應(yīng)定義結(jié)構(gòu)體變量,將人的具體屬性值賦值給對(duì)象的相應(yīng)成員。需要描述幾個(gè)人就要定義幾個(gè)結(jié)構(gòu)體變量。同時(shí)也可以定義結(jié)相應(yīng)成員。需要描述幾個(gè)人就要定義幾個(gè)結(jié)構(gòu)體變量。同時(shí)也可以定義結(jié)構(gòu)體變量的指針。構(gòu)體變量的指針。第第 10 10 章章10.1.2 10.1.2 類和對(duì)象的定義形式類和對(duì)象的定義形式class private: /私有成員,缺省存取權(quán)限私有成員,缺省存取權(quán)限 public: /公有成員公有成員 protected: /保護(hù)成員保護(hù)成員 ;私有成員:私有成員:只允許類內(nèi)成員函數(shù)存取它只允許類內(nèi)成員函數(shù)存取它公有

4、成員:公有成員:允許類內(nèi)和類外函數(shù)存取它允許類內(nèi)和類外函數(shù)存取它保護(hù)成員:保護(hù)成員:允許類內(nèi)和其派生類函數(shù)存取它允許類內(nèi)和其派生類函數(shù)存取它第第 10 10 章章 例例10.1 10.1 定義描述一個(gè)人的類定義描述一個(gè)人的類 Person Person 源程序文件名為源程序文件名為person.h person.h #include #include class Person private: / 此處,此處,private可缺省可缺省 char Name20; /姓名姓名 char Sex; /性別,性別,三個(gè)數(shù)據(jù)成員三個(gè)數(shù)據(jù)成員 int Age; /年齡年齡 public: / 以下定義了

5、四個(gè)成員函數(shù)以下定義了四個(gè)成員函數(shù) void SetData(char n , char s, int a) strcpy(Name, n); /直接訪問直接訪問NameSex=s; /直接訪問直接訪問Sex Age=a; /直接訪問直接訪問Age 訪問特性訪問特性第第 10 10 章章 void GetName( char *n ) / 函數(shù)函數(shù)strcpy(n, Name); char GetSex( ) / 函數(shù)函數(shù)return Sex;int GetAge( ) / 函數(shù)函數(shù)return Age; / 注意:類定義結(jié)束處的分號(hào)不能少注意:類定義結(jié)束處的分號(hào)不能少 第第 10 10 章章

6、對(duì)象的定義對(duì)象的定義: : ; 如:如:Person a, b ; / 定義定義a、b兩個(gè)對(duì)象兩個(gè)對(duì)象可以定義對(duì)象的指針和對(duì)象數(shù)組:可以定義對(duì)象的指針和對(duì)象數(shù)組:如:如:Person *pa, *pb, x10; / pa和和pb是兩個(gè)是兩個(gè)Person類型指針類型指針, x是對(duì)象數(shù)組是對(duì)象數(shù)組 pa=&a; pb=&b; pa=x; pb=x; 那么能否這樣訪問對(duì)象那么能否這樣訪問對(duì)象a的成員呢?的成員呢? a.Name, a.Sex, a.Age 回答是:不能!回答是:不能! 類是一種類型,該類型的變量稱為對(duì)象(實(shí)例)。類是一種類型,該類型的變量稱為對(duì)象(實(shí)例)。第第 10 10 章章10

7、.1.3 10.1.3 對(duì)象成員的訪問對(duì)象成員的訪問訪問權(quán)限訪問權(quán)限類內(nèi)類內(nèi)訪問特性訪問特性類外類外訪問特性訪問特性private可直接訪問可直接訪問不可直接訪問不可直接訪問protected可直接訪問可直接訪問不可直接訪問不可直接訪問public可直接訪問可直接訪問可直接訪問可直接訪問表表 10-1 類成員的訪問特性類成員的訪問特性 Person a, *pa=&a; /類外訪問如下,類外訪問如下, pa-name a.SetData() pa- SetData() 返回例返回例10.1第第 10 10 章章10.1.4 10.1.4 成員函數(shù)的定義成員函數(shù)的定義 例例10.1,

8、類體內(nèi)定義成員函數(shù)。例,類體內(nèi)定義成員函數(shù)。例10.2 ,類體外定義成員函數(shù)。,類體外定義成員函數(shù)。例例10.2 定義定義Person類,在類體外定義成員函數(shù),類,在類體外定義成員函數(shù),#include 程序文件名為程序文件名為person.h #include class Person char Name20; /姓名姓名 /注意缺省注意缺省 private char Sex; /性別性別 int Age; /年齡年齡public:void SetData(char , char , int );void GetName(char *);char GetSex( );int GetAge(

9、);在類體內(nèi)在類體內(nèi)進(jìn)行進(jìn)行成員函數(shù)說明成員函數(shù)說明 第第 10 10 章章/ 在類體外定義成員函數(shù)在類體外定義成員函數(shù)void Person:SetData(char n , char s, int a) strcpy(Name, n);Sex=s;Age=a;void Person:GetName( char *n )strcpy(n, Name);限定限定SetData( )函數(shù)函數(shù)屬于屬于Person類類第第 10 10 章章續(xù)續(xù)char Person:GetSex( ) return Sex;int Person:GetAge( )return Age;第第 10 10 章章例例10

10、.3 測(cè)試測(cè)試Person類類#include person.h /包含包含例例10.1或或例例10.2中的頭文件中的頭文件void main( )Person a, *pa;char name20;a.SetData(Cheng, F, 20);a.GetName(name);cout Name: name endl;cout Sex: a.GetSex( ) endl;cout Age: a.GetAge( ) SetData(Zhang, M, 18); paGetName(name); cout Name: name endl; cout Sex: GetSex( ) endl; co

11、ut Age: GetAge( ) endl;通過指針通過指針訪問訪問公有成員公有成員 第第 10 10 章章類和對(duì)象的封裝性、隱蔽性 封裝性:是指將對(duì)象的靜態(tài)屬性和動(dòng)態(tài)屬性封裝成一個(gè)整體,即“類”類型。 隱蔽性:是指類的私有成員和保護(hù)成員被隱藏在類內(nèi),在類外不可以通過對(duì)象或其指針直接訪問,從而達(dá)到保護(hù)數(shù)據(jù)成員的目的。第第 10 10 章章10.1.5 10.1.5 對(duì)象的存儲(chǔ)空間對(duì)象的存儲(chǔ)空間定義對(duì)象后,對(duì)象數(shù)據(jù)成員占用不同的存儲(chǔ)空間。定義對(duì)象后,對(duì)象數(shù)據(jù)成員占用不同的存儲(chǔ)空間。Person a, b, *pa=&a, *pb=&b;a.SetData(Cheng, F, 20);b.Set

12、Data(Zhang, M, 18);ChengF20 apaZhangM18 bpb該類的所有對(duì)象的同一成員函數(shù),該類的所有對(duì)象的同一成員函數(shù),共享同一代碼空間。共享同一代碼空間。 第第 10 10 章章對(duì)象存儲(chǔ)空間分配與撤銷的時(shí)機(jī) 對(duì)象存儲(chǔ)空間分配與撤銷是系統(tǒng)根據(jù)對(duì)象的作用域自動(dòng)完成的。 當(dāng)使用動(dòng)態(tài)建立和撤銷對(duì)象時(shí),對(duì)象存儲(chǔ)空間分配與撤銷是由編程者指定在何時(shí)完成。第第 10 10 章章10.1.6 定義類和對(duì)象的有關(guān)說明定義類和對(duì)象的有關(guān)說明1類中數(shù)據(jù)成員的類型可以是任意的,類中數(shù)據(jù)成員的類型可以是任意的, 但自身類的對(duì)象不可以作為成員。但自身類的對(duì)象不可以作為成員。 class Obji

13、nt x; double y;class Personchar Name20; char Sex;int Age;Obj obj1, obj2; / 可以可以Person a, b; / 不可以不可以Person *pa; / 可以可以.; 第第 10 10 章章10.1.6 定義類和對(duì)象的有關(guān)說明(續(xù))定義類和對(duì)象的有關(guān)說明(續(xù))class B; / B類說明類說明class A / A類的定義類的定義private:B *pb; / B類對(duì)象的指針類對(duì)象的指針pb是是A類的數(shù)據(jù)成員類的數(shù)據(jù)成員public:.;class B / B類的定義類的定義.;2若類的使用在前,定義在后,則需引用性

14、說明。若類的使用在前,定義在后,則需引用性說明。第第 10 10 章章10.1.6 定義類和對(duì)象的有關(guān)說明(續(xù))定義類和對(duì)象的有關(guān)說明(續(xù))(1)類的定義完成后,定義對(duì)象)類的定義完成后,定義對(duì)象class A / A類的定義類的定義int x;float y;public:.;A a1, a2, a3; /定義定義A類對(duì)象類對(duì)象 3定義對(duì)象的三種方法定義對(duì)象的三種方法 :第第 10 10 章章10.1.6 定義類和對(duì)象的有關(guān)說明(續(xù))定義類和對(duì)象的有關(guān)說明(續(xù))(2)在定義類的同時(shí)定義對(duì)象)在定義類的同時(shí)定義對(duì)象class A / A類的定義類的定義int x;float y;public:

15、. a1, a2, a3; /定義定義A類對(duì)象類對(duì)象第第 10 10 章章10.1.6 定義類和對(duì)象的有關(guān)說明(續(xù))定義類和對(duì)象的有關(guān)說明(續(xù))缺點(diǎn):缺點(diǎn):只能定義一次該類對(duì)象,只能定義一次該類對(duì)象, 如果以后需要再次定義該類對(duì)象就不可以了。如果以后需要再次定義該類對(duì)象就不可以了。(3)定義無類名的對(duì)象)定義無類名的對(duì)象class /無類名無類名int x;float y;public:. a1, a2, a3; /定義該類對(duì)象定義該類對(duì)象第第 10 10 章章10.1.6 定義類和對(duì)象的有關(guān)說明(續(xù))定義類和對(duì)象的有關(guān)說明(續(xù))4結(jié)構(gòu)體與類的區(qū)別:結(jié)構(gòu)體與類的區(qū)別: 結(jié)構(gòu)體成員缺省的存取權(quán)限

16、是公有的,結(jié)構(gòu)體成員缺省的存取權(quán)限是公有的, 而類中成員缺省的存取權(quán)限是私有的。而類中成員缺省的存取權(quán)限是私有的。 結(jié)構(gòu)體是類的特例。結(jié)構(gòu)體是類的特例。 第第 10 10 章章10.2 10.2 初始化對(duì)象、撤消對(duì)象初始化對(duì)象、撤消對(duì)象“初始化是指:定義對(duì)象的同時(shí)為其賦初值初始化是指:定義對(duì)象的同時(shí)為其賦初值”。對(duì)對(duì)結(jié)構(gòu)體類型結(jié)構(gòu)體類型的對(duì)象,可以這樣初始化:的對(duì)象,可以這樣初始化:struct SPerson /定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型 char name20; /姓名姓名char sex; /性別性別 int age; /年齡年齡;SPerson p1= “Cheng”, F, 20

17、; /初始化初始化 第第 10 10 章章而對(duì)而對(duì)“類類”類型的對(duì)象的類型的對(duì)象的私有私有成員,成員,不不可以這樣初始化??梢赃@樣初始化。class Person /定義定義“類類”類型類型 char name20; /姓名姓名char sex; /性別性別 int age; /年齡年齡;Person p= “Cheng”, F, 20 ; /初始化初始化 原因:原因:結(jié)構(gòu)體默認(rèn)的成員訪問特性(存取權(quán)限)是公有的,結(jié)構(gòu)體默認(rèn)的成員訪問特性(存取權(quán)限)是公有的,而類的默認(rèn)的成員訪問特性(存取權(quán)限)是私有的。而類的默認(rèn)的成員訪問特性(存取權(quán)限)是私有的。第第 10 10 章章對(duì)對(duì)“類類”類型的對(duì)象

18、的類型的對(duì)象的公有公有成員,可以這樣初始化。成員,可以這樣初始化。class Person /定義定義“類類”類型類型 public:char name20; /姓名姓名char sex; /性別性別 int age; /年齡年齡;Person p= “Cheng”, F, 20 ; /初始化初始化 可以為可以為“類類”定義定義構(gòu)造函數(shù)構(gòu)造函數(shù)用于初始化對(duì)象的數(shù)據(jù)成員,用于初始化對(duì)象的數(shù)據(jù)成員,同時(shí)還可以定義同時(shí)還可以定義析構(gòu)函數(shù)析構(gòu)函數(shù)用于撤銷該對(duì)象時(shí)做清理工作。用于撤銷該對(duì)象時(shí)做清理工作。第第 10 10 章章10.2.1 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)1.構(gòu)造函數(shù)構(gòu)造函數(shù)在在類體內(nèi)

19、類體內(nèi)定義定義構(gòu)造函數(shù)構(gòu)造函數(shù)的一般格式是:的一般格式是:ClassName() / ClassName是類名,是類名, . /在此處作為構(gòu)造函數(shù)名在此處作為構(gòu)造函數(shù)名在在類體外類體外定義定義構(gòu)造函數(shù)構(gòu)造函數(shù)的一般格式是:的一般格式是:ClassName : ClassName() . 構(gòu)造函數(shù)的調(diào)用時(shí)機(jī):構(gòu)造函數(shù)的調(diào)用時(shí)機(jī):當(dāng)產(chǎn)生新對(duì)象時(shí),自動(dòng)調(diào)用當(dāng)產(chǎn)生新對(duì)象時(shí),自動(dòng)調(diào)用。在定義一個(gè)類時(shí),可以根據(jù)需要定義一個(gè)或多個(gè)構(gòu)造函數(shù)。若在定義一個(gè)類時(shí),可以根據(jù)需要定義一個(gè)或多個(gè)構(gòu)造函數(shù)。若定義多個(gè)構(gòu)造函數(shù)稱為構(gòu)造函數(shù)的重載。構(gòu)造函數(shù)的定義可以定義多個(gè)構(gòu)造函數(shù)稱為構(gòu)造函數(shù)的重載。構(gòu)造函數(shù)的定義可以在類體

20、內(nèi)也可以在類體外。在類體內(nèi)也可以在類體外。第第 10 10 章章例例10.5 定義日期類,利用構(gòu)造函數(shù)初始化數(shù)據(jù)定義日期類,利用構(gòu)造函數(shù)初始化數(shù)據(jù)成員。程序放在頭文件成員。程序放在頭文件date.h中,如下:中,如下:#include class Date int Year, Month, Day;public:Date( ) /重載構(gòu)造函數(shù)重載構(gòu)造函數(shù) 1Year=2010; Month=5; Day=1; Date(int y) /重載構(gòu)造函數(shù)重載構(gòu)造函數(shù) 2Year=y; Month=5; Day=1; 第第 10 10 章章Date(int y, int m) /重載構(gòu)造函數(shù)重載構(gòu)造函

21、數(shù) 3Year=y; Month=m; Day=1; Date(int y, int m, int d) /重載構(gòu)造函數(shù)重載構(gòu)造函數(shù) 4Year=y; Month=m; Day=d; void ShowDate( )cout Year.Month.Dayendl;第第 10 10 章章主函數(shù)源文件為主函數(shù)源文件為Li1005.cpp,內(nèi)容如下:,內(nèi)容如下:#include date.hvoid main( )Date d1; /自動(dòng)調(diào)用構(gòu)造函數(shù)自動(dòng)調(diào)用構(gòu)造函數(shù) 1Date d2(2010); /自動(dòng)調(diào)用構(gòu)造函數(shù)自動(dòng)調(diào)用構(gòu)造函數(shù) 2Date d3(2010, 10); /自動(dòng)調(diào)用構(gòu)造函數(shù)自動(dòng)調(diào)用

22、構(gòu)造函數(shù) 3Date d4(2010, 10, 6); /自動(dòng)調(diào)用構(gòu)造函數(shù)自動(dòng)調(diào)用構(gòu)造函數(shù) 4d1.ShowDate( );d2.ShowDate( );d3.ShowDate( );d4.ShowDate( );第第 10 10 章章運(yùn)行結(jié)果是:運(yùn)行結(jié)果是:2010.5.12010.5.12010.10.12010.10.6 當(dāng)然我們可以定義帶缺省值的構(gòu)造函數(shù),當(dāng)然我們可以定義帶缺省值的構(gòu)造函數(shù),將上述構(gòu)造函數(shù)簡化,下述程序的功能將上述構(gòu)造函數(shù)簡化,下述程序的功能與上述程序相當(dāng):與上述程序相當(dāng):#include class Date int Year, Month, Day;public:D

23、ate(int y=2010, int m=5, int d=1) /帶參數(shù)缺省值的構(gòu)造函數(shù)帶參數(shù)缺省值的構(gòu)造函數(shù)Year=y; Month=m; Day=d; void ShowDate( )cout Year.Month.Dayendl;第第 10 10 章章void main( )Date d1, d2(2010), d3(2010, 10), d4(2010, 10, 6);d1.ShowDate( );d2.ShowDate( );d3.ShowDate( );d4.ShowDate( );運(yùn)行結(jié)果與上例一樣。運(yùn)行結(jié)果與上例一樣。第第 10 10 章章(1) 構(gòu)造函數(shù)是成員函數(shù),函數(shù)

24、體可寫在類體內(nèi),構(gòu)造函數(shù)是成員函數(shù),函數(shù)體可寫在類體內(nèi), 也可寫在類體外。也可寫在類體外。(2) 構(gòu)造函數(shù)是一種特殊的函數(shù),其函數(shù)名與類名相同,構(gòu)造函數(shù)是一種特殊的函數(shù),其函數(shù)名與類名相同, 且不給出返回值類型。且不給出返回值類型。(3) 構(gòu)造函數(shù)可以重載,構(gòu)造函數(shù)可以重載, 即可以定義多個(gè)參數(shù)個(gè)數(shù)以及參數(shù)類型不同的即可以定義多個(gè)參數(shù)個(gè)數(shù)以及參數(shù)類型不同的 構(gòu)造函數(shù)。構(gòu)造函數(shù)。(4) 一般將構(gòu)造函數(shù)定義為公有成員函數(shù)。一般將構(gòu)造函數(shù)定義為公有成員函數(shù)。(5) 在創(chuàng)建對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)。在創(chuàng)建對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)。構(gòu)造函數(shù)的特點(diǎn)如下:構(gòu)造函數(shù)的特點(diǎn)如下:第第 10 10 章章(

25、6) (6) 不可以通過對(duì)象名調(diào)用構(gòu)造函數(shù)不可以通過對(duì)象名調(diào)用構(gòu)造函數(shù) 例如:例如:d1.Date(2009) d1.Date(2009) 是非法的。是非法的。(7) (7) 可以直接通過構(gòu)造函數(shù)名調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象。可以直接通過構(gòu)造函數(shù)名調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象。例如:例如:d1 = Date(2009); d1 = Date(2009); 等號(hào)右邊創(chuàng)建了一個(gè)對(duì)象(日期值是等號(hào)右邊創(chuàng)建了一個(gè)對(duì)象(日期值是2009.5.12009.5.1),),并將它賦值給并將它賦值給 d1d1。又如:又如:Date d4 = Date d4 = Date( ), Date(2010), Date(2010,

26、10), Date(2010, 10, 6) ; Date( ), Date(2010), Date(2010, 10), Date(2010, 10, 6) ; 構(gòu)造函數(shù)的特點(diǎn)如下(續(xù)):構(gòu)造函數(shù)的特點(diǎn)如下(續(xù)):第第 10 10 章章2.2.析構(gòu)函數(shù)析構(gòu)函數(shù)在在類體內(nèi)類體內(nèi)定義定義析構(gòu)函數(shù)析構(gòu)函數(shù)的一般格式是:的一般格式是:ClassName( ) / ClassName是類名是類名 . / 析構(gòu)函數(shù)名為析構(gòu)函數(shù)名為ClassName在在類體外類體外定義定義析構(gòu)函數(shù)析構(gòu)函數(shù)的一般格式是:的一般格式是:ClassName : ClassName( ) . 析構(gòu)函數(shù)的調(diào)用時(shí)機(jī):析構(gòu)函數(shù)的調(diào)用時(shí)

27、機(jī):當(dāng)撤銷對(duì)象時(shí),自動(dòng)調(diào)用當(dāng)撤銷對(duì)象時(shí),自動(dòng)調(diào)用。第第 10 10 章章例例10.6 定義學(xué)生類,利用定義學(xué)生類,利用構(gòu)造函數(shù)初始化數(shù)據(jù)成員,構(gòu)造函數(shù)初始化數(shù)據(jù)成員,利用析構(gòu)函數(shù)做清理工作。利用析構(gòu)函數(shù)做清理工作。#include#includeclass Studentchar Num10; /學(xué)號(hào),注意:用數(shù)組實(shí)現(xiàn)學(xué)號(hào),注意:用數(shù)組實(shí)現(xiàn)char *Name; /姓名,注意:用指針實(shí)現(xiàn)姓名,注意:用指針實(shí)現(xiàn)int Score; /成績成績public:Student(char *nump, char *namep, int score) if(nump) /在構(gòu)造函數(shù)中,在構(gòu)造函數(shù)中, /不

28、需要?jiǎng)討B(tài)申請(qǐng)不需要?jiǎng)討B(tài)申請(qǐng)Num成員的空間成員的空間strcpy(Num, nump);else strcpy(Num, );第第 10 10 章章if(namep) /在構(gòu)造函數(shù)中,在構(gòu)造函數(shù)中, /需動(dòng)態(tài)申請(qǐng)需動(dòng)態(tài)申請(qǐng)Name成員的空間成員的空間 Name=new charstrlen(namep)+1;strcpy(Name, namep);else Name=0;Score=score;coutConstructor Called!n;Student( ) /在析構(gòu)函數(shù)中,在析構(gòu)函數(shù)中, /需釋放需釋放Name成員的空間成員的空間if(Name) delete Name;coutDes

29、turctor Called!n; 第第 10 10 章章void Show( )cout Num endl;cout Name endl;cout Score endl;void main( )Student a(040120518, George, 80);a.Show( );此程序運(yùn)行結(jié)果是:此程序運(yùn)行結(jié)果是:Constructor Called! /調(diào)用構(gòu)造函數(shù)時(shí)的輸出調(diào)用構(gòu)造函數(shù)時(shí)的輸出040120518George80Desturctor Called! /調(diào)用析構(gòu)函數(shù)時(shí)的輸出調(diào)用析構(gòu)函數(shù)時(shí)的輸出第第 10 10 章章析構(gòu)函數(shù)的特點(diǎn)如下:析構(gòu)函數(shù)的特點(diǎn)如下:(1) 析構(gòu)函數(shù)是成員函

30、數(shù),可在類體內(nèi)定義,析構(gòu)函數(shù)是成員函數(shù),可在類體內(nèi)定義, 也可在類體外定義。也可在類體外定義。 (2) 一般地,將析構(gòu)函數(shù)定義成公有成員函數(shù)。一般地,將析構(gòu)函數(shù)定義成公有成員函數(shù)。 (3) 析構(gòu)函數(shù)也是特殊函數(shù),該函數(shù)的名字是類名前加析構(gòu)函數(shù)也是特殊函數(shù),該函數(shù)的名字是類名前加 , 用來與構(gòu)造函數(shù)區(qū)分,該函數(shù)不指定返回值類型,用來與構(gòu)造函數(shù)區(qū)分,該函數(shù)不指定返回值類型, 沒有參數(shù)。沒有參數(shù)。 (4) 一個(gè)類只能定義一個(gè)析構(gòu)函數(shù),一個(gè)類只能定義一個(gè)析構(gòu)函數(shù), 即析構(gòu)函數(shù)不允許重載。即析構(gòu)函數(shù)不允許重載。 第第 10 10 章章析構(gòu)函數(shù)的特點(diǎn)如下析構(gòu)函數(shù)的特點(diǎn)如下(續(xù)續(xù)):(5)析構(gòu)函數(shù)可以被顯式

31、調(diào)用,也可以由系統(tǒng)自動(dòng)調(diào)用。析構(gòu)函數(shù)可以被顯式調(diào)用,也可以由系統(tǒng)自動(dòng)調(diào)用。 在下面在下面兩種情況兩種情況下,析構(gòu)函數(shù)會(huì)被自動(dòng)調(diào)用:下,析構(gòu)函數(shù)會(huì)被自動(dòng)調(diào)用:當(dāng)對(duì)象是系統(tǒng)自動(dòng)創(chuàng)建的,則在對(duì)象的作用域結(jié)束當(dāng)對(duì)象是系統(tǒng)自動(dòng)創(chuàng)建的,則在對(duì)象的作用域結(jié)束時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。 當(dāng)一個(gè)對(duì)象是使用當(dāng)一個(gè)對(duì)象是使用new運(yùn)算符被動(dòng)態(tài)創(chuàng)建的,在使運(yùn)算符被動(dòng)態(tài)創(chuàng)建的,在使用用delete運(yùn)算符釋放它時(shí),運(yùn)算符釋放它時(shí),delete將會(huì)自動(dòng)調(diào)用析構(gòu)函將會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。數(shù)。 第第 10 10 章章3.調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的時(shí)機(jī)調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的時(shí)機(jī)(對(duì)象的生存周期)(對(duì)象的生

32、存周期) (1)全局對(duì)象全局對(duì)象(總是靜態(tài)的總是靜態(tài)的) 程序程序main( )開始執(zhí)行時(shí),開始執(zhí)行時(shí),調(diào)用構(gòu)造函數(shù),程序調(diào)用構(gòu)造函數(shù),程序main( )結(jié)束時(shí),調(diào)用析構(gòu)函數(shù)。結(jié)束時(shí),調(diào)用析構(gòu)函數(shù)。不同存儲(chǔ)類型的對(duì)象不同存儲(chǔ)類型的對(duì)象調(diào)用調(diào)用構(gòu)造函數(shù)構(gòu)造函數(shù)及及析構(gòu)函數(shù)析構(gòu)函數(shù)的時(shí)機(jī)不同。的時(shí)機(jī)不同。(2)局部動(dòng)態(tài)對(duì)象局部動(dòng)態(tài)對(duì)象 當(dāng)程序執(zhí)行進(jìn)入作用域,當(dāng)程序執(zhí)行進(jìn)入作用域,在定義對(duì)象處系統(tǒng)自動(dòng)創(chuàng)建對(duì)象,調(diào)用構(gòu)造函數(shù);在定義對(duì)象處系統(tǒng)自動(dòng)創(chuàng)建對(duì)象,調(diào)用構(gòu)造函數(shù);退出作用域時(shí),系統(tǒng)在撤消對(duì)象前調(diào)用析構(gòu)函數(shù)。退出作用域時(shí),系統(tǒng)在撤消對(duì)象前調(diào)用析構(gòu)函數(shù)。 (3)局部靜態(tài)對(duì)象局部靜態(tài)對(duì)象 當(dāng)程序執(zhí)行首

33、次到達(dá)定義對(duì)象處,當(dāng)程序執(zhí)行首次到達(dá)定義對(duì)象處,系統(tǒng)自動(dòng)創(chuàng)建對(duì)象,調(diào)用構(gòu)造函數(shù);程序結(jié)束時(shí)系統(tǒng)自動(dòng)創(chuàng)建對(duì)象,調(diào)用構(gòu)造函數(shù);程序結(jié)束時(shí)(即(即main( )函數(shù)執(zhí)行結(jié)束時(shí)),函數(shù)執(zhí)行結(jié)束時(shí)),系統(tǒng)在撤消對(duì)象前調(diào)用析構(gòu)函數(shù)。系統(tǒng)在撤消對(duì)象前調(diào)用析構(gòu)函數(shù)。 第第 10 10 章章(4)動(dòng)態(tài)申請(qǐng)的對(duì)象動(dòng)態(tài)申請(qǐng)的對(duì)象 使用使用 new 產(chǎn)生對(duì)象時(shí)產(chǎn)生對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù);使用系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù);使用 delete 撤消對(duì)象時(shí),撤消對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。 第第 10 10 章章1. 1. 缺省構(gòu)造函數(shù)缺省構(gòu)造函數(shù)定義類時(shí),若沒有定義構(gòu)造函數(shù),則編譯系統(tǒng)定義類時(shí),若沒

34、有定義構(gòu)造函數(shù),則編譯系統(tǒng)自動(dòng)生成一個(gè)不帶參數(shù)的缺省構(gòu)造函數(shù),格式如下:自動(dòng)生成一個(gè)不帶參數(shù)的缺省構(gòu)造函數(shù),格式如下:ClassName: ClassName( ) .2 缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù)缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù)第第 10 10 章章例例10.8 定義類時(shí),不定義構(gòu)造函數(shù)定義類時(shí),不定義構(gòu)造函數(shù)#include class Date int Year, Month, Day;public: void ShowDate( ) cout Year.Month.Dayendl; ;void main( ) Date d; d.ShowDate( );程序的運(yùn)行結(jié)果是:

35、程序的運(yùn)行結(jié)果是:?858993460.858993460.858993460 原因:原因:系統(tǒng)自動(dòng)產(chǎn)生的缺省構(gòu)造函數(shù)是:系統(tǒng)自動(dòng)產(chǎn)生的缺省構(gòu)造函數(shù)是:Date:Date( ) /不做任何操作不做任何操作第第 10 10 章章缺省構(gòu)造函數(shù)有兩種形式:缺省構(gòu)造函數(shù)有兩種形式: 沒有參數(shù)的構(gòu)造函數(shù)沒有參數(shù)的構(gòu)造函數(shù)或或各參數(shù)均有缺省值的構(gòu)造函數(shù)各參數(shù)均有缺省值的構(gòu)造函數(shù),缺省構(gòu)造函數(shù)缺省構(gòu)造函數(shù)只能有一個(gè)只能有一個(gè)。Date: Date( ) /沒有參數(shù)沒有參數(shù) Year=2003; Month=1; Day=1; 或或 Date: Date(int y=2003, int m=1, int d=

36、1) /均有缺省值均有缺省值Year=y; Month=m; Day=d; void main( )Date d;d.ShowDate( ); 運(yùn)行結(jié)果?運(yùn)行結(jié)果?第第 10 10 章章注意:注意:在產(chǎn)生對(duì)象時(shí),若不需要對(duì)數(shù)據(jù)成員進(jìn)行初始化,可在產(chǎn)生對(duì)象時(shí),若不需要對(duì)數(shù)據(jù)成員進(jìn)行初始化,可以不顯式地定義缺省構(gòu)造函數(shù)。以不顯式地定義缺省構(gòu)造函數(shù)。在一個(gè)類的定義中,缺省構(gòu)造函數(shù)只能有一個(gè)。在一個(gè)類的定義中,缺省構(gòu)造函數(shù)只能有一個(gè)。若已經(jīng)定義了構(gòu)造函數(shù)(不論它是否為缺省構(gòu)造函若已經(jīng)定義了構(gòu)造函數(shù)(不論它是否為缺省構(gòu)造函數(shù)數(shù)),則編譯系統(tǒng)不再自動(dòng)生成缺省構(gòu)造函數(shù)。,則編譯系統(tǒng)不再自動(dòng)生成缺省構(gòu)造函數(shù)。

37、 第第 10 10 章章2. 2. 缺省析構(gòu)函數(shù)缺省析構(gòu)函數(shù)若在類中沒有顯式定義析構(gòu)函數(shù),若在類中沒有顯式定義析構(gòu)函數(shù),則編譯器自動(dòng)地產(chǎn)生一個(gè)缺省的析構(gòu)函數(shù)。則編譯器自動(dòng)地產(chǎn)生一個(gè)缺省的析構(gòu)函數(shù)。 ClassName : ClassName ( ) ;格式為:格式為: 在撤消對(duì)象時(shí),若不需要做任何結(jié)束工作,在撤消對(duì)象時(shí),若不需要做任何結(jié)束工作, 可以不定義析構(gòu)函數(shù)??梢圆欢x析構(gòu)函數(shù)。 當(dāng)類中有動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)空間時(shí),需要顯式地定義當(dāng)類中有動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)空間時(shí),需要顯式地定義 析構(gòu)函數(shù),撤銷動(dòng)態(tài)數(shù)據(jù)空間。析構(gòu)函數(shù),撤銷動(dòng)態(tài)數(shù)據(jù)空間。如:例如:例10.6 第第 10 10 章章10.2.3 10.

38、2.3 拷貝構(gòu)造函數(shù)和缺省拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)和缺省拷貝構(gòu)造函數(shù) 拷貝構(gòu)造函數(shù):拷貝構(gòu)造函數(shù):用一個(gè)已知的對(duì)象來初始化一個(gè)用一個(gè)已知的對(duì)象來初始化一個(gè) 被創(chuàng)建的被創(chuàng)建的同類同類對(duì)象。對(duì)象。 格式:格式: /注意參數(shù)是本類對(duì)象的引用注意參數(shù)是本類對(duì)象的引用ClassName : ClassName( const ClassName & Obj ) 例例10.9見見 “第第10章章 類和對(duì)象類和對(duì)象(例子例子).doc”如果用戶不定義拷貝構(gòu)造函數(shù),則系統(tǒng)自動(dòng)產(chǎn)生如果用戶不定義拷貝構(gòu)造函數(shù),則系統(tǒng)自動(dòng)產(chǎn)生一個(gè)一個(gè)缺省的拷貝構(gòu)造函數(shù)缺省的拷貝構(gòu)造函數(shù)。如例。如例10.9 :Point:Point(

39、const Point &p) x=p.x; y=p.y; /各成員逐一賦值各成員逐一賦值第第 10 10 章章當(dāng)類中有動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)空間時(shí),當(dāng)類中有動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)空間時(shí),必須必須定義拷貝構(gòu)造函數(shù),否則出錯(cuò)。定義拷貝構(gòu)造函數(shù),否則出錯(cuò)。例例10.10見見 “第第10章章 類和對(duì)象類和對(duì)象(例子例子).doc”Student:Student(const Student &s) Name = s.Name; / 注意:直接賦地址值注意:直接賦地址值A(chǔ)ge = s.Age; 自動(dòng)產(chǎn)生的構(gòu)造函數(shù)如下:自動(dòng)產(chǎn)生的構(gòu)造函數(shù)如下:第第 10 10 章章何時(shí)必須定義拷貝構(gòu)造函數(shù)呢?分兩種情況:何時(shí)必須定義拷貝

40、構(gòu)造函數(shù)呢?分兩種情況: (1) 若只需拷貝同類型對(duì)象的部分?jǐn)?shù)據(jù)成員。若只需拷貝同類型對(duì)象的部分?jǐn)?shù)據(jù)成員。(2) 或者類中的某個(gè)數(shù)據(jù)成員是使用或者類中的某個(gè)數(shù)據(jù)成員是使用 new 運(yùn)算符運(yùn)算符 動(dòng)態(tài)地申請(qǐng)存儲(chǔ)空間進(jìn)行賦初值時(shí)。動(dòng)態(tài)地申請(qǐng)存儲(chǔ)空間進(jìn)行賦初值時(shí)。則必須在類中則必須在類中顯式顯式地定義一個(gè)地定義一個(gè)完成拷貝功能的完成拷貝功能的構(gòu)造函數(shù)構(gòu)造函數(shù),以便實(shí)現(xiàn)成員數(shù)據(jù)的復(fù)制。,以便實(shí)現(xiàn)成員數(shù)據(jù)的復(fù)制。同時(shí)應(yīng)同時(shí)應(yīng)顯式顯式定義相應(yīng)的定義相應(yīng)的析構(gòu)函數(shù),析構(gòu)函數(shù),撤消動(dòng)態(tài)分配的空間。撤消動(dòng)態(tài)分配的空間。第第 10 10 章章10.2.4 10.2.4 拷貝構(gòu)造函數(shù)的調(diào)用時(shí)機(jī)拷貝構(gòu)造函數(shù)的調(diào)用時(shí)機(jī)

41、 在產(chǎn)生新對(duì)象時(shí),自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。在產(chǎn)生新對(duì)象時(shí),自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。何時(shí)產(chǎn)生新對(duì)象呢?何時(shí)產(chǎn)生新對(duì)象呢?例例10.11見見 “第第10章章 類和對(duì)象類和對(duì)象(例子例子).doc”(1)明確表示由一個(gè)對(duì)象初始化另一個(gè)對(duì)象時(shí),)明確表示由一個(gè)對(duì)象初始化另一個(gè)對(duì)象時(shí), 例如:例例如:例 10.9 中的中的A、B兩行兩行 Point p3(p1); / A 調(diào)用拷貝構(gòu)造函數(shù)調(diào)用拷貝構(gòu)造函數(shù) Point p4=p2; / B 調(diào)用拷貝構(gòu)造函數(shù)調(diào)用拷貝構(gòu)造函數(shù) (2)當(dāng)用對(duì)象作為函數(shù)參數(shù)時(shí),)當(dāng)用對(duì)象作為函數(shù)參數(shù)時(shí), 系統(tǒng)處理成用實(shí)參對(duì)象初始化形參對(duì)象。系統(tǒng)處理成用實(shí)參對(duì)象初始化形參對(duì)象。(3)

42、當(dāng)函數(shù)返回對(duì)象時(shí),)當(dāng)函數(shù)返回對(duì)象時(shí), 用返回值對(duì)象初始化內(nèi)存臨時(shí)對(duì)象。用返回值對(duì)象初始化內(nèi)存臨時(shí)對(duì)象。第第 10 10 章章10.2.5 10.2.5 利用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換利用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換 C+中不同的數(shù)據(jù)類型可以相互賦值。若定義中不同的數(shù)據(jù)類型可以相互賦值。若定義了復(fù)數(shù)類對(duì)象了復(fù)數(shù)類對(duì)象 Complex c; 能否寫能否寫 c = 5.0;即希望將即希望將 5.0 做為實(shí)部,做為實(shí)部,0 做為虛部的一個(gè)復(fù)數(shù)做為虛部的一個(gè)復(fù)數(shù)賦值給復(fù)數(shù)賦值給復(fù)數(shù) c ??梢?!自動(dòng)類型轉(zhuǎn)換可以!自動(dòng)類型轉(zhuǎn)換c = Complex(5.0); /利用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換利用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換 例例

43、10.13見見 “第第10章章 類和對(duì)象類和對(duì)象(例子例子).doc”第第 10 10 章章10.3 10.3 成員函數(shù)的特性成員函數(shù)的特性10.3.1 10.3.1 內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù) 在類體內(nèi)定義的成員函數(shù)是在類體內(nèi)定義的成員函數(shù)是內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù),在類體外定義的函數(shù)是在類體外定義的函數(shù)是外聯(lián)函數(shù)外聯(lián)函數(shù) 在類體外,也可以定義內(nèi)聯(lián)函數(shù)在類體外,也可以定義內(nèi)聯(lián)函數(shù)例例10.14 在類體外定義內(nèi)聯(lián)函數(shù)在類體外定義內(nèi)聯(lián)函數(shù) class Complex double Real, Image; public: /在類體內(nèi),給出成員函數(shù)說明在類體內(nèi),給出成員函數(shù)說明 Complex(

44、double x=0, double y=0); void Show( ); ;第第 10 10 章章 /在類體外定義內(nèi)聯(lián)函數(shù)在類體外定義內(nèi)聯(lián)函數(shù)inline Complex:Complex(double x, double y)Real=x; Image=y;inline void Complex:Show( ) cout(Real,Image); 內(nèi)聯(lián)函數(shù)的優(yōu)點(diǎn):內(nèi)聯(lián)函數(shù)的優(yōu)點(diǎn):編譯時(shí)在調(diào)用函數(shù)處用內(nèi)聯(lián)函數(shù)的代碼來替換函數(shù)編譯時(shí)在調(diào)用函數(shù)處用內(nèi)聯(lián)函數(shù)的代碼來替換函數(shù)調(diào)用語句,調(diào)用語句,這樣在程序執(zhí)行時(shí),不需要函數(shù)調(diào)用,減少時(shí)間開這樣在程序執(zhí)行時(shí),不需要函數(shù)調(diào)用,減少時(shí)間開銷。銷。 第第 1

45、0 10 章章10.3.2 10.3.2 成員函數(shù)的重載成員函數(shù)的重載 構(gòu)造函數(shù)可以重載,一般的成員函數(shù)也可以重載。構(gòu)造函數(shù)可以重載,一般的成員函數(shù)也可以重載。 例例10.15 處理一個(gè)線性表,動(dòng)態(tài)產(chǎn)生線性表,處理一個(gè)線性表,動(dòng)態(tài)產(chǎn)生線性表, 并輸出線性表中的數(shù)據(jù)。并輸出線性表中的數(shù)據(jù)。線性表線性表: 是用來存放若干整數(shù)的數(shù)組,每個(gè)數(shù)組元素也稱是用來存放若干整數(shù)的數(shù)組,每個(gè)數(shù)組元素也稱為線性表的元素。為線性表的元素。指針指針ListPtr指向線性表的第指向線性表的第0個(gè)元素,個(gè)元素,nLen表示線性表的長度(即數(shù)組的長度),表示線性表的長度(即數(shù)組的長度),nElem表示當(dāng)前線性表中實(shí)際存放的

46、元素個(gè)數(shù)。表示當(dāng)前線性表中實(shí)際存放的元素個(gè)數(shù)。 完成的功能:完成的功能:加入元素、刪除元素、修改元素、加入元素、刪除元素、修改元素、 輸出全體元素等。輸出全體元素等。 (下頁圖示)(下頁圖示)第第 10 10 章章ListPtrnLennElem例例10.15見見 “第第10章章 類和對(duì)象類和對(duì)象(例子例子).doc”10.3.2 10.3.2 成員函數(shù)的重載成員函數(shù)的重載 第第 10 10 章章10.4 10.4 構(gòu)造函數(shù)和對(duì)象成員構(gòu)造函數(shù)和對(duì)象成員1. 定義一個(gè)類時(shí),可以把一個(gè)已定義的類的對(duì)象作定義一個(gè)類時(shí),可以把一個(gè)已定義的類的對(duì)象作為該類的成員。為該類的成員。2. 產(chǎn)生新定義類的對(duì)象時(shí),須對(duì)它的對(duì)象成員進(jìn)行產(chǎn)生新定義類的對(duì)象時(shí),須對(duì)它的對(duì)象成員進(jìn)行初始化。初始化。3. 只能通過其對(duì)象成

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論