關(guān)于類和對(duì)象的進(jìn)一步討論_第1頁(yè)
關(guān)于類和對(duì)象的進(jìn)一步討論_第2頁(yè)
關(guān)于類和對(duì)象的進(jìn)一步討論_第3頁(yè)
關(guān)于類和對(duì)象的進(jìn)一步討論_第4頁(yè)
關(guān)于類和對(duì)象的進(jìn)一步討論_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第9章章 關(guān)于類和對(duì)象的進(jìn)一步討論關(guān)于類和對(duì)象的進(jìn)一步討論9.1 構(gòu)造函數(shù)構(gòu)造函數(shù)9.2 析構(gòu)函數(shù)析構(gòu)函數(shù)9.3 調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序9.4 對(duì)象數(shù)組對(duì)象數(shù)組9.5 對(duì)象指針對(duì)象指針9.6 對(duì)象的動(dòng)態(tài)建立和釋放對(duì)象的動(dòng)態(tài)建立和釋放9.7 對(duì)象的賦值和復(fù)制對(duì)象的賦值和復(fù)制9.8 靜態(tài)成員靜態(tài)成員9.9 友元友元9.1 構(gòu)造函數(shù)構(gòu)造函數(shù)l在建立一個(gè)對(duì)象時(shí),常常需要作某些初始化在建立一個(gè)對(duì)象時(shí),常常需要作某些初始化的工作,例如對(duì)數(shù)據(jù)成員賦初值。如果一個(gè)的工作,例如對(duì)數(shù)據(jù)成員賦初值。如果一個(gè)數(shù)據(jù)成員未被賦值,則它的值是不可預(yù)知的,數(shù)據(jù)成員未被賦值,則它的值是不可預(yù)

2、知的,因?yàn)樵谙到y(tǒng)為它分配內(nèi)存時(shí),保留了這些存因?yàn)樵谙到y(tǒng)為它分配內(nèi)存時(shí),保留了這些存儲(chǔ)單元的原狀,這就成為了這些數(shù)據(jù)成員的儲(chǔ)單元的原狀,這就成為了這些數(shù)據(jù)成員的初始值。這種狀況顯然是與人們的要求不相初始值。這種狀況顯然是與人們的要求不相符的,對(duì)象是一個(gè)實(shí)體,它反映了客觀事物符的,對(duì)象是一個(gè)實(shí)體,它反映了客觀事物的屬性的屬性(例如時(shí)鐘的時(shí)、分、秒的值例如時(shí)鐘的時(shí)、分、秒的值),是應(yīng)該,是應(yīng)該有確定的值的。有確定的值的。類的數(shù)據(jù)成員是不能在聲明類時(shí)初始化的。類的數(shù)據(jù)成員是不能在聲明類時(shí)初始化的。lclass Studentll int sno=10;l string name=wang;l;l編譯錯(cuò)

3、誤:編譯錯(cuò)誤:lISO C+ forbids initialization of member snolISO C+ forbids initialization of member namel為什么?為什么?l如果一個(gè)類中所有的成員都是公用的,則可以在定如果一個(gè)類中所有的成員都是公用的,則可以在定義對(duì)象時(shí)對(duì)數(shù)據(jù)成員進(jìn)行初始化。如義對(duì)象時(shí)對(duì)數(shù)據(jù)成員進(jìn)行初始化。如lclass Timellpublic: /聲明為公用成員聲明為公用成員l int hour;l int minute;l int sec;l;lTime t1=14,56,30; /將將t1初始化為初始化為14:56:30l但是,如果

4、數(shù)據(jù)成員是私有的,或者類中有但是,如果數(shù)據(jù)成員是私有的,或者類中有private或或protected的成員,就不能用這種的成員,就不能用這種方法初始化。方法初始化。l類的封裝性就體現(xiàn)在一部分?jǐn)?shù)據(jù)是類的封裝性就體現(xiàn)在一部分?jǐn)?shù)據(jù)是不能讓外不能讓外界訪問界訪問的。所以直接在非成員函數(shù)中訪問類的。所以直接在非成員函數(shù)中訪問類對(duì)象的私有或者保護(hù)數(shù)據(jù)是不允許的。對(duì)象的私有或者保護(hù)數(shù)據(jù)是不允許的。l類對(duì)象的初始化的任務(wù),自然就落到了類的類對(duì)象的初始化的任務(wù),自然就落到了類的成員函數(shù)身上,因?yàn)樗鼈兛梢栽L問私有及保成員函數(shù)身上,因?yàn)樗鼈兛梢栽L問私有及保護(hù)數(shù)據(jù)成員。護(hù)數(shù)據(jù)成員。l我們將初始化構(gòu)想成下面的形式:我

5、們將初始化構(gòu)想成下面的形式:lclass Studentllint sno;ldouble score;lpublic:lvoid init( )l lsno=10;lscore=85;ll. /其他公有成員其他公有成員l; lvoid funllStudent s;ls.init(); /類的初始化類的初始化l.ll將初始化的工作交由將初始化的工作交由init()成員函數(shù)無(wú)可非議,成員函數(shù)無(wú)可非議,但讓系統(tǒng)多了一道處理初始化的解釋與執(zhí)行。但讓系統(tǒng)多了一道處理初始化的解釋與執(zhí)行。l為了解決這個(gè)問題,為了解決這個(gè)問題,C+提供了提供了構(gòu)造函數(shù)構(gòu)造函數(shù)(constructor)來處理對(duì)象的初始化。

