2014-01-16 224 views
0

我剛開始學習C++類,構造函數和函數,但如果我正確地理解了它,我不是這樣的。我沒有代碼問題,因爲它工作正常,我只是混淆了哪一點,我已經在代碼中添加了我認爲正確的代碼。如果有人能夠解釋我是否錯誤和/或正確,我將不勝感激。謝謝。C++類,構造函數和函數

這是Main.cpp的,我理解是完全檔案:

#include "Something.h" 
    #include <iostream> 
    using namespace std; 

    int main(){ 
    Something JC; 
    system("PAUSE"); 
    return 0; 
    } 

這是Something.cpp:

#include "Something.h" 
    #include <iostream> 
    using namespace std; 

    //Something is the class and :: Something() is the function? 

    Something::Something() 
    { 
    cout << "Hello" << endl; 
    } 

這是Something.h:

// this is a class which is not within the main.cpp because it is an external class? 

    #ifndef Something_H 
    #define Something_H 

    class Something{ 
    public: 
    Something(); //constructor? 
    }; 

    #endif 

我只是簡單地想知道哪個位是哪個,如果我錯了的話。

回答

1
  1. 您通常在頭文件中定義類,因爲你在Something.h所做的一切,使很多.cpp文件可以包括報頭,而使用類。

  2. 構造函數是一個特殊的函數,其名稱與它所屬的類相同。所以Something的構造函數也被稱爲Something

    class Something { // Class definition 
        public: 
        Something(); // Constructor declaration 
    }; 
    
    Something::Something() // Constructor definition 
    { 
        cout << "Hello" << endl; 
    } 
    

    的構造函數聲明中只是說,對於Something一個構造函數沒有參數存在。它並沒有實際執行它。包含Something.h的任何.cpp文件不需要知道實現,只是它存在。相反,該實現在Something.cpp中給出。

    因爲構造函數的定義寫在以外的這個類的定義,你需要說它屬於Something。爲此,您可以使用嵌套名稱說明符Something::對其進行限定。也就是說,Something::foo表示foo類內Something,因此Something::Something表示Something的構造函數。

1

在類體Something();是構造函數的聲明(標明有一個),而

Something::Something() 
{ 
cout << "Hello" << endl; 
} 

是構造函數的定義(說,它做什麼)。你的程序可以有多個相同函數的聲明(特別是它也適用於構造函數),但只有一個定義。 (內聯函數是一個例外,但這不適用於此)。