C++中建立對象的時候加括弧和不加括弧的區別__C++

來源:互聯網
上載者:User

原文地址 C++中建立對象的時候加括弧和不加括弧的區別
c++建立對象的文法有—–
1 在棧上建立 MyClass a;
2 在堆上建立加括弧 MyClass *a= new MyClass();
3 不加括弧 MyClass *a = new MyClass;
4.—————MyClass a();聲明了一個傳回值為MyClass類型的無參函數。

#include <iostream>  class MyClass  {  public:      MyClass()       {           std::cout << "Hello MyClass!" << std::endl;       }      MyClass(int i):num(i)      {          std::cout << "Hello MyClass!------int" << std::endl;       }      void MyMethod()       {           std::cout << "輸出成員num: " <<num << std::endl;       }  private:      int num;  };  int main()  {      //---------------對於調用建構函式      MyClass c1;//表示使用不帶參數的建構函式,或者有預設參數值的建構函式。      MyClass c2();//不會調用無參建構函式,各種情況下該處是聲明一個傳回值為MyClass類型的函數而已      MyClass c3(1);//調用參數為int的建構函式      /*---------------對於new關鍵字加括弧和不加括弧的區別---     1.對於自訂類型來說沒有區別,都是使用預設建構函式     2.對於內建類型來說加括弧會初始化     */      std::cout<<std::endl;      MyClass *c4 = new MyClass();      c4->MyMethod();      MyClass *c5 = new MyClass(1);      c5->MyMethod();      MyClass *c6 = new MyClass;      c6->MyMethod();      //內建類型      std::cout<<std::endl;      int *pint1 = new int(1);      int *pint2 = new int();      int *pint3 = new int;      std::cout<<*pint1<<" "<<*pint2<<" "<<*pint3<<std::endl;      return 0;  }  

結果:

結論:new 關鍵字建立對象時 對於內建類型:加括弧會初始化,不加括弧不初始化;對於自訂類型,都會調用預設建構函式,加不加括弧沒區別。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.