C++ Primer Plus 第六版筆記 C++中定義對象的語法,帶括號與不帶括號有什麼區別?

C++ Primer Plus 第六版筆記html

關於對象聲明的思考ios

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

 

  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定義成什麼了?post

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

另外若是進行動態的堆分配的話是要帶括號的,好比 MyClass *obj = new MyClass() 不加會報錯(可是,在vc6.0中不加()並無報錯,並且結果是同樣的,緣由待解?可是有一條,若是類中定義了帶參數的構造函數,定義類時不用括號確定是錯誤的#add  爲避免錯誤,統一加括號爲妙)spa

相關文章
相關標籤/搜索