2014-02-07 90 views
-2
class Car { 

    private: 
     int doors; 

    public: 
     void print(); 
     Car(); 
     Car(int doors); 
}; 


Car :: Car (int doors) 
{ 
    doors = doors; 
} 

這是C++中類定義的正確語法嗎?類定義之後的C++公共方法定義?

爲什麼在類定義之外聲明的方法(在我看到的例子中)?

::語法的真正含義是什麼?

+3

1.是2.從標題中刪除類實現3.查找「範圍解析運算符」。 – dasblinkenlight

+1

2.出於同樣的原因,C中的函數通常在頭文件中聲明,但是在.c文件中單獨定義(但注意成員函數在類定義中是_declared_,而在其外部是_defined_)。 –

+0

3.謝謝,很好的回答 – user

回答

2

是的。它是有效的。

方法不在外面「聲明」。它們在外面被「定義」以使聲明和定義分開。你已經將這個聲明包括在你的班級裏面了您也可以在其中包含大部分定義。但是,類實現通常在單獨的實現文件中完成。

::被稱爲範圍解析運算符。 「Car :: Car(int doors)」的意思是「構造函數從類Car中獲取一個int參數」

編輯:只需添加,範圍解析運算符就可以確定哪個範圍(在您的示例中,哪個類)工件(在你的例子中,構造函數)屬於。

+0

謝謝,很好的回答。這是一個顯而易見的問題(我希望),我想要確認,但是你能夠調用具有相同名稱的各種構造函數,並使用範圍解析運算符和差別類名稱來定義它們嗎? – user

+1

@user:構造函數必須與該類具有相同的名稱,因此不能在兩個不同的類下定義兩個「相同名稱」的構造函數。一個類可能有多個同名的重載構造函數,但具有不同的參數。 但是,如果它適用於其他任何函數,那麼可以使用範圍解析運算符在同一文件的不同類中定義具有相同名稱的函數。如果這些函數是靜態的,您甚至可以使用範圍解析運算符分別調用它們。 – Sayutee

+0

好的,是的,這就是我的意思,構造函數以外的其他函數。感謝您的全面回答。 – user