6、構(gòu)造函數(shù)是一來處理對(duì)象的初始化。構(gòu)造函數(shù)是一種特殊的成員函數(shù),與其他成員函數(shù)不同,種特殊的成員函數(shù),與其他成員函數(shù)不同,不需要不需要用戶來調(diào)用它用戶來調(diào)用它,而是在建立對(duì)象時(shí),而是在建立對(duì)象時(shí)自動(dòng)執(zhí)行自動(dòng)執(zhí)行。構(gòu)造。構(gòu)造函數(shù)的名字函數(shù)的名字必須與類名同名必須與類名同名,而不能由用戶任意命,而不能由用戶任意命名,以便編譯系統(tǒng)能識(shí)別它并把它作為構(gòu)造函數(shù)處名,以便編譯系統(tǒng)能識(shí)別它并把它作為構(gòu)造函數(shù)處理。它理。它不具有任何類型不具有任何類型,不返回任何值。構(gòu)造函數(shù),不返回任何值。構(gòu)造函數(shù)的功能是由用戶定義的,的功能是由用戶定義的,用戶根據(jù)初始化的要求設(shè)用戶根據(jù)初始化的要求設(shè)計(jì)函數(shù)體和函數(shù)參數(shù)計(jì)函數(shù)體和

7、函數(shù)參數(shù)。l#includelusing namespace std;lclass Studentll int sno;l double score;lpublic:l Student( );l void setStudent(int sn,double sc);l int getSno( );l double getScore( );l;Student:Student( ) sno=0; score=0;void Student:setStudent(int sn,double sc) sno=sn; score=sc;lint Student:getSno( )ll return sno;

8、lldouble Student:getScore( )ll return score;llint main( )ll Student a,b;l a.setStudent(10,85);l couta.getSno( ) a.getScore()endl;l coutb.getSno( ) b.getScoreendl;l return 0;ll構(gòu)造函數(shù)沒有返回類型,函數(shù)體中也不允許返回值,構(gòu)造函數(shù)沒有返回類型,函數(shù)體中也不允許返回值,因?yàn)闃?gòu)造函數(shù)因?yàn)闃?gòu)造函數(shù)專門用于創(chuàng)建對(duì)象和為其初始化專門用于創(chuàng)建對(duì)象和為其初始化,它,它不能隨意被調(diào)用不能隨意被調(diào)用。沒有返回類型,正顯得它與眾不。沒有返回類

9、型,正顯得它與眾不同。同。注意:注意:l在創(chuàng)建類對(duì)象時(shí),構(gòu)造函數(shù)被自動(dòng)調(diào)用。在創(chuàng)建類對(duì)象時(shí),構(gòu)造函數(shù)被自動(dòng)調(diào)用。l構(gòu)造函數(shù)沒有返回類型,函數(shù)體中也不允許返回構(gòu)造函數(shù)沒有返回類型,函數(shù)體中也不允許返回值。值。l構(gòu)造函數(shù)不需用戶調(diào)用,也不能被用戶調(diào)用。構(gòu)造函數(shù)不需用戶調(diào)用,也不能被用戶調(diào)用。l構(gòu)造函數(shù)構(gòu)造函數(shù)專門用于專門用于創(chuàng)建對(duì)象和為其初始化,一般創(chuàng)建對(duì)象和為其初始化,一般不提倡在構(gòu)造函數(shù)中加入與初始化無(wú)關(guān)的內(nèi)容。不提倡在構(gòu)造函數(shù)中加入與初始化無(wú)關(guān)的內(nèi)容。l如果用戶自己沒有定義構(gòu)造函數(shù),則如果用戶自己沒有定義構(gòu)造函數(shù),則C+系統(tǒng)會(huì)系統(tǒng)會(huì)自動(dòng)生成一個(gè)構(gòu)造函數(shù)自動(dòng)生成一個(gè)構(gòu)造函數(shù),只是這個(gè)構(gòu)造函數(shù)的

10、函數(shù),只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的,也沒有參數(shù),不執(zhí)行初始化操作。體是空的,也沒有參數(shù),不執(zhí)行初始化操作。l前面介紹的構(gòu)造函數(shù)不能完全滿足初始化的前面介紹的構(gòu)造函數(shù)不能完全滿足初始化的要求,它只能將對(duì)象構(gòu)造成千篇一律的對(duì)象要求,它只能將對(duì)象構(gòu)造成千篇一律的對(duì)象值,我們不得不再調(diào)用一個(gè)初始化成員函數(shù)值,我們不得不再調(diào)用一個(gè)初始化成員函數(shù)將數(shù)據(jù)存到該對(duì)象中去。將數(shù)據(jù)存到該對(duì)象中去。l構(gòu)造函數(shù)在參數(shù)規(guī)定上和普通函數(shù)一樣構(gòu)造函數(shù)在參數(shù)規(guī)定上和普通函數(shù)一樣,可,可以有任意多個(gè)參數(shù)。以有任意多個(gè)參數(shù)。l#includelusing namespace std;lclass Studentll int s

11、no;l double score;lpublic:l Student(int sn,double sc);l int getSno( );l double getScore( );l;lStudent:Student(int sn,double sc)ll sno=sn;l score=sc;llint Student:getSno()ll return sno;lldouble Student:getScore()ll return score;llint main()ll Student a(10,85),b(11,90);l couta.getSno() a.getScore()end

12、l;l coutb.getSno() b.getScore()endl;l return 0;l輸出:輸出: 851011 90 lC+還提供另一種初始化數(shù)據(jù)成員的方法還提供另一種初始化數(shù)據(jù)成員的方法參數(shù)初始化表參數(shù)初始化表來實(shí)現(xiàn)對(duì)數(shù)據(jù)成員的初始化。來實(shí)現(xiàn)對(duì)數(shù)據(jù)成員的初始化。這種方法不在函數(shù)體內(nèi)對(duì)數(shù)據(jù)成員初始化,這種方法不在函數(shù)體內(nèi)對(duì)數(shù)據(jù)成員初始化,而是而是在函數(shù)首部實(shí)現(xiàn)在函數(shù)首部實(shí)現(xiàn)。class Student int sno; double score;public: Student(int sn,double sc):sno(sn),score(sc) int getSno( ); do

13、uble getScore( );l構(gòu)造函數(shù)可以被重載。構(gòu)造函數(shù)可以被重載。l重載的規(guī)則與普通函數(shù)重載相同。重載的規(guī)則與普通函數(shù)重載相同。l#includelusing namespace std;lclass Studentll int sno;l double score;lpublic:l Student( );l Student(int sn);l Student(int sn,double sc);l int getSno( );l double getScore( );l;lStudent:Student()ll sno=0;l score=0;llStudent:Student(

