C 類的6個預設函式

2021-07-13 08:06:16 字數 988 閱讀 3701

在c++中預設產生6個類成員函式,即預設函式,它們分別是:

預設建構函式

預設拷貝建構函式

預設析構函式

預設賦值運算子

預設取址運算子

預設取位址運算子const

很多人以為只有前4個預設函式,事實上有6個。

**驗證如下:

可見,我們在沒有寫函式功能的情況下,進行構造,析構,拷貝等等操作都是可以實現的,這就是6個預設函式的功勞了。

注意,很多人在這裡有乙個誤區。

是不是構造乙個 空類,這個空類就已經有6個預設預設函式了?

這是錯誤的!請看**:

#include 

using

namespace

std;

class a

{};int main()

測試空類的大小,得出: 空類a的大小為 1 。

對於空類,編譯器不會生成任何成員函式!只會生成1個位元組的佔位符。

空類也是可以被例項化的,而每個例項在記憶體中都是獨一無二的位址,為了達到這個目的,編譯器往往會給乙個空類隱含的加乙個位元組,這樣空類在例項化後就可以得到了獨一無二的位址,這就是乙個佔位符的意義。

那麼什麼時候才會生成6個預設預設成員函式呢?

編譯器只會在需要的時候生成,也就是說,在第乙個**main()中:

a c1; 構造c1才會生成建構函式;

a c2 = c1; 拷貝構造c2時才會生成拷貝建構函式;

同樣析構c1,c2時,才會構造析構函式,依次類推~

(也會預設構造乙個this指標)

C 類的6個預設函式

在c 中預設產生6個類成員函式,即預設函式,它們分別是 預設建構函式 預設拷貝建構函式 預設析構函式 預設賦值運算子 預設取址運算子 預設取位址運算子const 很多人以為只有前4個預設函式,事實上有6個。驗證如下 include using namespace std class a int ma...

C 中類的6個預設函式

類的6個預設的成員函式包括 建構函式 析構函式 拷貝建構函式 賦值運算子過載函式 取位址操作符過載 const修飾的取位址操作符過載。以下詳細介紹前四個函式。一 建構函式 cgoods 例項化乙個物件 1 分配物件記憶體空間 2 呼叫物件的建構函式 初始化 定義的同時賦值。賦值 定義後,再賦值。建構...

C 類中6個預設的函式(一)

c 的類中有6個預設的函式,它們分別是 建構函式 析構函式 拷貝建構函式 賦值運算子的過載函式 取位址操作符的過載函式 const修飾的取位址操作符的過載函式 這6個預設的函式有兩個特點 共有的 內聯的 今天我們先來看看前三個預設的函式 建構函式 析構函式和拷貝建構函式 我們都知道,c 中乙個物件的...