Cprime復(fù)制控制復(fù)制構(gòu)造函數(shù)賦值控制_第1頁(yè)
Cprime復(fù)制控制復(fù)制構(gòu)造函數(shù)賦值控制_第2頁(yè)
Cprime復(fù)制控制復(fù)制構(gòu)造函數(shù)賦值控制_第3頁(yè)
Cprime復(fù)制控制復(fù)制構(gòu)造函數(shù)賦值控制_第4頁(yè)
Cprime復(fù)制控制復(fù)制構(gòu)造函數(shù)賦值控制_第5頁(yè)
已閱讀5頁(yè),還剩13頁(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、.C prime 復(fù)制控制 復(fù)制構(gòu)造函數(shù),賦值控制,復(fù)制控制當(dāng)定義一個(gè)新類型的時(shí)候,需要顯式或隱式地指定復(fù)制、賦值和撤銷該類型的對(duì)象時(shí)會(huì)發(fā)生什么這是通過定義特殊成員:復(fù)制構(gòu)造函數(shù)、賦值操作符和析構(gòu)函數(shù)來到達(dá)的。假設(shè)沒有顯式定義復(fù)制構(gòu)造函數(shù)或賦值操作符,編譯器通常會(huì)為我們定義。復(fù)制構(gòu)造函數(shù)是一種特殊構(gòu)造函數(shù),具有單個(gè)形參,該形參常用 const 修飾是對(duì)該類類型的引用。當(dāng)定義一個(gè)新對(duì)象并用一個(gè)同類型的對(duì)象對(duì)它進(jìn)展初始化時(shí),將顯式使用復(fù)制構(gòu)造函數(shù)。當(dāng)將該類型的對(duì)象傳遞給函數(shù)或函數(shù)返回該類型的對(duì)象時(shí),將隱式使用復(fù)制構(gòu)造函數(shù)。不管類是否認(rèn)義了自己的析構(gòu)函數(shù),編譯器都自動(dòng)執(zhí)行類中非&

2、#160;static 數(shù)據(jù)成員的析構(gòu)函數(shù)。在下一章我們將進(jìn)一步學(xué)習(xí)操作符重載,本章中我們先介紹賦值操作符。與構(gòu)造函數(shù)一樣,賦值操作符可以通過指定不同類型的右操作數(shù)而重載。右操作數(shù)為類類型的版本比較特殊:假設(shè)我們沒有編寫這種版本,編譯器將為我們合成一個(gè)。復(fù)制構(gòu)造函數(shù)、賦值操作符和析構(gòu)函數(shù)總稱為復(fù)制控制。編譯器自動(dòng)實(shí)現(xiàn)這些操作,但類也可以定義自己的版本。通常,編譯器合成的復(fù)制控制函數(shù)是非常精練的它們只做必需的工作。但對(duì)某些類而言,依賴于默認(rèn)定義會(huì)導(dǎo)致災(zāi)難。實(shí)現(xiàn)復(fù)制控制操作最困難的部分,往往在于識(shí)別何時(shí)需要覆蓋默認(rèn)版本。有一種特別常見的情況需要類定義自己的復(fù)制控制成員的:類具有指針成員。

3、復(fù)制構(gòu)造函數(shù)只有單個(gè)形參,而且該形參是對(duì)本類類型對(duì)象的引用常用 const 修飾,這樣的構(gòu)造函數(shù)稱為復(fù)制構(gòu)造函數(shù)。與默認(rèn)構(gòu)造函數(shù)一樣,復(fù)制構(gòu)造函數(shù)可由編譯器隱式調(diào)用。復(fù)制構(gòu)造函數(shù)可用于:根據(jù)另一個(gè)同類型的對(duì)象顯式或隱式初始化一個(gè)對(duì)象。復(fù)制一個(gè)對(duì)象,將它作為實(shí)參傳給一個(gè)函數(shù)。從函數(shù)返回時(shí)復(fù)制一個(gè)對(duì)象。初始化順序容器中的元素。根據(jù)元素初始化式列表初始化數(shù)組元素。當(dāng)用于類類型對(duì)象時(shí),初始化的復(fù)制形式和直接形式有所不同:直接初始化直接調(diào)用與實(shí)參匹配的構(gòu)造函數(shù),復(fù)制初始化總是調(diào)用復(fù)制構(gòu)造函數(shù)。復(fù)制初始化首先使用指定構(gòu)造函數(shù)創(chuàng)立一個(gè)臨時(shí)對(duì)象第 7.3.2 節(jié),然后用

4、復(fù)制構(gòu)造函數(shù)將那個(gè)臨時(shí)對(duì)象復(fù)制到正在創(chuàng)立的對(duì)象:     string null_book = "9-999-99999-9" / copy-initialization     string dots10, '.'               

5、;/ direct-initialization     string empty_copy = string;       / copy-initialization     string empty_direct;            

6、0;   / direct-initialization創(chuàng)立 dots 時(shí),調(diào)用參數(shù)為一個(gè)數(shù)量和一個(gè)字符的 string 構(gòu)造函數(shù)并直接初始化 dots 的成員。創(chuàng)立 null_book 時(shí),編譯器首先調(diào)用承受一個(gè) C 風(fēng)格字符串形參的 string 構(gòu)造函數(shù),創(chuàng)立一個(gè)臨時(shí)對(duì)象,然后,編譯器使用 string 復(fù)制構(gòu)造函數(shù)將 null_book 初始化為那個(gè)臨時(shí)對(duì)象的副本。empty_copy&#

7、160;和 empty_direct 的初始化都調(diào)用默認(rèn)構(gòu)造函數(shù)。對(duì)前者初始化時(shí),默認(rèn)構(gòu)造函數(shù)函數(shù)創(chuàng)立一個(gè)臨時(shí)對(duì)象,然后復(fù)制構(gòu)造函數(shù)用該對(duì)象初始化 empty_copy。對(duì)后者初始化時(shí),直接運(yùn)行 empty_direct 的默認(rèn)構(gòu)造函數(shù)。通常直接初始化和復(fù)制初始化僅在低級(jí)別上存在差異。然而,對(duì)于不支持復(fù)制的類型,或者使用非 explicit 構(gòu)造函數(shù)第 12.4.4 節(jié)的進(jìn)修,它們有本質(zhì)區(qū)別:     ifstream file1"fi

8、lename" / ok: direct initialization     ifstream file2 = "filename" / error: copy constructor is private     / This initialization is okay only&#

9、160;if     / the Sales_itemconst string& constructor is not explicit     Sales_item item = string"9-999-99999-9"file1 的初始化是正確的。ifstream 類定義了一個(gè)可用 C 風(fēng)格字符串調(diào)用的構(gòu)造函數(shù),使用該構(gòu)造函

10、數(shù)初始化 file1。看上去等效的 file2 初始化使用復(fù)制初始化,但該定義不正確。由于不能復(fù)制 IO 類型的對(duì)象第 8.1 節(jié),所以不能對(duì)那些類型的對(duì)象使用復(fù)制初始化。item 的初始化是否正確,取決于正在使用哪個(gè)版本的 Sales_item 類。某些版本將參數(shù)為一個(gè) string 的構(gòu)造函數(shù)定義為 explicit。假設(shè)構(gòu)造函數(shù)是顯式的,那么初始化失?。患僭O(shè)構(gòu)造函數(shù)不是顯式的,那么初始化成功。初始化容器元素復(fù)制構(gòu)造函數(shù)可用于初始化順序容器中的元素。例如,可以用

11、表示容量的單個(gè)形參來初始化容器第 3.3.1 節(jié)。容器的這種構(gòu)造方式使用默認(rèn)構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù):     / default string constructor and five string copy constructors invoked     vector<string> svec5;編譯器首先使用 string 默認(rèn)構(gòu)造函數(shù)創(chuàng)立