14、int sn)ll sno=sn;l score=0;llStudent:Student(int sn,double sc)ll sno=sn;l score=sc;llint Student:getSno()ll return sno;lldouble Student:getScore()ll return score;llint main()ll Student a,b(11),c(12,98);l couta.getSno() a.getScore()endl;l coutb.getSno() b. getScore()endl;l coutc.getSno() c. getScore(

15、)endl;l return 0;l輸出:輸出:0 0 01112 98 注意:注意:l無(wú)參的構(gòu)造函數(shù)屬于默認(rèn)構(gòu)造函數(shù)。無(wú)參的構(gòu)造函數(shù)屬于默認(rèn)構(gòu)造函數(shù)。一個(gè)一個(gè)類類只能有一個(gè)只能有一個(gè)默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)。l如果在建立對(duì)象時(shí)選用的是無(wú)參構(gòu)造函數(shù),如果在建立對(duì)象時(shí)選用的是無(wú)參構(gòu)造函數(shù),應(yīng)注意正確書寫定義對(duì)象的語(yǔ)句。應(yīng)注意正確書寫定義對(duì)象的語(yǔ)句。l盡管在一個(gè)類中可以包含多個(gè)構(gòu)造函數(shù),盡管在一個(gè)類中可以包含多個(gè)構(gòu)造函數(shù),但是對(duì)于每一個(gè)對(duì)象來說,建立對(duì)象時(shí)但是對(duì)于每一個(gè)對(duì)象來說,建立對(duì)象時(shí)只執(zhí)只執(zhí)行其中一個(gè)行其中一個(gè)構(gòu)造函數(shù),并非每個(gè)構(gòu)造函數(shù)都構(gòu)造函數(shù),并非每個(gè)構(gòu)造函數(shù)都被執(zhí)行。被執(zhí)行。l構(gòu)造函

16、數(shù)中參數(shù)的值既可以通過實(shí)參傳遞,構(gòu)造函數(shù)中參數(shù)的值既可以通過實(shí)參傳遞,也可以指定為某些默認(rèn)值,即如果用戶不指也可以指定為某些默認(rèn)值,即如果用戶不指定實(shí)參值,編譯系統(tǒng)就使形參取默認(rèn)值。定實(shí)參值,編譯系統(tǒng)就使形參取默認(rèn)值。lStudent(int sn,double sc=0);lC+規(guī)定,規(guī)定,每個(gè)類必須有一個(gè)構(gòu)造函數(shù)每個(gè)類必須有一個(gè)構(gòu)造函數(shù)。沒有構(gòu)。沒有構(gòu)造函數(shù),就不能創(chuàng)建任何對(duì)象。造函數(shù),就不能創(chuàng)建任何對(duì)象。l若未提供一個(gè)類的構(gòu)造函數(shù)(一個(gè)都沒有定義),若未提供一個(gè)類的構(gòu)造函數(shù)(一個(gè)都沒有定義),則則C+提供一個(gè)默認(rèn)的構(gòu)造函數(shù),該默認(rèn)構(gòu)造函數(shù)提供一個(gè)默認(rèn)的構(gòu)造函數(shù),該默認(rèn)構(gòu)造函數(shù)是個(gè)無(wú)參構(gòu)造

17、函數(shù),它僅負(fù)責(zé)創(chuàng)建對(duì)象,而不做任是個(gè)無(wú)參構(gòu)造函數(shù),它僅負(fù)責(zé)創(chuàng)建對(duì)象,而不做任何初始化工作。何初始化工作。l只要一個(gè)類定義了一個(gè)構(gòu)造函數(shù)(不一定是無(wú)參只要一個(gè)類定義了一個(gè)構(gòu)造函數(shù)(不一定是無(wú)參構(gòu)造函數(shù)),構(gòu)造函數(shù)),C+就不再提供默認(rèn)的默認(rèn)構(gòu)造函數(shù)。就不再提供默認(rèn)的默認(rèn)構(gòu)造函數(shù)。l與變量定義類似,在用默認(rèn)構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),與變量定義類似,在用默認(rèn)構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),如果創(chuàng)建的是全局對(duì)象或靜態(tài)對(duì)象,則對(duì)象的值全如果創(chuàng)建的是全局對(duì)象或靜態(tài)對(duì)象,則對(duì)象的值全為為0,否則是不確定的。,否則是不確定的。9.2 析構(gòu)函數(shù)析構(gòu)函數(shù)l一個(gè)類可能在構(gòu)造函數(shù)里分配資源,這些資一個(gè)類可能在構(gòu)造函數(shù)里分配資源,這些資

18、源需要在對(duì)象不復(fù)存在以前被釋放。源需要在對(duì)象不復(fù)存在以前被釋放。l例如,如果構(gòu)造函數(shù)打開了一個(gè)文件,文件例如,如果構(gòu)造函數(shù)打開了一個(gè)文件,文件就要被關(guān)閉;如果構(gòu)造函數(shù)從堆中分配了內(nèi)就要被關(guān)閉;如果構(gòu)造函數(shù)從堆中分配了內(nèi)存,這塊內(nèi)存在對(duì)象消失之前必須被釋放。存,這塊內(nèi)存在對(duì)象消失之前必須被釋放。l析構(gòu)函數(shù)允許類自動(dòng)完成這些清理工作。析構(gòu)函數(shù)允許類自動(dòng)完成這些清理工作。l析構(gòu)函數(shù)析構(gòu)函數(shù)也是特殊的類成員函數(shù),它也是特殊的類成員函數(shù),它沒有返沒有返回類型回類型,沒有參數(shù)沒有參數(shù),不能隨意調(diào)用不能隨意調(diào)用,也沒有也沒有重載重載。l析構(gòu)函數(shù)只是在類對(duì)象生命期結(jié)束的時(shí)候,析構(gòu)函數(shù)只是在類對(duì)象生命期結(jié)束的時(shí)

