2012-09-19 50 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