2012-02-15 56 views
0

如果我有一個純虛類像下面這樣:headerfile列入純虛類

我有類結構如下所示:

class interface_class { 
    virtual void someFunction(MyClassA& a) = 0; 
    virtual void someFunction(MyClassB& b) = 0; 
} 

什麼是包括MyClassA/MyClassB正確的方法是什麼?我應該在接口類的頭文件中做一些前向聲明,並在實現的頭文件中做真正的包含,還是應該將MyClassA/B的頭文件直接包含在接口類中?

+1

在旁註中,只要您的類變得很大和/或需要複製,就可以通過const引用(即.f(const MyClassA&a)')傳遞'a'和'b'。從那裏使用前向聲明會更容易。 – 2012-02-15 09:22:30

+0

thx,我忘了&的參考。 – JamesBrown147 2012-02-15 09:30:05

回答

5

對這兩個類都使用Forward Declarations。
實際上,您總是可以使用前向聲明。
使用正向聲明節省編譯時間&也限制您創建不需要的依賴項。

+0

請注意,您必須將參數更改爲指針或引用才能使用前向聲明。 – 2012-02-15 09:22:27

+2

@BjörnPollex:不是。你可以*聲明*接受或返回的函數*不完整的類型*。 – 2012-02-15 09:24:21

+0

如果我在執行的頭文件中做了一個前向聲明,那麼我必須在cpp文件中包含頭文件,不是嗎?這是常見的方式,只包含在cpp文件中的標題? – JamesBrown147 2012-02-15 09:33:06

1

您應該在單獨的頭文件中使用前向聲明。

這就是你有你當前的頭文件的定義MyClassAMyClassB。你需要在同一時間使用的組類,並創建一個新的頭文件是這樣的:

文件MyClassesFwd.h(命名約定由你)

namespace XX { 
    class MyClassA; 
    class MyClassB; 
} 

你的接口頭:

#include <MyClassesFwd.h> 
// ... your interface definition ... 

實際的源文件看起來像這樣的另一方面:

#include <MyClassA.h> 
#include <MyClassB.h> 
#include <MyInterface.h> 

這會阻止您每次都重寫前向聲明。