19、候,由系統(tǒng)自動(dòng)調(diào)用由系統(tǒng)自動(dòng)調(diào)用。l析構(gòu)函數(shù)名與類名相同,前面加上析構(gòu)函數(shù)名與類名相同,前面加上。Student( );l#includelusing namespace std;lclass Studentll char* name;lpublic:l Student( );l Student( );l string getName( );l;lStudent:Student()ll name=new char20; /分配堆空間分配堆空間l cout構(gòu)造函數(shù)構(gòu)造函數(shù)endl;llStudent:Student()ll delete name; /釋放堆空間釋放堆空間l cout析構(gòu)函數(shù)析構(gòu)

20、函數(shù)endl;llstring Student:getName()ll return name;llint main()ll Student a;l couta.getName()endl;l return 0;l輸出:輸出:構(gòu)造函數(shù)構(gòu)造函數(shù)noname析構(gòu)函數(shù)析構(gòu)函數(shù) 9.3 調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序l析構(gòu)函數(shù)以調(diào)用構(gòu)造函數(shù)析構(gòu)函數(shù)以調(diào)用構(gòu)造函數(shù)相反相反的順序被調(diào)用。的順序被調(diào)用。 l#includelusing namespace std;lclass Studentll string name;lpublic:l Student(string n);l S

21、tudent( );l;lStudent:Student(string n)ll name=n;l cout構(gòu)造對(duì)象:構(gòu)造對(duì)象:nameendl;llStudent:Student()ll cout析構(gòu)對(duì)象:析構(gòu)對(duì)象:nameendl;llint main( )ll Student s1(a),s2(b);l cout返回到返回到main( )函數(shù)函數(shù)endl;l return 0;l輸出結(jié)果輸出結(jié)果構(gòu)造對(duì)象:構(gòu)造對(duì)象:a構(gòu)造對(duì)象:構(gòu)造對(duì)象:b返回到返回到main( )函數(shù)函數(shù)析構(gòu)對(duì)象:析構(gòu)對(duì)象:b析構(gòu)對(duì)象:析構(gòu)對(duì)象:a析構(gòu)函數(shù)小結(jié):析構(gòu)函數(shù)小結(jié):l析構(gòu)函數(shù)名與類名相同,但前面加上字析構(gòu)函數(shù)名

22、與類名相同,但前面加上字符符。l析構(gòu)函數(shù)無(wú)函數(shù)返回類型,在這方面與構(gòu)析構(gòu)函數(shù)無(wú)函數(shù)返回類型,在這方面與構(gòu)造函數(shù)是一樣的,但析構(gòu)函數(shù)不帶任何參數(shù)。造函數(shù)是一樣的,但析構(gòu)函數(shù)不帶任何參數(shù)。l一個(gè)類一個(gè)類有一個(gè)且只有有一個(gè)且只有一個(gè)析構(gòu)函數(shù),這與一個(gè)析構(gòu)函數(shù),這與構(gòu)造函數(shù)不同。析構(gòu)函數(shù)也可以默認(rèn)。構(gòu)造函數(shù)不同。析構(gòu)函數(shù)也可以默認(rèn)。l注銷對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。注銷對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。9.4 對(duì)象數(shù)組對(duì)象數(shù)組l數(shù)組不僅可以由簡(jiǎn)單變量組成數(shù)組不僅可以由簡(jiǎn)單變量組成(例如整型數(shù)組例如整型數(shù)組的每一個(gè)元素都是整型變量的每一個(gè)元素都是整型變量),也可以由對(duì)象,也可以由對(duì)象組成組成(對(duì)象數(shù)組的每

23、一個(gè)元素都是同類的對(duì)象對(duì)象數(shù)組的每一個(gè)元素都是同類的對(duì)象)。#include using namespace std;class Boxprivate: int height; int width; int length;public: Box(int h=10,int w=12,int len=15): height(h),width(w),length(len) int volume( );int Box:volume( ) return (height*width*length);int main( ) Box a3= Box(10,12,15), Box(15,18,20), Box(

24、16,20,26) ; coutvolume of a0 is a0.volume( )endl; coutvolume of a1 is a1.volume( )endl; coutvolume of a2 is a2.volume( )hour pt所指向的對(duì)象中的所指向的對(duì)象中的hour成員成員 l(*pt).get_time ( ) 調(diào)用調(diào)用pt所指向的對(duì)象中的所指向的對(duì)象中的get_time函數(shù)函數(shù)lpt-get_time ( ) 調(diào)用調(diào)用pt所指向的對(duì)象中的所指向的對(duì)象中的get_time函數(shù)函數(shù)l對(duì)象有地址,存放對(duì)象初始地址的指針變量對(duì)象有地址,存放對(duì)象初始地址的指針變量就是指向

25、對(duì)象的指針變量。對(duì)象中的成員也就是指向?qū)ο蟮闹羔樧兞?。?duì)象中的成員也有地址,存放對(duì)象成員地址的指針變量就是有地址,存放對(duì)象成員地址的指針變量就是指向?qū)ο蟪蓡T的指針變量。指向?qū)ο蟪蓡T的指針變量。1. 指向?qū)ο髷?shù)據(jù)成員的指針指向?qū)ο髷?shù)據(jù)成員的指針l定義指向?qū)ο髷?shù)據(jù)成員的指針變量的方法和定義指向?qū)ο髷?shù)據(jù)成員的指針變量的方法和定義指向普通變量的指針變量方法相同。例定義指向普通變量的指針變量方法相同。例如如lint *p1; /定義指向整型數(shù)據(jù)的指針變量定義指向整型數(shù)據(jù)的指針變量lp1=&t1.hour; /將對(duì)象將對(duì)象t1的數(shù)據(jù)成員的數(shù)據(jù)成員hour的地址賦給的地址賦給p1,p1指向指向t1.