12、一個(gè)臨時(shí)值來初始化 svec,然后使用復(fù)制構(gòu)造函數(shù)將臨時(shí)值復(fù)制到 svec 的每個(gè)元素。構(gòu)造函數(shù)與數(shù)組元素假設(shè)沒有為類類型數(shù)組提供元素初始化式,那么將用默認(rèn)構(gòu)造函數(shù)初始化每個(gè)元素。然而,假設(shè)使用常規(guī)的花括號(hào)括住的數(shù)組初始化列表第 4.1.1 節(jié)來提供顯式元素初始化式,那么使用復(fù)制初始化來初始化每個(gè)元素。根據(jù)指定值創(chuàng)立適當(dāng)類型的元素,然后用復(fù)制構(gòu)造函數(shù)將該值復(fù)制到相應(yīng)元素:     Sales_item primer_eds =  string"0

13、-201-16487-6",                                 string"0-201-54848-8",        

14、60;                        string"0-201-82470-1",                    &

15、#160;            Sales_item                               如前三個(gè)元素的初始化式中所示可以直接指定一個(gè)值,用于調(diào)

16、用元素類型的單實(shí)參構(gòu)造函數(shù)。假設(shè)希望不指定實(shí)參或指定多個(gè)實(shí)參,就需要使用完好的構(gòu)造函數(shù)語(yǔ)法,正如最后一個(gè)元素的初始化那樣。合成的復(fù)制構(gòu)造函數(shù)假設(shè)我們沒有定義復(fù)制構(gòu)造函數(shù),編譯器就會(huì)為我們合成一個(gè)。與合成的默認(rèn)構(gòu)造函數(shù)第 12.4.3 節(jié)不同,即使我們定義了其他構(gòu)造函數(shù),也會(huì)合成復(fù)制構(gòu)造函數(shù)。合成復(fù)制構(gòu)造函數(shù)的行為是,執(zhí)行逐個(gè)成員初始化,將新對(duì)象初始化為原對(duì)象的副本。所謂“逐個(gè)成員,指的是編譯器將如今對(duì)象的每個(gè)非 static 成員,依次復(fù)制到正創(chuàng)立的對(duì)象。只有一個(gè)例外,每個(gè)成員摟類型決定了復(fù)制該成員的含義。合成復(fù)制構(gòu)造函數(shù)直接復(fù)制內(nèi)置類型成員的值,類類型

