Bonjour, je voudrais surcharger l'operateur = pour affecter mon tableau comme donnee membre d'une autre classe
j'ai une classe cToto dans laquelle je cree un tableau
CDISTableau2D<double> dMonTableau2D;
// je le dimensionne
dMonTableau2D(2,3)
//j'y met des valeurs
dMonTableau2D(0,0) = 1.0;
dMonTableau2D(1,0) = 2.0;
dMonTableau2D(1,2) = 3.0;
// Maintenant je voudrais affecte ce tableau comme donne
//membre d'une autre classe
// CDISTableau2D<double> dDonneeMembreTableau2D;
// dDonneeMembreTableau2D(2,3)
je pensai faire dDonneeMembreTableau2D = dMonTableau2D
mais ca ne marche pas
je ne vois pas trop comment creer une surcharge de = pour ma classe avec template. Quelqu'un aurait il une idee ???
template <class T>
class CDISTableau2D
{
public:
CDISTableau2D();
CDISTableau2D(int iiNbElemI, int iiNbElemJ);
~CDISTableau2D();
T& operator() (int iiNbElemI, int iiNbElemJ);
T operator() (int iiNbElemI, int iiNbElemJ) const;
void AffecteNbElem(int iiNbElemI, int iiNbElemJ);
void DonneNbElem(int& ioiNbElemI, int& ioiNbElemJ);
void Initialise();
private:
bool _bInitialise;
T* _pValeur;
int _iNbElemI;
int _iNbElemJ;
};
// Constructeurs
template <class T> CDISTableau2D<T>::CDISTableau2D()
{
_iNbElemI = 0;
_iNbElemJ = 0;
_pValeur = 0;
_bInitialise = false;
}
template <class T> CDISTableau2D<T>::CDISTableau2D(int iiNbElemI, int iiNbElemJ)
{
if (iiNbElemI <= 0 || iiNbElemJ <= 0)
{
//throw BadIndex("Matrix constructor has 0 size");
cout << "bad index" << endl;
}
else
{
_iNbElemI = iiNbElemI;
_iNbElemJ = iiNbElemJ;
_pValeur = 0;
_bInitialise = false;
// Initialisation du tableau
Initialise();
}
}
// Destructeur
template <class T> CDISTableau2D<T>::~CDISTableau2D()
{
delete[] _pValeur;
}
// Affecte une taille au tableau
template <class T> void CDISTableau2D<T>::AffecteNbElem(int iiNbElemI, int iiNbElemJ)
{
_iNbElemI = iiNbElemI;
_iNbElemJ = iiNbElemJ;
// Initialisation du tableau
Initialise();
}
// Donne le nombre de lignes et de colones
template <class T> void CDISTableau2D<T>::DonneNbElem(int& ioiNbElemI, int& ioiNbElemJ)
{
ioiNbElemI = _iNbElemI;
ioiNbElemJ = _iNbElemJ;
}
// Initialisation du tableau
template <class T> void CDISTableau2D<T>::Initialise()
{
_pValeur = (new T[_iNbElemI * _iNbElemJ]);
if (_pValeur != NULL && _bInitialise == false)
{
for (int i = 0; i < _iNbElemI; i++)
{
for (int j = 0; j < _iNbElemJ; j++)
{
_pValeur[_iNbElemJ*i + j]=0;
}
}
_bInitialise = true;
}
}
// surchage de l'oerateur ()
template <class T> T& CDISTableau2D<T>::operator() (int iiNbElemI, int iiNbElemJ)
{
if (iiNbElemI >= _iNbElemI || iiNbElemJ >= _iNbElemJ)
//throw BadIndex("Matrix subscript out of bounds");
cout << "bad index" << endl;
return _pValeur[_iNbElemJ*iiNbElemI + iiNbElemJ];
}
// surchage de l'operateur ()
template <class T> T CDISTableau2D<T>::operator() (int iiNbElemI, int iiNbElemJ) const
{
if (iiNbElemI >= _iNbElemI || iiNbElemJ >= _iNbElemJ)
//throw BadIndex("const Matrix subscript out of bounds");
cout << "bad index" << endl;
return _pValeur[_iNbElemJ*iiNbElemI + iiNbElemJ];
}