26、hourlcout*p1endl; /輸出輸出t1.hour的值的值*2. 指向?qū)ο蟪蓡T函數(shù)的指針指向?qū)ο蟪蓡T函數(shù)的指針l定義指向?qū)ο蟪蓡T函數(shù)的指針變量的方法和定義指定義指向?qū)ο蟪蓡T函數(shù)的指針變量的方法和定義指向普通函數(shù)的指針變量方法有所不同。向普通函數(shù)的指針變量方法有所不同。l定義指向公用成員函數(shù)的指針變量的一般形式為:定義指向公用成員函數(shù)的指針變量的一般形式為:數(shù)據(jù)類型名數(shù)據(jù)類型名 (類名類名 *指針變量名指針變量名)(參數(shù)表列參數(shù)表列);lvoid (Time *p2)( ); /定義定義p2為指向?yàn)橹赶騎ime類中公用成員函數(shù)的指針變量類中公用成員函數(shù)的指針變量lp2=&Tim

27、e get_time;l成員函數(shù)與普通函數(shù)有一個(gè)最根本的區(qū)別:成員函數(shù)與普通函數(shù)有一個(gè)最根本的區(qū)別: 它是類它是類中的一個(gè)成員。編譯系統(tǒng)要求在賦值語(yǔ)句中,指針中的一個(gè)成員。編譯系統(tǒng)要求在賦值語(yǔ)句中,指針變量的類型必須與賦值號(hào)右側(cè)函數(shù)的類型相匹配,變量的類型必須與賦值號(hào)右側(cè)函數(shù)的類型相匹配,要求在以下要求在以下3方面都要匹配:方面都要匹配: 函數(shù)參數(shù)的類型和函數(shù)參數(shù)的類型和參數(shù)個(gè)數(shù);參數(shù)個(gè)數(shù);函數(shù)返回值的類型;函數(shù)返回值的類型;所屬的類。所屬的類。例例l#include lusing namespace std;lclass Timellpublic:l Time(int,int,int);l

28、int hour;l int minute;l int sec;l void get_time( );l;lTime:Time(int h,int m,int s)ll hour=h;l minute=m;l sec=s;llvoid Time:get_time( )ll couthour:minute:secendl;llint main( )ll Time t1(10,13,56);l int *p1=&t1.hour;l cout*p1get_time( );l void (Time:*p3)( );l p3=&Time:get_time;l (t1.*p3)( );l9

29、.6 對(duì)象的動(dòng)態(tài)建立和釋放對(duì)象的動(dòng)態(tài)建立和釋放l用前面介紹的方法定義的對(duì)象是靜態(tài)的,在用前面介紹的方法定義的對(duì)象是靜態(tài)的,在程序運(yùn)行過程中,對(duì)象所占的空間是不能隨程序運(yùn)行過程中,對(duì)象所占的空間是不能隨時(shí)釋放的。但有時(shí)人們希望在需要用到對(duì)象時(shí)釋放的。但有時(shí)人們希望在需要用到對(duì)象時(shí)才建立對(duì)象,在不需要用該對(duì)象時(shí)就撤銷時(shí)才建立對(duì)象,在不需要用該對(duì)象時(shí)就撤銷它,釋放它所占的內(nèi)存空間以供別的數(shù)據(jù)使它,釋放它所占的內(nèi)存空間以供別的數(shù)據(jù)使用。這樣可提高內(nèi)存空間的利用率。用。這樣可提高內(nèi)存空間的利用率。l可以用可以用new運(yùn)算符動(dòng)態(tài)建立對(duì)象,用運(yùn)算符動(dòng)態(tài)建立對(duì)象,用delete運(yùn)算符撤銷對(duì)象。運(yùn)算符撤銷對(duì)象。

30、l#include lusing namespace std;lclass Studentll int sno;l string name;lpublic:l Student();l Student(int s,string n);l void showInfo();l;lStudent:Student()ll sno=0;l name=no name;llStudent:Student(int s,string n)ll sno=s;l name=n;llvoid Student:showInfo()ll coutsno: snoendl;l coutname: nameshowInfo()

31、;l s2-showInfo();l delete s1;l s1-showInfo(); /可能引發(fā)致命錯(cuò)誤可能引發(fā)致命錯(cuò)誤l9.7 對(duì)象的賦值和復(fù)制對(duì)象的賦值和復(fù)制l如果對(duì)一個(gè)類定義了兩個(gè)或多個(gè)對(duì)象,則這些同類的對(duì)象之如果對(duì)一個(gè)類定義了兩個(gè)或多個(gè)對(duì)象,則這些同類的對(duì)象之間可以間可以互相賦值互相賦值,或者說,一個(gè)對(duì)象的值可以賦給另一個(gè)同,或者說,一個(gè)對(duì)象的值可以賦給另一個(gè)同類的對(duì)象。這里所指的對(duì)象的值是指對(duì)象中類的對(duì)象。這里所指的對(duì)象的值是指對(duì)象中所有數(shù)據(jù)成員所有數(shù)據(jù)成員的的值。值。l對(duì)象之間的賦值也是通過賦值運(yùn)算符對(duì)象之間的賦值也是通過賦值運(yùn)算符“=”進(jìn)行的。本來,賦進(jìn)行的。本來,賦值運(yùn)算

32、符值運(yùn)算符“=”只能用來對(duì)單個(gè)的變量賦值,現(xiàn)在被擴(kuò)展為兩只能用來對(duì)單個(gè)的變量賦值,現(xiàn)在被擴(kuò)展為兩個(gè)同類對(duì)象之間的賦值,這是通過對(duì)賦值個(gè)同類對(duì)象之間的賦值,這是通過對(duì)賦值運(yùn)算符的重載運(yùn)算符的重載實(shí)現(xiàn)實(shí)現(xiàn)的。實(shí)際這個(gè)過程是通過成員復(fù)制來完成的,即將一個(gè)對(duì)象的。實(shí)際這個(gè)過程是通過成員復(fù)制來完成的,即將一個(gè)對(duì)象的成員值的成員值一一復(fù)制一一復(fù)制給另一對(duì)象的給另一對(duì)象的對(duì)應(yīng)成員對(duì)應(yīng)成員。對(duì)象賦值的一般。對(duì)象賦值的一般形式為形式為對(duì)象名對(duì)象名1 = 對(duì)象名對(duì)象名2;l注意對(duì)象名注意對(duì)象名1和對(duì)象名和對(duì)象名2必須屬于同一個(gè)類。必須屬于同一個(gè)類。l例如例如lStudent s1,s2; /定義兩個(gè)同類的對(duì)象定義