17、成員使用該類的復(fù)制構(gòu)造函數(shù)進(jìn)展復(fù)制。數(shù)組成員的復(fù)制是個(gè)例外。雖然一般不能復(fù)制數(shù)組,但假設(shè)一個(gè)類具有數(shù)組成員,那么合成復(fù)制構(gòu)造函數(shù)將復(fù)制數(shù)組。復(fù)制數(shù)組時(shí)合成復(fù)制構(gòu)造函數(shù)將復(fù)制數(shù)組的每一個(gè)元素。逐個(gè)成員初始化最簡(jiǎn)單的概念模型是,將合成復(fù)制構(gòu)造函數(shù)看作這樣一個(gè)構(gòu)造函數(shù):其中每個(gè)數(shù)據(jù)成員在構(gòu)造函數(shù)初始化列表中進(jìn)展初始化。例如,對(duì)于我們的 Sales_item 類,它有三個(gè)數(shù)據(jù)成員:     class Sales_item      / other

18、60;members and constructors as before     private:         std:string isbn;         int units_sold;         do

19、uble revenue;     合成復(fù)制構(gòu)造函數(shù)如下所示:     Sales_item:Sales_itemconst Sales_item &orig:         isbnorig.isbn,              

20、;/ uses string copy constructor         units_soldorig.units_sold,  / copies orig.units_sold         revenueorig.revenue        &#

21、160;/ copy orig.revenue                                     / empty body定義自己的復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)就是承受單個(gè)

22、類類型引用形參通常用 const 修飾的構(gòu)造函數(shù):     class Foo      public:        Foo;           / default constructor     

23、;   Fooconst Foo& / copy constructor        / .     雖然也可以定義承受非 const 引用的復(fù)制構(gòu)造函數(shù),但形參通常是一個(gè) const 引用。因?yàn)橛糜谙蚝瘮?shù)傳遞對(duì)象和從函數(shù)返回對(duì)象,該構(gòu)造函數(shù)一般不應(yīng)設(shè)置為 explicit第 12.4.4 節(jié)。復(fù)制構(gòu)造函數(shù)應(yīng)

