c語言中default的用法_第1頁
c語言中default的用法_第2頁
c語言中default的用法_第3頁
c語言中default的用法_第4頁
c語言中default的用法_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——c語言中default的用法c語言中default的用法

C語言是一門實踐性和動手才能要求很高的大學(xué)主干課程,但是C語言測驗課的教學(xué)一向不受重視,教學(xué)效果也不太夢想。下面我就跟你們細(xì)致介紹下c語言中default的用法,夢想對你們有用。

c語言中default的用法如下:

一、類中的默認(rèn)函數(shù)

a.類中默認(rèn)的成員函數(shù)

1.默認(rèn)構(gòu)造函數(shù)

2.默認(rèn)析構(gòu)函數(shù)

3.拷貝構(gòu)造函數(shù)

4.拷貝賦值函數(shù)

5.移動構(gòu)造函數(shù)

6.移動拷貝函數(shù)

b.類中自定義的操作符函數(shù)

1.operator

2.operator

3.operator

4.operator*

5.operator-

6.operator-*

7.operatornew

8.operator

同時C++規(guī)定,一旦程序員實現(xiàn)了這些函數(shù)的自定義版本,那么編譯器不會再自動生產(chǎn)默認(rèn)版本。留神只是不自動生成默認(rèn)版本,當(dāng)然還是可手動生成默認(rèn)版本的。當(dāng)我們自己定義了待參數(shù)的構(gòu)造函數(shù)時,我們最好是聲明不帶參數(shù)的版本以完成無參的變量初始化,此時編譯是不會再自動供給默認(rèn)的無參版本了。我們可以通過使用關(guān)鍵字default來操縱默認(rèn)構(gòu)造函數(shù)的生成,顯式地指示編譯器生成該函數(shù)的默認(rèn)版本。譬如:

classMyClass

public:

MyClass=default;//同時供給默認(rèn)版本和帶參版本,類型是POD的

MyClassinti:datai

private:

intdata;

;

有些時候我們夢想限制默認(rèn)函數(shù)的生成。典型的是遏止使用拷貝構(gòu)造函數(shù),以往的做法是將拷貝構(gòu)造函數(shù)聲明為private的并不供給實現(xiàn),這樣當(dāng)拷貝構(gòu)造對象時編譯不能通過,C++11那么使用關(guān)鍵字顯式指示編譯器不生成函數(shù)的默認(rèn)版本。譬如:

classMyClass

public:

MyClass=default;

MyClassconstMyClass=;

當(dāng)然,一旦函數(shù)被過了,那么重載該函數(shù)也是非法的,該函數(shù)我們習(xí)慣上稱為刪除函數(shù)。

二、default和的其他用途

上面我們已經(jīng)看到在類中我們可用default和修飾成員函數(shù),使之成為缺省函數(shù)或者刪除函數(shù),在類的外面,default可以在類定義之外修飾成員函數(shù),譬如:

classMyClass

public:

MyClass=default;

MyClassoperator=constMyClass;

;

//在類的定義外用default來指明缺省函數(shù)版本

inlineMyClassMyClass::operator=constMyClass=default;

還可以MyClassMyClass::operator=constMyClass=default;但是這種類外定義合成的成員就不是內(nèi)聯(lián)函數(shù)。

與=default不同,=務(wù)必展現(xiàn)在函數(shù)的第一次聲明中。由于一個默認(rèn)的`成員只影響為這個成員生成的代碼,因此=default直到編譯生成代碼時才需要,而編譯器務(wù)必早早知道一個函數(shù)是否是刪除的,以便遏止試圖使用它的操作。

一般處境下,析構(gòu)函數(shù)不能定義為刪除的,由于假設(shè)析構(gòu)函數(shù)被刪除,就無法刪除此類型的對象了。對于一個刪除了析構(gòu)函數(shù)的類型,編譯器將不允許定義該類型的變量或創(chuàng)造該類型的臨時對象,而且假設(shè)一個類有某個成員的類型刪除了析構(gòu)函數(shù),也不能定義該類的變量或臨時對象,由于一個成員的析構(gòu)函數(shù)是刪除的,那么該成員無法銷毀,包含它的類也就沒法銷毀。雖然對于刪除了析構(gòu)函數(shù)的類型,我們不能定義這種類型的變量或成員但可以動態(tài)調(diào)配這種類型的對象,譬如:

StructNoDtor

NoDtor=default;

~NoDtor=default;

};

NoDtor*P=newNoDtor;//正確,但是我能P

但是有時析構(gòu)函數(shù)也是可以的,這樣做的目的是我們在指定內(nèi)存位置舉行內(nèi)存調(diào)配時并不需要析構(gòu)函數(shù)來完成對象級別的清理,這時我們可顯示刪除析構(gòu)函數(shù)來限制自定義類型在棧上或者靜態(tài)的構(gòu)造。

關(guān)于的顯式刪除,并非局限于成員函數(shù),譬如:

voidFuncinti;

voidFunccharc=;//顯式刪除char版本

intmain

Func3;

Funcc’;//無法編譯通過

return0;

這里由于Func的char版本已經(jīng)被刪除,故Funcc會編譯失敗。由此我們也知default是只局限作用于類的片面成員函數(shù)的。于是我們還可用來制止不必要的隱式數(shù)據(jù)類型轉(zhuǎn)換。譬如:

classMyClass

public:

MyClassinti;

MyClssscharc=;//刪除char版本的構(gòu)造函數(shù)

;

voidFunMyClassm

intmain

Func3;

Funca;//編譯不能通過

MyClassm13;

MyClassm2a;//編譯不能通過

這是由于char版本的構(gòu)造函數(shù)被刪除后,試圖從char構(gòu)造MyClass對象的方式是不允許的了。但去掉這句的函數(shù)刪除后,編譯器會隱式的將a轉(zhuǎn)換為整型使得編譯通過,調(diào)用的是整型構(gòu)造函數(shù),這可能并不是你所想要的。

但是假設(shè)這樣:

classMyClass

public:

MyClassinti;

explicitMyClssscharc=;//刪除explicit的char版本的構(gòu)造函數(shù)

;

voidFunMyClassm

intmain

Func3;

Funca;//編譯可通過

MyClassm13;

MyClassm2a;//編譯不能通過

將構(gòu)造函數(shù)explicit后,構(gòu)造函數(shù)一樣的還是不能發(fā)生char的構(gòu)造,由于char構(gòu)造版本被刪除了,但在Func的調(diào)用中,編譯器會嘗試將c轉(zhuǎn)換為int,即Func\a會調(diào)用一次MyClassint構(gòu)造,順?biāo)焱ㄟ^編譯。于是我們不提倡explicit和混用。對與普遍函數(shù)也有類型的效果。

的用法還包括刪除operatornew操作符,編碼在堆上調(diào)配該類的對象

如:void*operatornewstd::size_t=;

合成的拷貝操縱成員可能是刪除的,假設(shè)一個類有數(shù)據(jù)成員不能默認(rèn)構(gòu)造、拷貝、復(fù)制或銷毀,那么對應(yīng)的成員函數(shù)將被定義為刪除的。因此:

假設(shè)類的某個成員的析構(gòu)函數(shù)是刪除的或不成訪問的,那么類的合成析構(gòu)函數(shù)被定義為刪除的。

假設(shè)類的某個成員的拷貝構(gòu)造函數(shù)是刪除的或不成訪問的,那么類的合成拷貝構(gòu)造函數(shù)也被定義為刪除的。

假設(shè)類的某個成員的拷貝

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論