33、兩個(gè)同類的對(duì)象lls2=s1; /將將s1賦給賦給s2l說明:說明: l(1) 對(duì)象的賦值只對(duì)其中的數(shù)據(jù)成員賦值,而不對(duì)成對(duì)象的賦值只對(duì)其中的數(shù)據(jù)成員賦值,而不對(duì)成員函數(shù)賦值。員函數(shù)賦值。l(2) 類的數(shù)據(jù)成員中不能包括類的數(shù)據(jù)成員中不能包括動(dòng)態(tài)分配的數(shù)據(jù)動(dòng)態(tài)分配的數(shù)據(jù),否則,否則在賦值時(shí)可能出現(xiàn)嚴(yán)重后果。在賦值時(shí)可能出現(xiàn)嚴(yán)重后果。l有時(shí)需要用到多個(gè)完全相同的對(duì)象。此外,有時(shí)需有時(shí)需要用到多個(gè)完全相同的對(duì)象。此外,有時(shí)需要將對(duì)象在某一瞬時(shí)的狀態(tài)保留下來。這就是對(duì)象要將對(duì)象在某一瞬時(shí)的狀態(tài)保留下來。這就是對(duì)象的復(fù)制機(jī)制,用一個(gè)已有的對(duì)象快速地復(fù)制出多個(gè)的復(fù)制機(jī)制,用一個(gè)已有的對(duì)象快速地復(fù)制出多個(gè)

34、完全相同的對(duì)象。如完全相同的對(duì)象。如lStudent s1(1,wang);lStudent s2(s1);l其作用是用已有的對(duì)象其作用是用已有的對(duì)象s1去克隆出一個(gè)新對(duì)象去克隆出一個(gè)新對(duì)象s2。l其一般形式為其一般形式為l類名類名 對(duì)象對(duì)象2(對(duì)象對(duì)象1);l可以看到:可以看到: 它與前面介紹過的定義對(duì)象方式類似,但是括號(hào)它與前面介紹過的定義對(duì)象方式類似,但是括號(hào)中給出的參數(shù)不是一般的變量,而是對(duì)象。中給出的參數(shù)不是一般的變量,而是對(duì)象。l在建立對(duì)象時(shí)調(diào)用一個(gè)特殊的構(gòu)造函數(shù)在建立對(duì)象時(shí)調(diào)用一個(gè)特殊的構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)(copy constructor)。這個(gè)函數(shù)的形式是這樣的:

35、。這個(gè)函數(shù)的形式是這樣的: lStudent:Student(const Student& s)ll sno=s.sno;l name=;ll復(fù)制構(gòu)造函數(shù)也是構(gòu)造函數(shù),但它復(fù)制構(gòu)造函數(shù)也是構(gòu)造函數(shù),但它只有一個(gè)參數(shù)只有一個(gè)參數(shù),這個(gè)參數(shù),這個(gè)參數(shù)是本類的對(duì)象是本類的對(duì)象(不能是其他類的對(duì)象不能是其他類的對(duì)象),而且采用對(duì)象的引用,而且采用對(duì)象的引用的形式的形式(一般約定加一般約定加const聲明聲明,使參數(shù)值不能改變,以免在,使參數(shù)值不能改變,以免在調(diào)用此函數(shù)時(shí)因不慎而使對(duì)象值被修改調(diào)用此函數(shù)時(shí)因不慎而使對(duì)象值被修改)。l復(fù)制對(duì)象的語(yǔ)句復(fù)制對(duì)象的語(yǔ)句lStudent s2(

36、s1);l實(shí)際上也是建立對(duì)象的語(yǔ)句,建立一個(gè)新對(duì)象實(shí)際上也是建立對(duì)象的語(yǔ)句,建立一個(gè)新對(duì)象s2。由于在括號(hào)內(nèi)給定的實(shí)參是對(duì)象,因此由于在括號(hào)內(nèi)給定的實(shí)參是對(duì)象,因此編譯系統(tǒng)編譯系統(tǒng)就就調(diào)用復(fù)制構(gòu)造函數(shù)調(diào)用復(fù)制構(gòu)造函數(shù)(它的形參也是對(duì)象它的形參也是對(duì)象),而不會(huì)去,而不會(huì)去調(diào)用其他構(gòu)造函數(shù)。調(diào)用其他構(gòu)造函數(shù)。s形參形參s是實(shí)參是實(shí)參s1的引用,因此的引用,因此執(zhí)行復(fù)制構(gòu)造函數(shù)的函數(shù)體時(shí),將執(zhí)行復(fù)制構(gòu)造函數(shù)的函數(shù)體時(shí),將s1對(duì)象中各數(shù)據(jù)對(duì)象中各數(shù)據(jù)成員的值賦給成員的值賦給s2中各數(shù)據(jù)成員。中各數(shù)據(jù)成員。l如果用戶自己未定義復(fù)制構(gòu)造函數(shù),則編譯系統(tǒng)會(huì)如果用戶自己未定義復(fù)制構(gòu)造函數(shù),則編譯系統(tǒng)會(huì)自動(dòng)提

37、供自動(dòng)提供一個(gè)一個(gè)默認(rèn)的默認(rèn)的復(fù)制構(gòu)造函數(shù),其作用只是簡(jiǎn)復(fù)制構(gòu)造函數(shù),其作用只是簡(jiǎn)單地復(fù)制類中每個(gè)數(shù)據(jù)成員。單地復(fù)制類中每個(gè)數(shù)據(jù)成員。lC+還提供另一種方便用戶的復(fù)制形式,用賦值號(hào)代替括號(hào),還提供另一種方便用戶的復(fù)制形式,用賦值號(hào)代替括號(hào),如如lStudent s3=s1; /用用s1初始化初始化s3l其一般形式為其一般形式為l類名類名 對(duì)象名對(duì)象名1 = 對(duì)象名對(duì)象名2;l可以在一個(gè)語(yǔ)句中進(jìn)行多個(gè)對(duì)象的復(fù)制。如可以在一個(gè)語(yǔ)句中進(jìn)行多個(gè)對(duì)象的復(fù)制。如lStudent s2=s1,s3=s2; l可以看出:可以看出: 這種形式與變量初始化語(yǔ)句類似,請(qǐng)與下面定義這種形式與變量初始化語(yǔ)句類似,請(qǐng)與下

