2010-10-18 4 views
0

J'ai une classe à lire des données (data.h & data.cpp), une classe aux données d'analyse (analyse.h & analysis.cpp) et une autre à faire le calcul basé sur deux classes précédentes (calcul.h & calcul .cpp). Je me demande comment je peux passer les résultats de la classe de données à la classe d'analyse et plus tard de tous les deux à la classe de calcul. J'ai essayé de mettre le data.h en analysis.cpp mais il n'a pas marché Merci pour votre tempsC++: Comment transmettre les résultats d'une classe à une autre classe?

+1

Cela ressemble à un design douteux de la toute première phrase. La lecture des données est un _algorithm_. Les algorithmes sont mieux implémentés en tant que _functions_. Les objets doivent combiner l'état (données) avec le comportement (fonctions membres). Les algorithmes n'ont pas d'état, mais un effet secondaire et/ou un résultat. De plus, _files_ est quelque chose de différent de _classes_. Le code source est stocké dans des fichiers, mais combien y a-t-il de classes par fichier (ou rien, vous pouvez écrire des programmes C++ parfaitement légaux sans aucune classe), vous êtes libre de décider. C'est la 3ème ou 4ème fois que j'écris ceci en moins d'une semaine. _Java empoisonne vraiment les esprits des programmeurs. – sbi

+0

De nombreux motifs, par ex. Modèle de stratégie, utiliser des classes pour implémenter des algorithmes –

+1

@sbi: David a un bon point. L'analyse des données peut être un algorithme, mais souvent, il s'agit d'un algorithme avec un état, et cet état existe entre les appels de fonction. Le placer dans un objet est une bonne façon d'encapsuler cela, et vu comme une étape de l'habitude d'un programmeur débutant d'utiliser des membres statiques/globals, une approche OO est un bon premier pas vers une fonctionnalité thread-safe. Une approche excessivement class-par-classe est quelque chose que je trouve aussi extrêmement ennuyeux ... surtout quand ils comprennent des milliers de lignes d'en-têtes et seulement quelques douzaines de lignes ... tout à fait avec vous. –

Répondre

0

La définition des données va dans data.h

données de classe {...}

et comprennent le fichier dans analysis.cpp

#include "data.h"

et passer comme une classe référence

a nalysys { bool Analyse (Données & données); }

+0

Notez que vous devez déclarer la classe dans analysis.h, "class Data;", pour pouvoir l'utiliser dans les signatures. – dutt

0

Vous pouvez créer une nouvelle structure dans laquelle vous pouvez stocker les résultats de votre classe et l'utiliser pour envoyer vos résultats sur vos classes. Par exemple:

Struct Result { 
    bool dataResult; 
    bool analisysResult; 
}; 
2

En calculation.cpp, vous aviez #include data.h et analysis.h, puis utiliser les fonctions de données pour récupérer les données, en passant le résultat (s) à l'analyse, puis les résultats au calcul.

Cela se résume à quelque chose à peu près comme ...

#include "data.h" 
#include "analysis.h" 

Data data; 
Analysis analysis; 
while (data.get()) 
    analysis.process_more(data); 
Calculation calculation(analysis); 
calculation.report(); 

En d'autres termes, les objets des types de classe sont les résultats.

Questions connexes