c++類大四個預設函數-建構函式 解構函式 拷貝建構函式 賦值建構函式

來源:互聯網
上載者:User

標籤:多個   傳參   預設   void   ret   操作   沒有   this   c++   

  每個類只有一個解構函式和一個賦值函數,但可以有多個建構函式(包含一個拷貝建構函式,其它的稱為普通建構函式)。對於任意一個類A,如果不編寫上述函數,C++編譯器將自動為A 產生四個預設的函數,例如:

  A(void);//預設的無參數建構函式

  A(const A&a);//預設的拷貝建構函式

  ~A();//預設的解構函式

  A&operator=(const A &a);//預設的賦值建構函式

1)、“預設的拷貝建構函式”和“預設的賦值函數”均採用“位拷貝”而非“值拷貝”的方式來實現,倘若類中含有指標變數,這兩個函數註定將出錯。

2)、當類還沒有產生的時候,調用大是拷貝建構函式,當類已經產生的時候,調用的是賦值建構函式,如下所示:

  A a;

  A b;

  b = a;//此時類a和b都已經產生了,所以調用的是賦值建構函式

  A c;

  A d=c;//此時類d還沒有產生,所以調用的是拷貝建構函式

3)、所有的函數調用傳參數,調用的都是拷貝建構函式。如果函數參數用的是參考型別,則不會發生參數的拷貝,也就不會調用任何函數了。

如下:

  void print_a(const A a);//調用拷貝建構函式

  void print_b(const A &a);//為引用,不會調用任何函數

4)、拷貝建構函式和賦值建構函式對實現。

  A::A(const A&a)

  {

  }

  拷貝建構函式沒有返回,為一個全新的類。

 

  A &A::operator=(const A&a)

  {

    return *this;

  }

  賦值建構函式返回自身,即*this,為在原先的類上大操作。

c++類大四個預設函數-建構函式 解構函式 拷貝建構函式 賦值建構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.