38、面定義變量的語(yǔ)句作比較:變量的語(yǔ)句作比較: int a=4,b=a;l這種形式看起來很直觀,用起來很方便。但是其作用都是這種形式看起來很直觀,用起來很方便。但是其作用都是調(diào)調(diào)用復(fù)制構(gòu)造函數(shù)用復(fù)制構(gòu)造函數(shù)。l普通構(gòu)造函數(shù)普通構(gòu)造函數(shù)在程序中建立對(duì)象時(shí)被調(diào)用。在程序中建立對(duì)象時(shí)被調(diào)用。l復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)在用已有對(duì)象復(fù)制一個(gè)新對(duì)象在用已有對(duì)象復(fù)制一個(gè)新對(duì)象時(shí)被調(diào)用,在以下時(shí)被調(diào)用,在以下3種情況種情況下需要克隆對(duì)象:下需要克隆對(duì)象:l 程序中需要新建立一個(gè)對(duì)象,并用另一個(gè)程序中需要新建立一個(gè)對(duì)象,并用另一個(gè)同類的對(duì)象對(duì)它初始化,如前面介紹的那樣。同類的對(duì)象對(duì)它初始化,如前面介紹的那樣。lSt

39、udent s2(s1);lStudent s3=s1;l 當(dāng)當(dāng)函數(shù)的參數(shù)為類的對(duì)象函數(shù)的參數(shù)為類的對(duì)象時(shí)。在調(diào)用函數(shù)時(shí)需要將實(shí)參對(duì)時(shí)。在調(diào)用函數(shù)時(shí)需要將實(shí)參對(duì)象完整地傳遞給形參,也就是需要建立一個(gè)實(shí)參的拷貝,這象完整地傳遞給形參,也就是需要建立一個(gè)實(shí)參的拷貝,這就是按實(shí)參復(fù)制一個(gè)形參,系統(tǒng)是通過調(diào)用復(fù)制構(gòu)造函數(shù)來就是按實(shí)參復(fù)制一個(gè)形參,系統(tǒng)是通過調(diào)用復(fù)制構(gòu)造函數(shù)來實(shí)現(xiàn)的,這樣能保證形參具有和實(shí)參完全相同的值。如實(shí)現(xiàn)的,這樣能保證形參具有和實(shí)參完全相同的值。如 lvoid fun(Student s) /形參是類的對(duì)象形參是類的對(duì)象l lint main( )ll Student s1(1,w

40、ang);l fun(s1); /實(shí)參是類的對(duì)象,調(diào)用函數(shù)時(shí)將復(fù)制一個(gè)新對(duì)象實(shí)參是類的對(duì)象,調(diào)用函數(shù)時(shí)將復(fù)制一個(gè)新對(duì)象sl return 0;ll 函數(shù)的函數(shù)的返回值是類的對(duì)象返回值是類的對(duì)象。在函數(shù)調(diào)用完畢將返回值帶回函數(shù)調(diào)用處。在函數(shù)調(diào)用完畢將返回值帶回函數(shù)調(diào)用處時(shí)。此時(shí)需要將函數(shù)中的對(duì)象復(fù)制一個(gè)時(shí)。此時(shí)需要將函數(shù)中的對(duì)象復(fù)制一個(gè)臨時(shí)對(duì)象臨時(shí)對(duì)象并傳給該函數(shù)的調(diào)用處。并傳給該函數(shù)的調(diào)用處。如如 lStudent fun(int s,string n) /函數(shù)函數(shù)f的類型為的類型為Student類類型類類型ll Student st(s,n);l return st; /返回值是返回值是St

41、udent類的對(duì)象類的對(duì)象llint main( )ll Student s1;l s1=fun(1,wang);l s1.showInfo();ll以上幾種調(diào)用復(fù)制構(gòu)造函數(shù)都是由編譯系統(tǒng)自動(dòng)實(shí)現(xiàn)的,不必由用戶自以上幾種調(diào)用復(fù)制構(gòu)造函數(shù)都是由編譯系統(tǒng)自動(dòng)實(shí)現(xiàn)的,不必由用戶自己去調(diào)用,我們只要知道在這些情況下需要調(diào)用復(fù)制構(gòu)造函數(shù)就可以了。己去調(diào)用,我們只要知道在這些情況下需要調(diào)用復(fù)制構(gòu)造函數(shù)就可以了。對(duì)象的復(fù)制和對(duì)象的賦值對(duì)象的復(fù)制和對(duì)象的賦值lStudent s1(1,zhang);lStudent s2(s1); /對(duì)象復(fù)制對(duì)象復(fù)制lStudent s3=s2; /對(duì)象復(fù)制對(duì)象復(fù)制lStud

42、ent s4;s4=s1; /對(duì)象賦值對(duì)象賦值l對(duì)象的復(fù)制和對(duì)象的賦值在概念上和語(yǔ)法上是不同的。對(duì)象的復(fù)制和對(duì)象的賦值在概念上和語(yǔ)法上是不同的。l對(duì)象的賦值是對(duì)一個(gè)對(duì)象的賦值是對(duì)一個(gè)已經(jīng)存在的對(duì)象已經(jīng)存在的對(duì)象賦值,將等號(hào)右邊對(duì)象賦值,將等號(hào)右邊對(duì)象數(shù)據(jù)成員的值賦給等號(hào)左邊對(duì)象的相應(yīng)成員。數(shù)據(jù)成員的值賦給等號(hào)左邊對(duì)象的相應(yīng)成員。l對(duì)象的復(fù)制則是對(duì)象的復(fù)制則是調(diào)用對(duì)象復(fù)制函數(shù)調(diào)用對(duì)象復(fù)制函數(shù)。運(yùn)行下列程序,分析輸出結(jié)果運(yùn)行下列程序,分析輸出結(jié)果l#include lusing namespace std;lclass Studentll int sno;l string name;lpublic

