Bonjour à tous,
Dans le cadre de ma formation d'ingénieur spécialisé en simulation numérique, nous faisons beaucoup de calcul scientifique et nous utilisons beaucoup le Fortran. Nous avons été introduits au C++ pour nous faire découvrir la programmation orientée objet et dans le cadre d'un mini projet, je mepose encore quelques questions, car je n'aimerais pas partir sur des bases peu solides.
1) J'ai trois classes différentes donc 3 fichiers hxx différents, 3 fichiers cxx différents et un main. Comment inclure proprement les dépendences pour chaque fichier? J'ai peur de trop user des #include. Sachant que pour faire simple, ma classe C utilise la classe B qui utilise la classe A.
2) Est il mieux de déclarer mes classes dépendantes en tant que classes amies ou en tant que classes filles avec héritage public?
3) Lorsque je définis mes constructeurs, que faut il utiliser entre reallocate et new lorsqu'il s'agit de créer de la mémoire pour un vecteur par exemple?
4) Dans une des classes, je dois surcharger l'opérateur << pour afficher une matrice, connaissez vous une manière pour l'afficher proprement (même espace alloué à chaque élément de matrice pour que tout soit aligné corrrectement, en gros indiquer au compilateur que je veux automatiquement 4 décimales pour chaque réel)
Par ailleurs je m'arrache les cheveux sur une erreur de segmentation qui se produit lorsque je veux calculer le premier élément d'un vecteur solution d'un système tridiagonal, et même après avoir vérifié toutes les tailles je ne sais pas d'où ca vient.
J'ai essayé de printer w(0), alpha(0) et x(1) et ils me donnent bien le bon résultat. Quand je calcule x(0) dans la boucle, j'ai erreur de segmentation alors que lorsque je le fais hors boucle, ca fonctionne parfaitement (partie commentée)! Je ne comprends pas?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void MatrixTridiag::Solve(vecteur& x) { unsigned n = x.size(); vecteur y(n), w(n); y(0) = x(0); for (unsigned i = 1; i < n; i++) y(i) = x(i) - alpha(i-1)*y(i-1); for (unsigned i = 0; i < n; i++) w(i) = y(i)/delta(i); x(n-1) = w(n-1); for (unsigned i = n-2; i >= 0; i--) x(i) = w(i) - alpha(i)*x(i+1); // x(0) = w(0) - alpha(0)*x(1); }
Merci d'avance pour votre aide.
Partager