Bonjour � tous.
Tout d'abord d�sol� si ma question a d�j� �t� pos�e, je fouille le web depuis plusieurs jours � la recherche d'une solution, en vain...
Voil� mon probl�me : je suis en train de programmer des m�thodes num�riques qui travaillent sur des vecteurs et des matrices.
- J'ai cr�� une classe abstraite, Matrix, qui impl�mente des fonctions sur les matrices (carr�es). Deux classes h�ritent de celle-ci : une classe FullMatrix (qui stocke tous les �l�ments de la matrice), et un classe SparseMatrix (qui stocke les couples indices-valeur de la matrice). Toutes ces classes sont des templates, ce qui me permet de d�finir des matrices d'int, double, etc.
- De la m�me mani�re j'ai une classe abstraite Vector avec ses deux sous-classes FullVector et SparseVector.
Ce qui me pose probl�me est la d�finition d'op�rateurs sur ces classes. En particulier, je voudrais pouvoir d�finir un op�rateur '*' sur ces objets pour pouvoir les multiplier entre eux.
Je voudrais pouvoir faire :
Et c'est l� qu'est mon probl�me : l'op�rateur * ne fait pas le m�me travail selon les types de ses param�tres. Comment puis-je coder �a ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 int n=5; FullMatrix<double> A(n); // remplissage de A SparseVector<int> b(n); // remplissage de b 2*A; // produit scalaire-Matrix A*A; // produit Matrix-Matrix A*b; // produit Matrix-Vector 2*b; // produit scalaire-Vector // ...
Ce que je voudrais (si c'est possible...) ce sont des op�rateurs qui travailleraient sur les classes Matrix et Vector plut�t que sur les FullMatrix, SparseMatrix, FullVector et Sparse Vector, parce que je vais augmenter le nombre de mani�res de stocker ces objets, et que je voudrais bien ne pas avoir � recoder le produit � chaque fois.
J'ai bien pens� � coder �a :
Mais rien ne va :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 template<class R, class T> Matrix<T> operator*(const Matrix<R> &matrice1, const Matrix<T> &matrice2){...} template<class R, class T> Matrix<T> operator*(const R &scalaire, const Matrix<T> &matrice){...}
- je ne peux pas retourner un objet de type Matrix puisque la classe est abstraite
- s'il n'y avait pas de probl�me de retourner un objet Matrix, ferait-il appel � la bonne fonction quand je lui demande A*A ?
Bref je suis paum�... Quelqu'un pour m'aider ?
D'avance merci.
Partager