24、將實(shí)參的成員復(fù)制到正在構(gòu)造的對(duì)象。對(duì)許多類而言,合成復(fù)制構(gòu)造函數(shù)只完成必要的工作。只包含類類型成員或內(nèi)置類型但不是指針類型成員的類,無(wú)須顯式地定義復(fù)制構(gòu)造函數(shù),也可以復(fù)制。通常,定義復(fù)制構(gòu)造函數(shù)最困難的部分在于認(rèn)識(shí)到需要復(fù)制構(gòu)造函數(shù)。只要能認(rèn)識(shí)到需要復(fù)制構(gòu)造函數(shù),定義構(gòu)造函數(shù)一般非常簡(jiǎn)單。復(fù)制構(gòu)造函數(shù)的定義與其他構(gòu)造函數(shù)一樣:它與類同名,沒有返回值,可以而且應(yīng)該使用構(gòu)造函數(shù)初始化列表初始化新創(chuàng)立對(duì)象的成員,可以在函數(shù)體中做任何其他必要工作。13.1.3. 制止復(fù)制有些類需要完全制止復(fù)制。例如,iostream 類就不允許復(fù)制第 8.1 節(jié)。假設(shè)想要制止復(fù)

25、制,似乎可以省略復(fù)制構(gòu)造函數(shù),然而,假設(shè)不定義復(fù)制構(gòu)造函數(shù),編譯器將合成一個(gè)。  為了防止復(fù)制,類必須顯式聲明其復(fù)制構(gòu)造函數(shù)為 private。假設(shè)復(fù)制構(gòu)造函數(shù)是私有的,將不允許用戶代碼復(fù)制該類類型的對(duì)象,編譯器將回絕任何進(jìn)展復(fù)制的嘗試。然而,類的友元和成員仍可以進(jìn)展復(fù)制。假設(shè)想要連友元和成員中的復(fù)制也制止,就可以聲明一個(gè)private復(fù)制構(gòu)造函數(shù)但不對(duì)其定義。聲明而不定義成員函數(shù)是合法的,但是,使用未定義成員的任何嘗試將導(dǎo)致鏈接失敗。通過聲明但不定義private 復(fù)制構(gòu)造函數(shù),可以制止任何復(fù)制類類型對(duì)象的嘗試:用戶代碼中復(fù)制嘗試將在編譯時(shí)標(biāo)記為錯(cuò)誤,

26、而成員函數(shù)和友元中的復(fù)制嘗試將在鏈接時(shí)導(dǎo)致錯(cuò)誤。不定義復(fù)制構(gòu)造函數(shù)和或默認(rèn)構(gòu)造函數(shù),會(huì)嚴(yán)重局限類的使用。不允許復(fù)制的類對(duì)象只能作為引用傳遞給函數(shù)或從函數(shù)返回,它們也不能用作容器的元素。一般來說,最好顯式或隱式定義默認(rèn)構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù)。只有不存在其他構(gòu)造函數(shù)時(shí)才合成默認(rèn)構(gòu)造函數(shù)。假設(shè)定義了復(fù)制構(gòu)造函數(shù),也必須定義默認(rèn)構(gòu)造函數(shù)。賦值操作符與類要控制初始化對(duì)象的方式一樣,類也定義了該類型對(duì)象賦值時(shí)會(huì)發(fā)生什么:     Sales_item trans, accum;     

27、trans = accum;與復(fù)制構(gòu)造函數(shù)一樣,假設(shè)類沒有定義自己的賦值操作符,那么編譯器會(huì)合成一個(gè)。介紹重載賦值像任何其他函數(shù)一樣,操作符函數(shù)有一個(gè)返回值和一個(gè)形參表。形參表必須具有與該操作符數(shù)目一樣的形參假設(shè)操作符是一個(gè)類成員,那么包括隱式 this 形參。賦值是二元運(yùn)算,所以該操作符函數(shù)有兩個(gè)形參:第一個(gè)形參對(duì)應(yīng)著左操作數(shù),第二個(gè)形參對(duì)應(yīng)右操作數(shù)。大多數(shù)操作符可以定義為成員函數(shù)或非成員函數(shù)。當(dāng)操作符為成員函數(shù)時(shí),它的第一個(gè)操作數(shù)隱式綁定到 this 指針。有些操作符包括賦值操作符必須是定義自己的類的成員。因?yàn)橘x值必須是類的成員,

28、所以 this 綁定到指向左操作數(shù)的指針。因此,賦值操作符承受單個(gè)形參,且該形參是同一類類型的對(duì)象。右操作數(shù)一般作為 const 引用傳遞。賦值操作符的返回類型應(yīng)該與內(nèi)置類型賦值運(yùn)算返回的類型一樣第 5.4.1 節(jié)。內(nèi)置類型的賦值運(yùn)算返回對(duì)左操作數(shù)的引用,因此,賦值操作符也返回對(duì)同一類類型的引用。例如,Sales_item 的賦值操作符可以聲明為:     class Sales_item      pub

