C++ Primer Plus 第六版筆記

來源:互聯網
上載者:User

標籤:

C++ Primer Plus 第六版筆記

關於對象聲明的思考

轉自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html

C++中定義對象的文法,帶括弧與不帶括弧有什麼區別?

 

  1. #include <iostream>  
  2. class MyClass  
  3. {  
  4. public:  
  5.     MyClass()   
  6.     {   
  7.         std::cout << "Hello MyClass!" << std::endl;   
  8.     }  
  9. public:  
  10.     void MyMethod()   
  11.     {   
  12.         std::cout << "Hello MyMethod!" << std::endl;   
  13.     }  
  14. };  
  

 

如果這樣定義對象:MyClass obj; 那麼它的建構函式將會被執行,如果調用obj.MyMethod();也會執行正確。
可是如果帶有括弧:MyClass obj(); 那麼它的建構函式不會被執行,調用obj.MyMethod();也會出現語法錯誤,請問這種文法是把obj定義成什麼了?

MyClass obj()把obj定義成什麼 從文法上看是定義了一個名為obj,類型為MyClass類(也就是傳回值為MyClass類型)的無參數函數。

另外如果進行動態堆分配的話是要帶括弧的,比如 MyClass *obj = new MyClass() 不加會報錯(但是,在vc6.0中不加()並沒有報錯,而且結果是一樣的,原因待解?但是有一條,如果類中定義了帶參數的建構函式,定義類時不用括弧肯定是錯誤的#add  為避免錯誤,統一加括弧為妙)

C++ Primer Plus 第六版筆記

聯繫我們

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