2014-01-21 23 views
0

我有下面的類一個小問題:C++:有關對象

class aClass { 
public: 
    aClass():a(0){} 
    void print(){cout<<a<<endl;} 
private: 
    int a; 
}; 

在main()函數我意外地創建一個對象是這樣的:

aClass obj(); 

我以爲編譯器將引發錯誤,因爲它期望調用默認的拷貝構造函數,但是在bracket()中沒有參數。有趣的是,根本沒有錯誤。所以我嘗試通過調用訪問成員函數:

obj.print(); 

現在拋出這個錯誤:

request for member 'print' in 'obj', which is of non-class type 'aClass()' 

有人可以解釋給我聽?什麼是obj()已創建?

回答

1

這是一個函數聲明。

該語言允許函數聲明在其他函數內;其效果是在周圍的名稱空間中聲明一個函數,但只是爲了在聲明的範圍內提供該名稱。

+0

函數聲明怎麼可能放在main()中? –

+0

@TuBui:因爲語言允許你這樣做。我已經添加了更多關於它的功能的更多細節。 –

4
aClass obj(); 

這是創建由它的默認構造函數類ACLASS的一個實例。

這是一個函數原型一個函數不帶參數並返回一個aClass。

+0

如果它是由默認構造函數創建的那個類的實例,那麼你能解釋一下它的外觀嗎? – starsplusplus

+0

@starsplusplus「aClass obj;」沒有括號將是一個aClass的默認構造的實例。 – nvoigt