Salut,

Envoyé par
memoire.ph
bonjour
justement la matrice doit être alloué dynamiquement dans le constructeur et doit contenir des éléments de type T ma question est ce qu'il y a un moyen pour que la matrice contient des éléments de type différents des entier et des réel en même temps par exemple.
Non... du moins, pas directement... (*)
De la facon dont tu pars, tu peux avoir une matrice d'entier en écrivant Matrice<int> ou une matrice de réels en écrivant Matrice <double>, par exemple, mais tu ne peux pas avoir une matrice contenant des entiers et des réels, simplement, parce que entier et réels sont des types différents 
Il n'y aurait, de toutes manières, pas beaucoup de sens à vouloir créer une matrice (au sens mathématique du terme) dont les éléments seraient de type hétérogènes 
puis après dans la fonction main je doit faire un menu pour que l'utilisateur saisie une matrice et faire avec des opérations comme le déterminant.. donc est ce que je doit lui dire qu'il faut travailler sur un ensemble donnés R(réel) ou bien N(entier)..
merci
En théorie, le calcul du déterminant d'une matrice est une fonction membre de la matrice, et s'effectue sur le type choisi pour représenter les donnée de celles-ci
Si donc, tu as, dans ton code quelque chose ressemblant à
fournira un résultat cohérent avec des données de type int, et si tu as
Matrice<double> matDouble;
fournira un résultat cohérent avec des données de type double.
Si l'utilisateur doit pouvoir choisir à l'utilisation entre le fait d'utiliser une matrice d'entier ou une matrice de double, il faut qu'il y ait une classe de base non template pour matrice<T>, utiliser un pointeur sur cette classe de base et créer dynamiquement la classe correcte en fonction du choix de l'utilisateur, car il n'y a aucune relation entre Matrice<int> et Matrice<double>.
Ainsi, tu pourrais avoir quelque chose comme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class MatrixBase
{
public:
MatrixBase(/* liste d'arguments potentiels */);
virtual ~MatrixBase();
/* more pure virtual functions */
};
template <typename T>
class Matrix :public MatrixBase
{
public:
/* virtual functions implementation */
};
int main()
{
MatrixBase * ptr;
swirch(choice)
{
case(choiceForInt);
ptr = new Matrix<int>(/* parametres */);
break;
case(choiceForDouble);
ptr = new Matrix<double>(/* parametres */);
break;
}
//use of ptr;
delete ptr;
return 0;
} |
Mais tu seras limité à l'interface de MatrixBase, qui ne peut pas fournir de fonction dont le type de retour (ou un des arguments) dépendrait du fait que tu travailles avec une matrice d'entiers ou avec une matrice de réels.
Par contre, rien ne t'empêche de créer des fonctions surchargées (ou des foncteurs templates
) qui te permettent de travailler avec des matrices d'entiers ou avec des matrices de réels, en fonction de la situation 
(*) J'ai volontairement écarté de mon explication la possibilité du recours à boost::any ou classe similaire permettant de travailler avec des types hétérogènes parce que les calculs effectués sur ta matrice devront, de toutes manières, se baser sur la présomption que tu travailles avec des types identiques
Partager