2012-09-19 5 views
-1

J'ai:conception objet C de

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

maintenant dans le fichier instrument.h

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

maintenant dans le fichier instrument.h, devrais-je utiliser #include "model.h"? Cela ressemble à un mauvais design.

Comment puis-je concevoir cet instrument et ce modèle à deux objets de façon à ce qu'ils connaissent et puissent s'utiliser mutuellement?

Répondre

4

déclarations avant:

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); 
} 

Si votre classe ne contient pas de données membres de l'autre type, vous n'avez pas besoin de la définition complète du type. Par exemple, si vous avez un pointeur de membre, la fonction renvoie des valeurs ou, comme dans votre cas, des paramètres.

De plus, votre intuition est correcte. Vous devriez garder include s dans les fichiers d'en-tête au minimum. Les en-têtes devraient être autonomes, mais ne pas avoir d'en-têtes inutiles.

+0

Bonne réponse. Le paramètre 'Instrument' de la méthode' value' devrait également être un pointeur, puisqu'il s'agit maintenant d'un type incomplet. – Macmade

+0

@Macmade no. Pour les paramètres, vous n'avez pas besoin d'un type complet. –

+0

@Luchian: Pour les fonctions que vous n'appelez pas. – Puppy