2011-03-14 166 views
12
class base { 
    int i; 
public: 
    base() 
    { 
     i = 10; 
     cout << "in the constructor" << endl; 
    } 
}; 

int main() 
{ 
    base a;// here is the point of doubt 
    getch(); 
} 

base abase a()有什麼區別?調用默認構造函數

在第一種情況下構造函數被調用,但不在第二種情況!

回答

18

第二個聲明函數a()返回一個基礎對象。 :-)

11

base a聲明類型base的變量a並調用其默認構造函數(假設它不是內置類型)。

base a();聲明函數a不帶參數並返回類型base

其原因是因爲該語言基本上指定,在這種模糊不清的情況下,任何可以解析爲函數聲明的東西都應該被解析。您可以搜索「C++最令人頭疼的解析」,以瞭解更復雜的情況。

因此,我實際上更喜歡new X;而不是new X();,因爲它符合非新聲明。

  1. 自動(靜態)
  2. 動態

第一個使用以下聲明:

base a; //Uses the default constructor 
base b(xxx); //Uses a object defined constructor 

-1

在C++中,您可以通過以下兩種方式創建對象該對象一旦離開當前範圍就會被刪除。

動態版本使用指針,你必須充電將其刪除:)

base a = new base(); //Creates pointer with default constructor 
base b = new base(xxx); //Creates pointer with object defined constructor 

delete a; delete b; 
+1

不應該說,它是'基地* A =新基地('? – Sid 2013-04-29 23:23:18

+4

這個答案是否真的與問題相關?你沒有解決'base b()' – narengi 2015-06-23 02:38:56