2012-11-12 126 views
1

創建並定義類後(在「h文件」中)。 除了「h文件」(屬於該類)之外,我該如何決定創建(或不是)「cpp文件」(僅適用於課程)?C++中的類(cpp文件&h文件)

+1

如果成員函數不是微不足道的,那麼將它們放在單獨的源文件中可能是一個好主意。例外是模板類必須在頭文件中完全定義。 –

回答

0

最好的做法是將頭文件和實現文件分開,以便在頭文件.h中定義類並在.cpp文件中實現它,這將幫助您跟蹤和調試錯誤並顯示乾淨的代碼,

在模板類是剛剛記在一個單獨的頭文件中定義,讓您的代碼通過分離模板結構良好的和乾淨的正常類

2

這裏是一個小例子,讓你去。


這是Foo的頭文件。讓我們把它稱爲 「foo.h中」

#pragma once 
#ifndef FOO_H 
#define FOO_H 

class Foo{ 
public: 
    void function(); 
protected: 
private: 
}; 
#endif 

這是Foo的源文件。讓我們把它稱爲「Foo.cpp中」

#include "foo.h" 
void Foo::function(){ 
    // ... implement ... 
    return; 
} 

彙編在一起,我們可以創建一個目標文件。我們將其稱爲「foo.o」 如果您鏈接「foo.o」,則可以在程序中使用您的課程。
例子:

#include "foo.h" 
int main(){ 

    Foo foo; 
    foo.function(); 

    return 0; 
} 
+0

如果我有兩個類,其中一人有一個矩陣,我想,其他類將有一個訪問從矩陣中讀取數據。 我如何鏈接它們? – YkI

+0

@YkI你可以讓他們的「朋友」,或者你可以使用觀測器和變壓器功能的兩個類之間的接口。我會推薦後者。所以具有矩陣的類需要成員函數(也稱爲方法),其函數返回其他類所需的信息。這可能是一個函數,其返回類型是整個矩陣,或者可能是一個函數,它接受一個索引並返回一個特定的值。 *這些將是觀察員職能。另一個類需要成員函數(也稱爲方法)接受矩陣類返回的數據。 –

1

的.h文件是一個描述符文件,描述你的函數/類的簽名,讓其他班其他cpp文件可以使用它。

您需要將h文件視爲合同。你宣佈了​​一項義務。

稍後,當您決定實施cpp時,您就履行了義務。

其他類/ cpp文件可以單獨依靠您的義務,假設您還將在cpp中執行該義務。

例如:

  1. 創建一個h文件「myClassA.h」和聲明一個稱爲myClassA類()稱爲myClassA.SayHello成員方法
  2. 您包括myClassA.h在另一類創建myClassB.cpp,這樣myClassB就知道myClassA有一個名爲SayHello()的方法,它可以調用它。
  3. 如果您不包含myClassA.h,並且您嘗試在myClassB.cpp中調用myClassA.SayHello(),您將從編譯器中得到一個錯誤,因爲myClassB不能「知道」myClassA。
  4. 如果你確實包含了h文件,但是並沒有打算在myClassA.cpp中實際創建和實現myClassA,那麼你會得到一個編譯錯誤,因爲沒有找到實現。
+1

這裏有很多管理詞彙。複製他們從一個過頂的面向對象的書? :P –

+1

爲了記錄在案,編程術語不是「合同」或「義務」,但_API_。 –

+0

你是對的,我只是試着用通俗的話來解釋它。 雖然我覺得評論有趣, 我確實認爲您的評論沒有建設性,並且與專用於回答問題的網站無關...... – eran