29、lic:         / other members as before         / equivalent to the synthesized assignment operator         Sales_it

30、em& operator=const Sales_item &   /這個(gè)模糊返回 *this;     撤銷一個(gè)容器不管是標(biāo)準(zhǔn)庫(kù)容器還是內(nèi)置數(shù)組時(shí),也會(huì)運(yùn)行容器中的類類型元素的析構(gòu)函數(shù):              Sales_item *p = new Sales_item10;&

31、#160;/ dynamically allocated         vector<Sales_item> vecp, p + 10;  / local object ,容器中元素是拷貝         / .      &

32、#160;  delete  p; / array is freed; destructor run on each element         / vec goes out of scope; destructor run on each element容器中的元素總是按逆

33、序撤銷:首先撤銷下標(biāo)為 size - 1 的元素,然后是下標(biāo)為 size - 2 的元素直到最后撤銷下標(biāo)為 0 的元素。合成賦值操作符合成賦值操作符與合成復(fù)制構(gòu)造函數(shù)的操作類似。它會(huì)執(zhí)行逐個(gè)成員賦值:右操作數(shù)對(duì)象的每個(gè)成員賦值給左操作數(shù)對(duì)象的對(duì)應(yīng)成員。除數(shù)組之外,每個(gè)成員用所屬類型的常規(guī)方式進(jìn)展賦值。對(duì)于數(shù)組,給每個(gè)數(shù)組元素賦值。例如,Sales_item 的合成賦值操作符可能如下所示:     / equivalent

34、60;to the synthesized assignment operator     Sales_item&     Sales_item:operator=const Sales_item &rhs              isbn = rhs.isbn

35、;              / calls string:operator=         units_sold = rhs.units_sold;  / uses built-in int assignment    

36、60;    revenue = rhs.revenue;        / uses built-in double assignment         return *this;     合成賦值操作符根據(jù)成員類型使用適宜的內(nèi)置或類定義的賦值操作符,依次給每個(gè)成員

37、賦值,該操作符返回 *this,它是對(duì)左操作數(shù)對(duì)象的引用。合成賦值操作符根據(jù)成員類型使用適宜的內(nèi)置或類定義的賦值操作符,依次給每個(gè)成員賦值,該操作符返回 *this,它是對(duì)左操作數(shù)對(duì)象的引用。一般而言,假設(shè)類需要復(fù)制構(gòu)造函數(shù),它也會(huì)需要賦值操作符。這邊所說的需要是指需要自己定義。比方:包含指針類型有一些特定的工作要做何時(shí)調(diào)用析構(gòu)函數(shù)撤銷類對(duì)象時(shí)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù):     / p points to default constructed object &

38、#160;   Sales_item *p = new Sales_item;                                    / new

39、 scope         Sales_item item*p;  / copy constructor copies *p into item         delete p;          

40、0;  / destructor called on object pointed to by p                              / exit loca

41、l scope; destructor called on item變量如 item在超出作用域時(shí)應(yīng)該自動(dòng)撤銷。因此,當(dāng)遇到右花括號(hào)時(shí),將運(yùn)行 item 的析構(gòu)函數(shù)。動(dòng)態(tài)分配的對(duì)象只有在指向該對(duì)象的指針被刪除時(shí)才撤銷。假設(shè)沒有刪除指向動(dòng)態(tài)對(duì)象的指針,那么不會(huì)運(yùn)行該對(duì)象的析構(gòu)函數(shù),對(duì)象就一直存在,從而導(dǎo)致內(nèi)存泄漏,而且,對(duì)象內(nèi)部使用的任何資源也不會(huì)釋放。 當(dāng)對(duì)象的引用或指針超出作用域時(shí),不會(huì)運(yùn)行析構(gòu)函數(shù)。只有刪除指向動(dòng)態(tài)分配對(duì)象的指針或?qū)嶋H對(duì)象而不是對(duì)象的引用超出作用域時(shí),才會(huì)運(yùn)行析構(gòu)函數(shù)。何時(shí)編寫顯式析構(gòu)

