2012-09-19 70 views
-1

我:C++對象設計

// file model.h 
#include "instrument.h" 
class model 
{ 
    // A function which uses instruments and returns double. 
    double value(Instrument instruments); 
} 

現在文件instrument.h

// file instrument.h 
class Instrument 
{ 
    // This function needs to use model. 
    double value2(model* md); 
} 

現在,在文件instrument.h,我應該使用#include "model.h"?這種看起來像一個糟糕的設計。

如何設計這兩個對象的儀器和模型,以便他們知道並可以互相使用?

回答

4

正向聲明:

class Instrument; 
class model 
{ 
    // function which uses instruments and returns double 
    double value(Instrument instruments); 
}; 

//... 

class model; 
class Instrument 
{ 
    // function needs to use model 
    double value2(model* md); 
} 

如果你的類不包含其他類型的數據成員,你不需要類型的完整定義。例如,如果你有一個成員指針,函數返回值,或者像你的情況一樣,參數。

另外,你的直覺是正確的。您應該將頭文件中的include保持爲最小值。標題應該是獨立的,但不要有不必要的標題。

+0

很好的答案。 'value'方法的'Instrument'參數也應該是一個指針,因爲它現在是一個不完整的類型。 – Macmade

+0

@Macmade no。對於參數你不需要一個完整的類型。 –

+0

@Luchian:對於你沒有調用的函數。 – Puppy