版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 類是C+語(yǔ)言的重要組成部分,面向?qū)ο蟪绦蛟O(shè)計(jì)的主要工作就是對(duì)類的設(shè)計(jì)。因此,可以說(shuō)類是C+語(yǔ)言區(qū)別于C語(yǔ)言的主要成分。類的定義相當(dāng)于定義一種數(shù)據(jù)類型,而對(duì)象則是類的實(shí)例。類與對(duì)象的關(guān)系相當(dāng)于數(shù)據(jù)類型與變量之間的關(guān)系。 第六章 類本章重點(diǎn) 在本章中,將著重介紹和類有關(guān)的基本概念,所有的例子也都是為了說(shuō)明某個(gè)概念而提出來(lái)的,因此,在本章中給出的例子都比較簡(jiǎn)單。有關(guān)復(fù)雜的類的設(shè)計(jì),將在以后的章節(jié)中詳細(xì)介紹。6.1 類的定義在C+語(yǔ)言中,類的定義形式如下: 其中,數(shù)據(jù)成員是類中所包含的變量,用于表示某種數(shù)據(jù)結(jié)構(gòu),而成員函數(shù)則用于對(duì)數(shù)據(jù)成員進(jìn)行操作的函數(shù)。class 類型名 數(shù)據(jù)成員 成員函數(shù);類的定
2、義舉例class cInt int x; int xRet ( ) return x; ; 這里,cInt相當(dāng)于一種數(shù)據(jù)類型,用于定義類對(duì)象;x為數(shù)據(jù)成員,其數(shù)據(jù)類型為整型;xRet ( )為成員函數(shù),其返回值類型為整型。定義類的對(duì)象類對(duì)象的定義,例如: v.x=1;num=v.xRet( );類的數(shù)據(jù)成員和成員函數(shù)的使用,例如:cInt v;6.2 公共、私有和保護(hù) 在定義類時(shí),可以對(duì)類中的數(shù)據(jù)成員和成員函數(shù)設(shè)置如下三種訪問(wèn)控制: (1)public:公共的。 (2)private:私有的。(3)protected:受保護(hù)的。 (1)public:公共的 寫(xiě)在public關(guān)鍵字下面的數(shù)據(jù)成員
3、和成員函數(shù)都是公有的,也就是所有的函數(shù)都可以訪問(wèn)這些成員。(2)private:私有的 寫(xiě)在private關(guān)鍵字下面的數(shù)據(jù)成員和成員函數(shù)都是私有的,也就是只有該類的成員函數(shù)和友元才可以訪問(wèn)這些成員。(3)protected:受保護(hù)的 寫(xiě)在protected關(guān)鍵字下面的數(shù)據(jù)成員和成員函數(shù)都是受保護(hù)的,也就是這些成員在具有private特性的同時(shí),可以由派生類(通過(guò)繼承而生成的類)的成員函數(shù)來(lái)訪問(wèn)。定義類時(shí),注意事項(xiàng)(1) 在定義類時(shí),一般將數(shù)據(jù)成員定義為private,以便防止來(lái)自外部的任意訪問(wèn),而將成員函數(shù)定義為public ,使其可以被外部所調(diào)用,但這并不是絕對(duì)的,程序完全可以根據(jù)需要來(lái)設(shè)置
4、訪問(wèn)控制。 定義類時(shí),注意事項(xiàng)(2) 在定義類時(shí),最初的private關(guān)鍵字可以省略。例如: class cName int x; /x是private成員 public: int get_x()return x; ;例 如class cTest int a; int Reta( ); int seta(int x); public: int b; private: int x10; ;類的定義說(shuō)明 在類的定義中,用于設(shè)置訪問(wèn)權(quán)限的public、private和protected可以出現(xiàn)任意次,且沒(méi)有順序要求。例如: class cValue public: int x; private: i
5、nt y; public : int z;6.3 數(shù)據(jù)成員和成員函數(shù)下面定義一個(gè)類的框架: void setage(int tage); char *getname( ); int getage( ); void disp ( );class cPerson private: char name40; int age; public: void setname(char *ss);6.3.1 成員函數(shù)的使用(1)定義類的對(duì)象。例如: cPerson P; (2) 利用對(duì)象P來(lái)訪問(wèn)類中的函數(shù)。例 如P.setname(“Wang”); 注意: (1)調(diào)用類中的函數(shù)也需要給出參數(shù)(2)實(shí)參類型同形
6、參類型要一致(3)在訪問(wèn)類中的成員函數(shù)時(shí),一定要 注意其訪問(wèn)控制權(quán)限。6.3.2 成員函數(shù)的內(nèi)部定義和外部定義 類中的成員函數(shù)只有被定義了之后才能被調(diào)用。類的成員函數(shù)可以有兩種定義方法: (1)內(nèi)部定義(2)外部定義(1)內(nèi)部定義 內(nèi)部定義:在類中給出函數(shù)說(shuō)明的同時(shí)給出其函數(shù)實(shí)體部分的定義。 特點(diǎn):在類中定義的函數(shù)其長(zhǎng)度都比較短,但這不是絕對(duì)的,任何函數(shù)都可以在類中進(jìn)行定義。內(nèi)部定義的函數(shù)即使不加inline關(guān)鍵詞也被默認(rèn)為inline函數(shù)。例 如class cPerson public: void setname(char *ss) ; 這里的setname( )函數(shù)采用的就是內(nèi)部定義形式
7、,默認(rèn)為inline函數(shù)。(2)外部定義 外部定義:在類中只給出函數(shù)的說(shuō)明,而函數(shù)的實(shí)體部分是在類的外面進(jìn)行定義的。外部定義的成員函數(shù)的寫(xiě)法外部定義的成員函數(shù)的寫(xiě)法如下: 其中,: 是作用域限定運(yùn)算符,它表示這里定義的disp( ) 函數(shù)是屬于cPerson類的。void cPerson:disp( ) disp( )函數(shù)的另一種定義形式void disp( ) 這樣定義的disp( )函數(shù),是全局函數(shù),而不是屬于cPerson類的。說(shuō)明:class Date public: int getDay( );inline int Date:getDay( ) 外部定義的inline函數(shù)可有如下三種
8、寫(xiě)法:class Date public: inline int getDay( );inline int Date:getDay( ) class Date public: inline int getDay( );int Date:getDay( ) 6.3.3 數(shù)據(jù)成員的保護(hù) 數(shù)據(jù)成員的保護(hù):是指通過(guò)訪問(wèn)權(quán)限控制,來(lái)限制對(duì)數(shù)據(jù)成員的非法訪問(wèn)。 比如,在cPerson類中,由于表示年令的變量age是私有的,因此,除了此類中的成員函數(shù)以外,其它函數(shù)是無(wú)法訪問(wèn)到此變量的,這樣,就可以通過(guò)成員函數(shù)來(lái)保證賦給age變量的值是有意義的,從而起到對(duì)數(shù)據(jù)成員的保護(hù)作用?!纠?.1】編一程序,用于說(shuō)明對(duì)對(duì)
9、象中的成員設(shè)置訪問(wèn)控制的作用#include #include class cPerson char name40; int age;public: void setname(char *ss) strcpy(name,ss); void setage(int tage) age = ( tage 0 ) ? 0 : tage; char *getname( ) return name; int getage( ) return age; void disp( ); ;void cPerson:disp( ) cout “Name: ” name n; cout “Age: “ age n;v
10、oid main( ) cPerson man; int n; man.setname(“Wang”); man.setage(20); n = man.getage( ); man.disp( ); cout man.getname( ) man.getage( ) n n;執(zhí)行結(jié)果:Name: WangAge: 20Wang2020 在cPerson類中,由于age數(shù)據(jù)成員被說(shuō)明為private,所以只有此類中的成員函數(shù)才能訪問(wèn)此變量,同時(shí)由于只有setage( )成員函數(shù)才能改寫(xiě)age變量的值,而在setage( )函數(shù)中又對(duì)賦給age變量的值進(jìn)行了限制,這樣,就使得age變量中能夠始終
11、存放著有意義的值,從而起到數(shù)據(jù)保護(hù)的作用。 說(shuō) 明6.4 構(gòu)造函數(shù)和析構(gòu)函數(shù) (1)在定義對(duì)象時(shí),如果不同時(shí)指定對(duì)象中變量的初值的話,那么對(duì)象中的數(shù)據(jù)成員的值是不定的。 (2)為了能夠在定義對(duì)象的同時(shí)為其中的數(shù)據(jù)成員賦初值,在C+語(yǔ)言中,提供了構(gòu)造函數(shù)的概念。 (3)為了在對(duì)象釋放時(shí)進(jìn)行一些后處理,在C+語(yǔ)言中,提供了析構(gòu)函數(shù)的概念。6.4.1 構(gòu)造函數(shù) 在定義類時(shí),可以同時(shí)定義其構(gòu)造函數(shù),以便根據(jù)需要在定義類對(duì)象的同時(shí),對(duì)類中的數(shù)據(jù)成員進(jìn)行初始化。 因此,構(gòu)造函數(shù)主要用于對(duì)類對(duì)象中的數(shù)據(jù)成員進(jìn)行初始化。構(gòu)造函數(shù)的特征(1)構(gòu)造函數(shù)的名字與類名相同。(2)構(gòu)造函數(shù)只是用于為數(shù)據(jù)成員設(shè)置初始 值
12、而沒(méi)有返回值,因此,構(gòu)造函數(shù)沒(méi)有 返回值類型說(shuō)明。(3)構(gòu)造函數(shù)是在生成類對(duì)象時(shí)自動(dòng)調(diào)用的。1、構(gòu)造函數(shù)的說(shuō)明和定義【例6.2】編寫(xiě)程序,說(shuō)明構(gòu)造函數(shù)的定義方式。 #include class cExam int aInt; public: cExam( ); /構(gòu)造函數(shù) void disp( ) cout “aInt=” aInt n; ;cExam:cExam( ) aInt=999; void main( ) cExam dt; dt.disp( ); 執(zhí)行結(jié)果: aInt=999說(shuō) 明(1) 在此程序中,cExam類中的cExam( ); 是構(gòu)造函數(shù)的說(shuō)明。這里需要注意的是,此構(gòu)造函數(shù)
13、沒(méi)有函數(shù)值類型的說(shuō)明。 cExam:cExam( ) aInt=999; 其作用是為 aInt 數(shù)據(jù)成員賦初值999。有了構(gòu)造函數(shù)的定義之后,在main( )函數(shù)中定義cExam類對(duì)象dt時(shí),將自動(dòng)調(diào)用此構(gòu)造函數(shù),以便為dt.aInt數(shù)據(jù)成員賦以999的初值。在類的外面定義:說(shuō) 明(2) (1)構(gòu)造函數(shù)cExam()沒(méi)有參數(shù),故將其稱為無(wú)參構(gòu)造函數(shù)或缺省構(gòu)造函數(shù)。 (2)當(dāng)構(gòu)造函數(shù)的定義比較短時(shí)(不是絕對(duì)的),也可以在類中進(jìn)行說(shuō)明的同時(shí)進(jìn)行定義。例如,上面cExam類可改為如下形式: class cExam int aInt;public: cExam( ) aInt = 999; void
14、disp( ) cout “aInt=” aInt n; ;2、帶有參數(shù)的構(gòu)造函數(shù) 構(gòu)造函數(shù)同其它函數(shù)一樣也可以帶有參數(shù),此時(shí)可以為數(shù)據(jù)成員賦以任意的初值。如果在一個(gè)類中定義了帶有參數(shù)的構(gòu)造函數(shù),則在定義該類的對(duì)象時(shí),就需要在對(duì)象名后面的圓括號(hào)里給出其參數(shù),而且要調(diào)用帶有幾個(gè)參數(shù)的構(gòu)造函數(shù),就需要給出幾個(gè)參數(shù)。#include class cXydata int x; int y;public: cXydata( int a, int b); /構(gòu)造函數(shù)的說(shuō)明 void clear( ) x = 0; y = 0; void disp( ) cout “x=” x “y=” y n; ;cXy
15、data:cXydata(int a, int b) /構(gòu)造函數(shù)的定義 x = a; y = b; 【例6.3】編寫(xiě)一程序,用于說(shuō)明帶有參數(shù)的構(gòu)造函數(shù)的說(shuō)明和定義方式 void main( ) cXydata dt1(100,200); /設(shè)定初值 dt1.disp( );執(zhí)行結(jié)果:x=100 y=200 由于在定義對(duì)象時(shí),系統(tǒng)將根據(jù)后面給出的參數(shù)個(gè)數(shù)來(lái)決定所要調(diào)用的構(gòu)造函數(shù),所以對(duì)于上述定義的cXydata類來(lái)講,此時(shí)若有如下定義,則出錯(cuò),因?yàn)闆](méi)有與之對(duì)應(yīng)的缺省構(gòu)造函數(shù): cXydata dt; /出錯(cuò)說(shuō) 明3、構(gòu)造函數(shù)的顯式調(diào)用 構(gòu)造函數(shù)一般都是隱式調(diào)用的,即在定義類對(duì)象時(shí)自動(dòng)地調(diào)用相應(yīng)的
16、構(gòu)造函數(shù),但由于構(gòu)造函數(shù)也同一般的成員函數(shù)一樣,因此在需要時(shí)也可以顯式地調(diào)用相應(yīng)的構(gòu)造函數(shù)?!纠?.4】編寫(xiě)一程序,用于說(shuō)明顯式調(diào)用構(gòu)造函數(shù)的方法 #include class cXydata int x; int y;public: cXydata( int a, int b); /構(gòu)造函數(shù)的說(shuō)明 void clear( ) x = 0; y = 0; void disp( ) cout “x=” x “y=” y n; ;cXydata:cXydata(int a, int b) /構(gòu)造函數(shù)的定義 x = a; y = b; void main( ) cXydata dt1(100,200
17、); /隱式調(diào)用構(gòu)造函數(shù) dt1.disp( ); cXydata dt2 = cXydata(300,400); /顯式調(diào)用構(gòu)造函數(shù) dt2.disp( ); dt2.clear( ); /清除數(shù)據(jù)成員的值 dt2.disp( ); dt2 = cXydata(500,600); dt2.disp( ); 執(zhí)行結(jié)果:x=100 y=200 x=300 y=400 x=0 y=0 x=500 y=600說(shuō) 明 1 (1)構(gòu)造函數(shù)的顯式調(diào)用是在等號(hào)的后面直接給出構(gòu)造函數(shù)名及其參數(shù),其形式如下: cXydata dt2 = cXydata(300,400);說(shuō) 明 2 (2)一般來(lái)講,構(gòu)造函數(shù)的顯
18、式調(diào)用和隱式調(diào)用的效果是一樣的,通常使用隱式調(diào)用的方式比較多。4、構(gòu)造函數(shù)的重載 構(gòu)造函數(shù)同一般函數(shù)一樣,也可以進(jìn)行重載,也就是在一個(gè)類中可以定義多個(gè)重名的構(gòu)造函數(shù)。下面的例子給出了重載構(gòu)造函數(shù)的定義方式。【例6.5】編寫(xiě)一程序,用于說(shuō)明構(gòu)造函數(shù)的重載方法及其使用 #include class cXydata int x; int y; public: cXydata( ); /構(gòu)造函數(shù)1 cXydata( int a ); /構(gòu)造函數(shù)2 cXydata( int a, int b ); /構(gòu)造函數(shù)3 void clear( )x=0;y=0; void disp( ) cout “x=” x
19、 “y=” y n; ; cXydata:cXydata( ) x = 0; y = 0;cXydata:cXydata( int a ) x = a; y = 0; cXydata:cXydata( int a, int b) x = a; y = b; void main( ) cXydata dt1; cXydata dt2(100); cXydata dt3=200; cXydata dt4(300,400); cXydata dt5=cXydata(500,600); dt1.disp( ); dt2.disp( ); dt3.disp( ); dt4.disp( ); dt5.di
20、sp( );運(yùn)行結(jié)果:x=0 y=0 x=100 y=0 x=200 y=0 x=300 y=400 x=500 y=600 (1)當(dāng)需要調(diào)用具有一個(gè)參數(shù)的構(gòu)造函數(shù)時(shí),可以直接采用下面兩種方式中的任一個(gè): cXydata dt2(100); cXydata dt3=200; 說(shuō) 明 1 (2)當(dāng)需要調(diào)用無(wú)參數(shù)構(gòu)造函數(shù)時(shí),下面的寫(xiě)法是錯(cuò)誤的: cXydata dt1( ); 這是因?yàn)樯鲜龆x表示dt1是返回值類型為cXydata的函數(shù),而不是對(duì)象名,因此在定義時(shí)需要去掉括號(hào)。說(shuō) 明 2 (3)構(gòu)造函數(shù)的重載同一般函數(shù)的重載一樣,也需要滿足相應(yīng)的重載條件。 有了類的定義以后,函數(shù)的返回值也可以是所
21、定義的類的類型了。下面的例子將說(shuō)明當(dāng)函數(shù)的返回值為某個(gè)類類型時(shí)的用法。 說(shuō) 明 3【例6.6】編寫(xiě)一個(gè)程序,用于說(shuō)明當(dāng)函數(shù)的返回值為某個(gè)類類型時(shí)的用法。 #includeclass cXydata int x; int y; public: cXydata( ); /構(gòu)造函數(shù)1 cXydata( int a ); /構(gòu)造函數(shù)2 cXydata( int a, int b ); /構(gòu)造函數(shù)3void clear( )x=0;y=0;void disp( ) cout “x=” x “y=” y n; ;cXydata:cXydata( ) x = 0; y = 0;cXydata:cXydata
22、( int a ) x = a; y = 0; cXydata:cXydata( int a, int b) x = a; y = b;cXydata dt1( ) /定義全局函數(shù)dt1( ) cXydata a(800, 900); return a;void main( ) cXydata dt1( ); /函數(shù)說(shuō)明 cXydata dt2; dt2.disp( ) dt2=dt1( ); /函數(shù)調(diào)用 dt2.disp( );執(zhí)行結(jié)果:x=0 y=0 x=800 y=900 在程序設(shè)計(jì)過(guò)程中,一定要區(qū)分開(kāi)類的成員函數(shù)的定義和一般的全局函數(shù)的定義,特別是成員函數(shù)的外部定義形式與一般全局函數(shù)定
23、義的差別。說(shuō) 明:5、 缺省構(gòu)造函數(shù) 沒(méi)有參數(shù)的構(gòu)造函數(shù)被稱為缺省構(gòu)造函數(shù)。缺省構(gòu)造函數(shù)的說(shuō)明如下所示: cXydata( ); 所有參數(shù)都可以省略的構(gòu)造函數(shù)也可以成為缺省構(gòu)造函數(shù)。例如: cXydata dt1; 此時(shí),若以無(wú)參形式來(lái)生成對(duì)象時(shí),上面兩個(gè)構(gòu)造函數(shù)都將充當(dāng)缺省構(gòu)造函數(shù)的角色,因此,上述兩種形式的構(gòu)造函數(shù)是不能同時(shí)存在的。以下面的形式來(lái)定義對(duì)象時(shí),將自動(dòng)調(diào)用缺省構(gòu)造函數(shù):cXydata(int a=0);cXydata(int a=0, int b=0);說(shuō) 明 : 每一個(gè)類中都必須要有構(gòu)造函數(shù),如果程序中沒(méi)有定義構(gòu)造函數(shù),則系統(tǒng)將自動(dòng)生成一個(gè)缺省構(gòu)造函數(shù),在此缺省構(gòu)造函數(shù)中將為
24、每個(gè)數(shù)據(jù)成員設(shè)置一個(gè)隨機(jī)數(shù)。因此,為了使每個(gè)對(duì)象中的數(shù)據(jù)成員都能夠在定義時(shí)有一個(gè)有意義的值,在程序中應(yīng)該定義構(gòu)造函數(shù)。需要注意的是,如果一個(gè)類中已經(jīng)定義了構(gòu)造函數(shù),則無(wú)論該構(gòu)造函數(shù)是不是缺省構(gòu)造函數(shù),系統(tǒng)都不會(huì)再生成一個(gè)缺省構(gòu)造函數(shù)。6.4.2 析構(gòu)函數(shù) 由上述可知,構(gòu)造函數(shù)是在定義類對(duì)象時(shí)被自動(dòng)調(diào)用的成員函數(shù),而析構(gòu)函數(shù)則是在已生成的對(duì)象被釋放時(shí)自動(dòng)調(diào)用的成員函數(shù)。析構(gòu)函數(shù)主要用于對(duì)已釋放的對(duì)象進(jìn)行一些后處理,同構(gòu)造函數(shù)不同,析構(gòu)函數(shù)不是必須的,一般的類都不需要定義析構(gòu)函數(shù)。析構(gòu)函數(shù)的作用 析構(gòu)函數(shù)主要用于對(duì)已申請(qǐng)的內(nèi)存空間進(jìn)行釋放等后處理工作。析構(gòu)函數(shù)有如下一些特征(1)析構(gòu)函數(shù)的名字是在
25、類名前加上“”符號(hào)。(2)析構(gòu)函數(shù)沒(méi)有返回值,因此,析構(gòu)函數(shù)沒(méi)有類型說(shuō)明。(3)析構(gòu)函數(shù)沒(méi)有參數(shù)。【例6.7】編一程序,用于說(shuō)明析構(gòu)函數(shù)的定義和使用#include #include class cMystring char *text; public: cMystring(char *str); /構(gòu)造函數(shù) void disp( ) cout “text=” text n; cMystring( ); /析構(gòu)函數(shù); cMystring:cMystring(char *str) /構(gòu)造函數(shù)的定義 cout str “constructorn”; text = new charstrlen(st
26、r)+1; strcpy( text, str );cMystring:cMystring( ) /析構(gòu)函數(shù)的定義 cout text “destructorn”; delete text; void subfunc( ) cMystring ss1 = “ABCDE”; ss1.disp( );void main( ) subfunc( ); cMystring ss2( “12345” ); ss2.disp( );執(zhí)行結(jié)果:ABCDE constructor /ss1對(duì)象定義時(shí)text=ABCDEABCDE destructor /離開(kāi)subfunc( )函數(shù)時(shí)12345 constru
27、ctor /ss2對(duì)象定義時(shí)text=12345 12345 destructor /main( )函數(shù)執(zhí)行完了時(shí)說(shuō) 明 1 (1)在main( )函數(shù)中,subfunc( )函數(shù)調(diào)用結(jié)束時(shí),其中定義的自動(dòng)類的ss1對(duì)象就要被釋放掉,這時(shí)就將自動(dòng)調(diào)用析構(gòu)函數(shù);同時(shí),由于ss2對(duì)象是在main( )函數(shù)中生成的,因此,在main( )函數(shù)執(zhí)行結(jié)束時(shí)(也就是整個(gè)程序執(zhí)行結(jié)束時(shí)),也將自動(dòng)調(diào)用析構(gòu)函數(shù),以便釋放已申請(qǐng)到的內(nèi)存空間。 說(shuō) 明 2 (2)在此程序中,如果沒(méi)有析構(gòu)函數(shù),則在對(duì)象中定義的char *text; 這樣的指針變量是可以被自動(dòng)釋放掉的,但動(dòng)態(tài)申請(qǐng)到的內(nèi)存空間就不能被自動(dòng)釋放掉了,這
28、樣,其它程序能夠使用的內(nèi)存空間就將減少。因此,當(dāng)在程序中需要申請(qǐng)動(dòng)態(tài)存儲(chǔ)空間時(shí),往往需要定義析構(gòu)函數(shù),以便在析構(gòu)函數(shù)中釋放掉申請(qǐng)到的內(nèi)存空間。6.5 復(fù)制構(gòu)造函數(shù) 6.5.1 復(fù)制構(gòu)造函數(shù)的說(shuō)明和定義(1)復(fù)制構(gòu)造函數(shù)又被稱為拷貝構(gòu)造函數(shù)。(2)當(dāng)定義對(duì)象時(shí),若希望將已存在的對(duì)象的值 賦給該對(duì)象,則需要調(diào)用復(fù)制構(gòu)造函數(shù)。(3)在復(fù)制構(gòu)造函數(shù)中,通過(guò)賦值語(yǔ)句將作為入 口參數(shù)的對(duì)象中的數(shù)據(jù)成員的值賦給當(dāng)前對(duì) 象的對(duì)應(yīng)數(shù)據(jù)成員中,進(jìn)而達(dá)到對(duì)象復(fù)制的 目的。(4)在定義復(fù)制構(gòu)造函數(shù)時(shí),一般是將同一個(gè)類 的對(duì)象引用作為其參數(shù)。【例6.8】 編一函數(shù),用于說(shuō)明復(fù)制構(gòu)造函數(shù)的定義和使用 #include c
29、lass cXydata int x; int y;public: cXydata( ); /構(gòu)造函數(shù)1 cXydata(int a); /構(gòu)造函數(shù)2 cXydata(int a, int b); /構(gòu)造函數(shù)3 cXydata(const cXydata &another); /復(fù)制構(gòu)造函數(shù) void clear ( ) x=0; y=0; void disp( )cout“x=”x“y=”yn;cXydata:cXydata( ) x=0; y=0; cXydata:cXydata(int a) x=a; y=0;cXydata:cXydata(int a,int b) x=a; y=b;c
30、Xydata:cXydata(const cXydata &another) x=another.x; y=another.y;void main( ) cXydata dt1(100, 200); cXydata dt2(dt1); cXydata dat3=dt1; dt1.disp( ); dt2.disp( ); dt3.disp( );執(zhí)行結(jié)果: x=100 y=200 x=100 y=200 x=100 y=200說(shuō) 明 1 (1)復(fù)制構(gòu)造函數(shù)的特點(diǎn)是其入口參數(shù)為當(dāng)前類的對(duì)象,一般把其說(shuō)明為對(duì)象引用。說(shuō) 明 2 (2)當(dāng)復(fù)制構(gòu)造函數(shù)只有一個(gè)參數(shù)時(shí),可以采用如下兩種方式來(lái)調(diào)用復(fù)制構(gòu)造
31、函數(shù): 其作用都是通過(guò)自動(dòng)調(diào)用復(fù)制構(gòu)造函數(shù),將dt1對(duì)象中的數(shù)據(jù)成員的值賦給新定義的對(duì)象(dt2或dt3)中的對(duì)應(yīng)的數(shù)據(jù)成員。cXydata dt2(dt1); 或 cXydata dt3=dt1;6.5.2 缺省復(fù)制構(gòu)造函數(shù) 對(duì)于一個(gè)類來(lái)講,復(fù)制構(gòu)造函數(shù)是必須的。如果程序中沒(méi)有定義復(fù)制構(gòu)造函數(shù),則系統(tǒng)將自動(dòng)生成一個(gè)缺省的復(fù)制構(gòu)造函數(shù),這樣,在上面的例子中,即使沒(méi)有定義復(fù)制構(gòu)造函數(shù),程序也能正常執(zhí)行。注意事項(xiàng) 缺省復(fù)制構(gòu)造函數(shù)的工作方式是:將對(duì)象的值原原本本地進(jìn)行拷貝,這樣,如果用戶希望在進(jìn)行對(duì)象拷貝的同時(shí)附加一些其它功能,或者在被拷貝的對(duì)象中包含指針變量,這時(shí),一般來(lái)講就必須要自己在程序中定
32、義相應(yīng)的復(fù)制構(gòu)造函數(shù)了,而不能直接利用由系統(tǒng)定義的缺省復(fù)制構(gòu)造函數(shù)了。 cXydata:cXydata( ) x=0; y=0; cXydata:cXydata(int a) x=a; y=0; 【例6.9】 編一程序,用于說(shuō)明附加一些功能的復(fù)制構(gòu)造函數(shù)的定義和使用 #include class cXydata int x; int y;public: cXydata( ); cXydata( int a); cXydata( int a, int b); cXydata(const cXydata &another, int n=1); void clear( ) x=0; y=0; voi
33、d disp( ) cout “x=” x “y=” y n; ; cXydata:cXydata(int a, int b) x=a; y=b; cXydata:cXydata(const cXydata &another, int n) if(n1) n=1; x=another.x*n; y=another.y*n; void main( ) cXydata dt1(100,200); cXydata dt2(dt1); /相當(dāng)于n=1 cXydata dt3(dt1,3); /復(fù)制dt1對(duì)象中的3倍的值 dt1.disp( ); dt2.disp( ); dt3.disp( ); 執(zhí)行
34、結(jié)果:x=100 y=200 x=100 y=200 x=300 y=600程 序說(shuō) 明 1 一般的復(fù)制構(gòu)造函數(shù)只有一個(gè)參數(shù),即同一個(gè)類的引用變量,但本程序中的復(fù)制構(gòu)造函數(shù)卻有兩個(gè)參數(shù),這是允許的。由于第二個(gè)參數(shù)是缺省參數(shù),因此,可以利用如下兩種形式來(lái)調(diào)用復(fù)制構(gòu)造函數(shù): cXydata dt2(dt1); /相當(dāng)于n=1cXydata dt3(dt1,3); /相當(dāng)于n=3 或程 序說(shuō) 明 2 當(dāng)一個(gè)類中包含指針變量時(shí),這時(shí)如果利用缺省復(fù)制構(gòu)造函數(shù)來(lái)復(fù)制對(duì)象的話,由于缺省復(fù)制構(gòu)造函數(shù)僅僅是將指針變量中的地址(指針值),復(fù)制到另一個(gè)對(duì)象中去,這樣,兩個(gè)對(duì)象中的指針值都是相同的,即它們都指向同一存
35、儲(chǔ)區(qū)域,這在多數(shù)情況下是不方便的。為了使它們分別指向不同的存儲(chǔ)區(qū)域,就必須在程序中來(lái)定義復(fù)制構(gòu)造函數(shù)。 【例6.10】編一程序,用于說(shuō)明類中包含指針變量時(shí)復(fù)制構(gòu)造函數(shù)的定義和使用 運(yùn)行結(jié)果:abcdabcd#include#includeclass cString char *s; public: cString(void); cString(const char*); cString(const cString &); void print(void) printf( “%sn”, s );cString:cString(void) /構(gòu)造函數(shù)1 s=new char1; *s=0;cStr
36、ing:cString(const char *x)/構(gòu)造函數(shù)2 s=new charstrlen(x)+1; strcpy(s,x);cString:cString(const cString & x) /構(gòu)造函數(shù)3 s=new charstrlen(x.s)+1; strcpy(s,x.s);void main( ) cString x(“abcd”); /調(diào)用一般構(gòu)造函數(shù) cString y=x; /調(diào)用復(fù)制構(gòu)造函數(shù) x.print( ); y.print( );程序說(shuō)明 本程序中定義了3個(gè)構(gòu)造函數(shù),其中的復(fù)制構(gòu)造函數(shù)用于將入口參數(shù)(對(duì)象)中的字符串復(fù)制到當(dāng)前對(duì)象中的字符串成員中,這一操
37、作的結(jié)果使得入口參數(shù)對(duì)象中的字符串與當(dāng)前對(duì)象中的字符串分別占用不同的存儲(chǔ)區(qū)域。注意事項(xiàng)需要注意的是,在此程序中即使不定義復(fù)制構(gòu)造函數(shù),系統(tǒng)也將自動(dòng)生成一個(gè)缺省復(fù)制構(gòu)造函數(shù),但由缺省構(gòu)造函數(shù)所完成的操作將使得入口參數(shù)中的字符串與當(dāng)前對(duì)象中的字符串占用同樣的存儲(chǔ)空間,這也就是說(shuō)如果改變了其中任何一個(gè)對(duì)象中的字符串,則另一個(gè)對(duì)象中的字符串也將隨之改變。下面的程序說(shuō)明了當(dāng)類中定義了復(fù)制構(gòu)造函數(shù)時(shí),即使類中存在指針變量,由于分別指向不同的地址,因此相互之間也沒(méi)有影響。下面的程序說(shuō)明了當(dāng)類中沒(méi)有定義復(fù)制構(gòu)造函數(shù)而是利用缺省復(fù)制構(gòu)造函數(shù)時(shí),如果類中存在指針變量,則由于都指向相同的地址,因此相互之間將產(chǎn)生影響
38、。#include#includeclass cString char *s; public: cString(void); cString(const char*); cString(const cString &); void print(void) printf( %sn, s ); void strcon(char *p);void cString:strcon(char *p)strcat(s,p); /將p連接到s上cString:cString(void) /構(gòu)造函數(shù)1 s=new char1; *s=0;cString:cString(const char *x) s=new
39、charstrlen(x)+1; strcpy(s,x);cString:cString(const cString & x) s=new charstrlen(x.s)+1; strcpy(s,x.s);void main( ) cString x(abcd); cString y=x; x.print( ); y.print( ); y.strcon(mmm); x.print( ); y.print( );運(yùn)行結(jié)果:abcdabcdabcdabcdmmm程序#include#includeclass cString char *s; public: cString(void); cStr
40、ing(const char*); /cString(const cString &);/去掉 void print(void) printf( %sn, s ); void strcon(char *p);void cString:strcon(char *p)strcat(s,p); /將p連接到s上cString:cString(void) /構(gòu)造函數(shù)1 s=new char1; *s=0;程序cString:cString(const char *x) s=new charstrlen(x)+1; strcpy(s,x);/cString:cString(const cString &
41、 x)/ s=new charstrlen(x.s)+1;/ strcpy(s,x.s);/void main( ) cString x(abcd); cString y=x; x.print( ); y.print( ); y.strcon(mmm); x.print( ); y.print( );運(yùn)行結(jié)果:abcdabcdabcdmmmabcdmmm注意:無(wú)論在類中是否定義了復(fù)制構(gòu)造函數(shù),帶有一個(gè)參數(shù)的缺省復(fù)制構(gòu)造函數(shù)總是存在的。在下面的程序中,盡管base類中沒(méi)有定義base(base &a)這樣帶有一個(gè)參數(shù)的構(gòu)造函數(shù),系統(tǒng)會(huì)自動(dòng)添加一個(gè)這樣的復(fù)制構(gòu)造函數(shù),這樣main( )函數(shù)中的定義
42、是正確的。class base int x; public: base(base &a, int n) x=a.x*n;void main( ) base a; base b(a);/正確 base c(b,2)/正確 *復(fù)制構(gòu)造函數(shù)的進(jìn)一步說(shuō)明 #include iostream.h class xyz int x; int y; int z; public: xyz(int a, int b, int c) x=a; y=b; z=c; xyz(xyz &m) x=m.x; y=m.y;z=m.z; cout Entering copy constructor.n; int getx( )
43、 return x; int gety( ) return y; int getz( ) return z; ;void main( ) xyz a(10,20,30); cout a.getx( ) a.gety( ) a.getz( ) n; xyz b(a); /調(diào)用復(fù)制構(gòu)造函數(shù) cout b.getx( ) b.gety( ) b.getz( ) n;此程序的執(zhí)行結(jié)果如下: 10 20 30 Entering copy constructor. 10 20 30以下3種情況都要調(diào)用復(fù)制構(gòu)造函數(shù):(1)當(dāng)利用類的已有對(duì)象來(lái)初始化另一個(gè)新對(duì)象時(shí),系統(tǒng)將自動(dòng)調(diào)用復(fù)制構(gòu)造函數(shù)(2)如果函數(shù)的形
44、參是類對(duì)象,則在進(jìn)行函數(shù)調(diào)用時(shí)(將實(shí)參傳遞給形參時(shí)),將自動(dòng)調(diào)用復(fù)制構(gòu)造函數(shù)void f(xyz m) cout f: m.getx( ) m.gety( ) m.getz( ) n;void main( ) xyz a(1, 2, 3); f(a);此程序的執(zhí)行結(jié)果如下: Entering copy constructor. f: 1 2 3由此可見(jiàn),如果復(fù)制構(gòu)造函數(shù)的參數(shù)不是對(duì)象引用而是對(duì)象本身,則將出現(xiàn)運(yùn)行錯(cuò)誤,這是由于將對(duì)象傳遞給復(fù)制構(gòu)造函數(shù)時(shí)還需要調(diào)用復(fù)制構(gòu)造函數(shù),這就產(chǎn)生無(wú)限循環(huán)調(diào)用. 需要注意的是,如果函數(shù)的形參是類對(duì)象的指針或?qū)ο笠?則在函數(shù)調(diào)用時(shí)并不調(diào)用復(fù)制構(gòu)造函數(shù)void
45、 f(xyz &m) cout f: m.getx( ) m.gety( ) m.getz( ) n;這時(shí),程序的運(yùn)行結(jié)果如下: f: 1 2 3(3)如果函數(shù)的返回值是類對(duì)象,則在執(zhí)行返回語(yǔ)句時(shí)將自動(dòng)調(diào)用復(fù)制構(gòu)造函數(shù)(返回類指針和引用時(shí)不調(diào)用復(fù)制構(gòu)造函數(shù)) xyz g( ) xyz m(7, 8, 9); cout g: m.getx( ) m.gety( ) m.getz( ) n; return m; void main( ) xyz n(1, 2, 3); cout n.getx( ) n.gety( ) n.getz( ) n; n=g( ); cout n.getx( ) n.ge
46、ty( ) n.getz( ) n; 此程序的執(zhí)行結(jié)果如下: 1 2 3 g: 7 8 9 Entering copy constructor. 7 8 96.6 變換構(gòu)造函數(shù)和變換函數(shù) 6.6.1 變換構(gòu)造函數(shù) 只有一個(gè)參數(shù)的構(gòu)造函數(shù)被稱為變換構(gòu)造函數(shù)或轉(zhuǎn)換構(gòu)造函數(shù)。例如: cXydata:cXydata(int a) x=a; y=0; 程序中如果定義了變換構(gòu)造函數(shù),就可以使用下面的形式來(lái)對(duì)類的對(duì)象進(jìn)行初始化: cXydata dt1(100);這種初始化方式和下面初始化方式完全一樣:dt1.x=100dt1.y=0它的初始化結(jié)果如下:cXydata dt1=100;就上面的例子而言,它相
47、當(dāng)于如下的變換: cXydata型 int 型 由于變換構(gòu)造函數(shù)在初始化方面的簡(jiǎn)潔性,使其在實(shí)際程序設(shè)計(jì)中經(jīng)常被用到。變換構(gòu)造函數(shù)6.6.2 變換函數(shù)變換函數(shù)用于將對(duì)象中的一個(gè)值返回出來(lái)。 operator 變換的類型( ) return返回值; 變換函數(shù)采用如下定義形式:【例6.11】編一程序,用于說(shuō)明變換函數(shù)的定義和使用 #include class cAdata int a; public: cAdata(int x) a=x; /變換構(gòu)造函數(shù) operator int( ) return a; /變換函數(shù) void disp( ) cout “a=” a n; ; void main(
48、 ) cAdata dt=1234; /調(diào)用變換構(gòu)造函數(shù) int idt=dt; /調(diào)用變換函數(shù) dt.disp( ); cout “idt=” idt n; 執(zhí)行結(jié)果:a=1234idt=1234說(shuō) 明 (1)程序中定義了某種類型的變換函數(shù)之后,就可以使用語(yǔ)句 來(lái)調(diào)用變換函數(shù)。 (2)如果沒(méi)有定義變換函數(shù),則上述寫(xiě)法是錯(cuò)誤的。int idt=dt; 一般來(lái)講,變換函數(shù)都是直接從類中返回某一個(gè)變量的值,但這不是絕對(duì)的,在變換函數(shù)中也允許做一些簡(jiǎn)單的運(yùn)算,并把運(yùn)算結(jié)果返回出來(lái)。 cXydata:cXydata(const cXydata &another, int n) if( n1 ) n=1
49、; x=another.x*n; y=another.y*n; void main( ) cXydata dt1(1234,5678); long ldt; dt1.disp( ); ldt=dt1; cout “l(fā)dt=” ldt n; cout “(long)dt1=” (long)dt1 n;【例6.12】編一程序,在變換函數(shù)中進(jìn)行一些簡(jiǎn)單的運(yùn)算,并把運(yùn)算結(jié)果返回出來(lái)。 #include class cXydata int x; int y;public: cXydata( ) x=0; y=0; cXydata (int a) x=a; y=0; cXydata(int a,int b
50、) x=a; y=b; cXydata(const cXydata &another, int n=1); operator long( )return(x*10000+y); void clear( ) x=0; y=0; void disp( ) cout “x=” x “y=” y n;執(zhí)行結(jié)果:x=1234 y=5678ldt=12345678(long)dt1=12345678說(shuō) 明 在程序中對(duì)變換函數(shù)的利用方式是非常靈活的。一般來(lái)講,如果在cXydata類中有如下的變換函數(shù)定義:operator long( ) 變換函數(shù)主要用于返回類中的數(shù)據(jù)成員,但變換函數(shù)本身也可以定義變量并可以
51、包含多個(gè)語(yǔ)句,也可以對(duì)數(shù)據(jù)成員進(jìn)行更改。需要注意的是,變換函數(shù)中必須包含return語(yǔ)句,同時(shí)需要注意其訪問(wèn)權(quán)限。 cXydata dt1(100,200); long ldt; ldt=dt1; /默認(rèn)的long型變換 ldt=long(dt1); /函數(shù)型的顯式變換 ldt=(long)dt1; /強(qiáng)制型的顯式變換 cout (long)dt1 10000 ) /強(qiáng)制變換后進(jìn)行比較下面的利用方法都是正確的:6.7 靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù) (1)在C+語(yǔ)言中,每定義一個(gè)對(duì)象就為該對(duì)象分配了獨(dú)立的存儲(chǔ)空間,對(duì)象不同其存儲(chǔ)空間是不同。(2)對(duì)于某些類來(lái)講,往往有一些特定的數(shù)據(jù)成員的值是固定不
52、變的,或者說(shuō)對(duì)該類的所有對(duì)象都是一樣的,它們并不是與某一個(gè)對(duì)象有關(guān),而是與該類的所有對(duì)象有關(guān)。這種數(shù)據(jù)成員就可以被定義為靜態(tài)的。(3)類中的成員函數(shù)也可以被定義為靜態(tài)的,當(dāng)某個(gè)成員函數(shù)被定義為靜態(tài)時(shí),該成員函數(shù)就不再與某個(gè)具體的對(duì)象相聯(lián)系,它是屬于類的。 (1)在類中的數(shù)據(jù)成員和成員函數(shù)的前面加上static關(guān)鍵字即可(2)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)并不是每生成一個(gè)對(duì)象就產(chǎn)生其一個(gè)拷貝,而是所有對(duì)象共用一個(gè)。靜態(tài)成員的定義方法(3)靜態(tài)數(shù)據(jù)成員主要用于設(shè)定對(duì)所有對(duì)象都共享的數(shù)據(jù)。(4)設(shè)置靜態(tài)成員函數(shù)的目的是為了提高內(nèi)存的利用效率,因?yàn)閷?duì)所有對(duì)象都共享一份代碼。(5)由于不將this指針傳遞給
53、靜態(tài)成員函數(shù),所以靜態(tài)成員函數(shù)不能對(duì)一般的數(shù)據(jù)成員進(jìn)行操作,通常,它只用于對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行處理。 在類的定義中,下面的寫(xiě)法用于說(shuō)明一個(gè)靜態(tài)數(shù)據(jù)成員ct和靜態(tài)成員函數(shù)count( ): class cVdata static int ct; static int count( ) ; 需要說(shuō)明的是這僅僅是說(shuō)明而已,系統(tǒng)并沒(méi)有為ct分配任何存儲(chǔ)空間,而ct的實(shí)體應(yīng)該在類的外面以下列方式進(jìn)行定義(可以在定義的同時(shí)進(jìn)行初始化):int cVdata:ct=0;注:上述語(yǔ)句必須在cVdata類的定義的后面給出。如果在前面給出的話,將因找不到cVdata類的定義而出錯(cuò)。 靜態(tài)成員函數(shù)既可以通過(guò)已生成的對(duì)
54、象來(lái)調(diào)用,又可以利用作用域限定運(yùn)算符以下列方式來(lái)調(diào)用(這里假設(shè)count是cVdata類中的靜態(tài)成員函數(shù)) n=cVdata:count( );【例6.13】編一程序,用于說(shuō)明靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的定義和使用 #include#includeclass cVdata int v; static int ct; public: cVdata( ) v=0; +ct; void setdata(int dt) v=dt; int getdata( ) return v; static int count( ) return ct; cVdata( ) -ct;int cVdata:ct=0;
55、void subprg( ) cVdata dt3; cout “cVdata objects count=” dt3.count( ) n; void main( ) cVdata dt1; cout “cVdata objects count=” dt1.count( ) n; cVdata *dt2=new cVdata; cout “cVdata objects count=” dt1.count( ) n; cout “cVdata objects count=” count( ) n; cout “cVdata objects count=” cVdata:count( ) n;
56、subprg( ); delete dt2; /調(diào)用析構(gòu)函數(shù) cout “cVdata objecs count=” dt1.count( ) n;執(zhí)行結(jié)果:cVdata objects count=1cVdata objects count=2cVdata objects count=2cVdata objects count=2cVdata objects count=3cVdata objects count=1說(shuō) 明 (1)對(duì)于靜態(tài)數(shù)據(jù)成員可以利用如下兩種方式來(lái)進(jìn)行訪問(wèn): 需要注意的是,在利用靜態(tài)數(shù)據(jù)成員時(shí),也需要注意其訪問(wèn)控制權(quán)限。 cVdata:ct=100; /利用類名訪問(wèn) dt
57、1.ct=100; /利用對(duì)象來(lái)進(jìn)行訪問(wèn)說(shuō)明(2)靜態(tài)成員函數(shù)只能直接訪問(wèn)該類的靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。若要訪問(wèn)非靜態(tài)數(shù)據(jù)成員則必須通過(guò)對(duì)象來(lái)訪問(wèn)。例如:class A public: static void f(A a); private: int x;void A:f(A a) cout x; /出錯(cuò) cout a.x; /正確(3)需要注意的是,構(gòu)造函數(shù)和析構(gòu)函數(shù)不能定義為靜態(tài)的。6.8this指針(1)所謂this指針,就是指向當(dāng)前對(duì)象的指針。 (2)成員函數(shù)無(wú)論是內(nèi)部定義還是外部定義,系統(tǒng)都自動(dòng)將指向當(dāng)前對(duì)象的this指針傳遞給成員函數(shù)?!纠?.14】編一程序,用于說(shuō)明this指
58、針的用法。 #include class cExam int va; int vb; public: cExam(int a, int b) va=a; vb=b; void disp( ); ; void cExam:disp( ) cout “va=” va n; cout “vb=” vb n; void main( ) cExam e(10,20); e.disp( ); 執(zhí)行結(jié)果:va=10vb=20說(shuō) 明: 在調(diào)用成員函數(shù)時(shí),系統(tǒng)自動(dòng)將this指針傳遞給成員函數(shù),this指針中存放的是當(dāng)前對(duì)象的地址。 為了明確起見(jiàn),上面的disp( )函數(shù)也可以改為如下形式: void cExam
59、:disp( ) cout“va=”van; cout“vb=”vbn; 如果在main( )函數(shù)內(nèi)有如下語(yǔ)句: 則表示將指向temp對(duì)象的this指針傳遞給disp( )函數(shù),這樣,在disp( )函數(shù)中就可以直接對(duì)temp對(duì)象中的數(shù)據(jù)成員進(jìn)行訪問(wèn)了。cExam temp(10,20)temp.disp( ); 盡管this指針一般都是缺省使用的,但在需要時(shí),也可以顯式地使用this指針。下面的例子將給出this指針的顯式使用方法。 說(shuō) 明【例6.15】編一程序,用于說(shuō)明this指針的顯式用法。 #includeclass cSmp int va; int vb; public: cSmp(
60、int a, int b) va=a; vb=b; int comp(cSmp &some); int get_a( ) return va; int get_b( ) return vb; ; int cSmp:comp(cSmp &some) if ( &some=this) /some是變量的別名,不是地址 return 0; /相等 if (va+vbsome.va+some.vb) return 1; /大于 else if (va+vb some.va+some.vb) return 1; /小于 else return 0; /相等 void main( ) cSmp dt1(1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)項(xiàng)目開(kāi)發(fā)內(nèi)部承包合同范本4篇
- 二零二五年度房地產(chǎn)企業(yè)員工勞動(dòng)合同示范范本
- 二零二五年度醫(yī)療機(jī)構(gòu)人員派遣及管理合同3篇
- 二零二五版模具修復(fù)與性能提升合同3篇
- 二零二四年度校園食堂特色美食開(kāi)發(fā)與承包經(jīng)營(yíng)合同3篇
- 二零二五年市中心區(qū)域照明系統(tǒng)智能化升級(jí)合同4篇
- 2025版農(nóng)業(yè)種養(yǎng)殖質(zhì)量安全追溯合作合同范本3篇
- 2025版山林租賃合同樣本:森林資源租賃與生態(tài)保護(hù)合作合同3篇
- 二零二五年度建筑模板腳手架安全防護(hù)設(shè)施供應(yīng)合同規(guī)范4篇
- 二零二五年度天津二手房交易合同范本(專業(yè)版)
- 蛋糕店服務(wù)員勞動(dòng)合同
- 土地買賣合同參考模板
- 2025高考數(shù)學(xué)二輪復(fù)習(xí)-專題一-微專題10-同構(gòu)函數(shù)問(wèn)題-專項(xiàng)訓(xùn)練【含答案】
- 新能源行業(yè)市場(chǎng)分析報(bào)告
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 巖土工程勘察.課件
- 60歲以上務(wù)工免責(zé)協(xié)議書(shū)
- 康復(fù)醫(yī)院患者隱私保護(hù)管理制度
- 2022年7月2日江蘇事業(yè)單位統(tǒng)考《綜合知識(shí)和能力素質(zhì)》(管理崗)
- 沈陽(yáng)理工大學(xué)《數(shù)》2022-2023學(xué)年第一學(xué)期期末試卷
- 初一英語(yǔ)語(yǔ)法練習(xí)
評(píng)論
0/150
提交評(píng)論