43、:l Student();l Student(int,string);l Student(const Student&);l void setSno(int);l void showInfo();l;lStudent:Student()ll cout調(diào)用了無(wú)參構(gòu)造函數(shù)。調(diào)用了無(wú)參構(gòu)造函數(shù)。endl;l sno=0;l name=no name;llStudent:Student(int s,string n)ll cout調(diào)用了有參構(gòu)造函數(shù)。調(diào)用了有參構(gòu)造函數(shù)。endl;l sno=s;l name=n;llStudent:Student(const Student& s)ll

44、 cout調(diào)用了復(fù)制構(gòu)造函數(shù)。調(diào)用了復(fù)制構(gòu)造函數(shù)。endl;l sno=s.sno;l name=;llvoid Student:showInfo()ll coutsno: snoendl;l coutname: nameendl;llint main( )ll Student s1(1,wang);l s1.showInfo();l Student s2(s1);l s2.showInfo();l Student s3=s2;l s3.showInfo();l Student s4;l s4=s1;l s4.showInfo();l問題問題1lclass MyClasslpubl

45、ic:l int n;l int *m;l MyClass()m=new int5;l MyClass()delete m;l;lvoid Fun(MyClass mc)l cout3: mc.m0endl;llint main()l MyClass a;l a.m0=3;l cout1: a.m0endl;l Fun(a);l cout2: a.m0endl;l1: 33: 32: 3089840問題出在哪?思考:思考:lclass Studentll int sno;l string name;l int *score;lpublic:l Student();l Student(int s

46、,string n,int sc);l Student(const Student&);l void showInfo();l;這些構(gòu)造函數(shù)這些構(gòu)造函數(shù)如何定義?如何定義?9.8 靜態(tài)成員靜態(tài)成員l靜態(tài)類成員是由關(guān)鍵字靜態(tài)類成員是由關(guān)鍵字static修飾說明的類成修飾說明的類成員。員。類的靜態(tài)成員為其所有對(duì)象共享,不管類的靜態(tài)成員為其所有對(duì)象共享,不管有多少對(duì)象,靜態(tài)成員只有一個(gè)存于公用內(nèi)有多少對(duì)象,靜態(tài)成員只有一個(gè)存于公用內(nèi)存中存中。l在類定義中,用關(guān)鍵字在類定義中,用關(guān)鍵字static修飾的數(shù)據(jù)成員為靜態(tài)修飾的數(shù)據(jù)成員為靜態(tài)數(shù)據(jù)成員,該類產(chǎn)生的所有對(duì)象數(shù)據(jù)成員,該類產(chǎn)生的所有對(duì)象共

47、享共享由系統(tǒng)為靜態(tài)由系統(tǒng)為靜態(tài)成員分配的一塊存儲(chǔ)空間,而這塊存儲(chǔ)空間是成員分配的一塊存儲(chǔ)空間,而這塊存儲(chǔ)空間是在編在編譯時(shí)譯時(shí)分配的,分配的,在定義對(duì)象時(shí)不再為靜態(tài)成員分配空在定義對(duì)象時(shí)不再為靜態(tài)成員分配空間間。靜態(tài)數(shù)據(jù)實(shí)際上是該類所有對(duì)象所共有的,它。靜態(tài)數(shù)據(jù)實(shí)際上是該類所有對(duì)象所共有的,它更像面向過程程序設(shè)計(jì)的全局變量,可提供同一類更像面向過程程序設(shè)計(jì)的全局變量,可提供同一類所有對(duì)象之間信息交換的捷徑。正因?yàn)殪o態(tài)數(shù)據(jù)成所有對(duì)象之間信息交換的捷徑。正因?yàn)殪o態(tài)數(shù)據(jù)成員不屬于類的某一特定對(duì)象,而是屬于整個(gè)類的,員不屬于類的某一特定對(duì)象,而是屬于整個(gè)類的,所以使用時(shí)可用以下格式:所以使用時(shí)可用以下

48、格式:類名類名:靜態(tài)數(shù)據(jù)成員名靜態(tài)數(shù)據(jù)成員名lclass Testllprivate:l static int count; /聲明靜態(tài)數(shù)據(jù)成員聲明靜態(tài)數(shù)據(jù)成員lpublic:l Test( )l l +count;l cout對(duì)象數(shù)量對(duì)象數(shù)量countendl;l l Test( )l l -count;l cout對(duì)象數(shù)量對(duì)象數(shù)量countendl;l l;lint Test:count=0; /定義靜態(tài)數(shù)據(jù)成員定義靜態(tài)數(shù)據(jù)成員lint main( )ll Test a3;l輸出結(jié)果:對(duì)象數(shù)量1對(duì)象數(shù)量2對(duì)象數(shù)量3對(duì)象數(shù)量2對(duì)象數(shù)量1對(duì)象數(shù)量0注意:注意:l靜態(tài)數(shù)據(jù)成員在程序一開始運(yùn)行時(shí)就必須存靜態(tài)數(shù)據(jù)成員在程序一開始運(yùn)行時(shí)就必須存在(分配空間),故在(分配空間),故不能不能在任何函數(shù)內(nèi)定義,在任何函數(shù)內(nèi)定義,也也不能不能在類的聲明中定義(只能聲明數(shù)據(jù)成在類的聲明中定義(只能聲明數(shù)據(jù)成員),也員),也不能不能在頭文件中類聲明的外部定義。在頭文件中類聲明的外部定義。l靜態(tài)數(shù)據(jù)成員是類的一部分,其定義是類定靜態(tài)數(shù)據(jù)成員是類的一部分,其定義是類定義的一部分,義的一部分,一般將其放在類的內(nèi)部實(shí)現(xiàn)部一般將其

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論