42、函數(shù)許多類不需要顯式析構(gòu)函數(shù),尤其是具有構(gòu)造函數(shù)的類不一定需要定義自己的析構(gòu)函數(shù)。僅在有些工作需要析構(gòu)函數(shù)完成時(shí),才需要析構(gòu)函數(shù)。析構(gòu)函數(shù)通常用于釋放在構(gòu)造函數(shù)或在對(duì)象生命期內(nèi)獲取的資源。  假設(shè)類需要析構(gòu)函數(shù),那么它也需要賦值操作符和復(fù)制構(gòu)造函數(shù),這是一個(gè)有用的經(jīng)歷法那么。這個(gè)規(guī)那么常稱為三法那么,指的是假設(shè)需要析構(gòu)函數(shù),那么需要所有這三個(gè)復(fù)制控制成員。指針或特定操作析構(gòu)函數(shù)并不僅限于用來釋放資源。一般而言,析構(gòu)函數(shù)可以執(zhí)行任意操作,該操作是類設(shè)計(jì)者希望在該類對(duì)象的使用完畢之后執(zhí)行的。合成析構(gòu)函數(shù)與復(fù)制構(gòu)造函數(shù)或賦值操作符不同,編譯器總是會(huì)為我們合成一個(gè)析構(gòu)函數(shù)。合成析構(gòu)

43、函數(shù)按對(duì)象創(chuàng)立時(shí)的逆序撤銷每個(gè)非 static 成員,因此,它按成員在類中聲明次序的逆序撤銷成員。對(duì)于類類型的每個(gè)成員,合成析構(gòu)函數(shù)調(diào)用該成員的析構(gòu)函數(shù)來撤銷對(duì)象。如何編寫析構(gòu)函數(shù)Sales_item 類是類沒有分配資源因此不需要自己的析構(gòu)函數(shù)的一個(gè)例子。分配了資源的類一般需要定義析構(gòu)函數(shù)以釋放那些資源。析構(gòu)函數(shù)是個(gè)成員函數(shù),它的名字是在類名字之前加上一個(gè)代字號(hào),它沒有返回值,沒有形參。因?yàn)椴荒苤付ㄈ魏涡螀?,所以不能重載析構(gòu)函數(shù)。雖然可以為一個(gè)類定義多個(gè)構(gòu)造函數(shù),但只能提供一個(gè)析構(gòu)函數(shù),應(yīng)用于類的所有對(duì)象。 析構(gòu)函數(shù)與復(fù)制構(gòu)造函數(shù)或賦值操作符之間的一個(gè)重

44、要區(qū)別是,即使我們編寫了自己的析構(gòu)函數(shù),合成析構(gòu)函數(shù)仍然運(yùn)行。例如,可以為 Sales_item: 類編寫如下的空析構(gòu)函數(shù):     class Sales_item      public:        / empty; no work to do other than destroying&#

45、160;the members,        / which happens automatically         Sales_item          / other members as before   

46、  撤銷 Sales_item 類型的對(duì)象時(shí),將運(yùn)行這個(gè)什么也不做的析構(gòu)函數(shù),它執(zhí)行完畢后,將運(yùn)行合成析構(gòu)函數(shù)以撤銷類的成員。合成析構(gòu)函數(shù)調(diào)用 string 析構(gòu)函數(shù)來撤銷 string 成員,string 析構(gòu)函數(shù)釋放了保存 isbn 的內(nèi)存。units_sold 和 revenue 成員是內(nèi)置類型,所以合成析構(gòu)函數(shù)撤銷它們不需要做什么。  1. 調(diào)用相應(yīng)的夠著函數(shù)隱式轉(zhuǎn)化,然后調(diào)用復(fù)制構(gòu)造函數(shù)  

47、60;                           string"0-201-54848-8",                 &

48、#160;               string"0-201-82470-1",                             

49、;    Sales_item                               如前三個(gè)元素的初始化式中所示可以直接指定一個(gè)值,用于調(diào)用元素類型的單實(shí)參構(gòu)造函數(shù)。假設(shè)希望不指定實(shí)參或指定多個(gè)實(shí)參,就需要使用完好的構(gòu)造函數(shù)語(yǔ)法,正如最后一個(gè)

50、元素的初始化那樣。#include <iostream>#include <string>using namespace std;class Testpublic:Teststring as = a;Teststring b, int kinds = b;cout << "this functioin is called!" << endl;void outcout << s << endl;private:string s;

溫馨提示

  • 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)論