Je suis en train d'implémenter un vecteur, donc je voulais qu'il se comporte comme un tableau. C'est la raison pour laquelle j'ai essayé d'implémenter l'opérateur d'indexation, mais je n'ai pas réussi le bon comportement.C++: opérateur d'indexation surchargé
La mise en œuvre était quelque chose comme ceci:
template <typename value_type>
class Vector{
private:
value_type ** vector ;
long size ;
long usedSize ;
public:
/.../
value_type & operator [] (long) ; // For writing.
const value_type & operator [] (long) const ; // For reading.
/.../
}
template<typename value_type>
value_type & Vector<value_type>::operator[] (long index) {
if (index < 0 || index > usedSize)
return out_of_range() ;
else {
vector[index] = new value_type() ;
usedSize++ ;
return *(vector[index]) ;
}
}
template<typename value_type>
const value_type & Vector<value_type>::operator[] (long index) const {
if (index < 0 || index > usedSize)
return out_of_range() ;
else { return (*vector[index]) ; }
}
Puis-je tester le comportement de l'objet avec ceci:
int main (void) {
Vector<int> * v = new Vector (10) ; // Creates a vector of 10 elements.
(*v)[0] = 3 ;
int a = (*v)[0] ;
cout << "a = " << a << endl ;
}
Et je reçois ce de l'exécution:
$> a = 0
Certains threads recommandent d'utiliser une classe de gestionnaire surchargeant l'opérateur d'affectation, je me demande si il y a de toute façon à éviter l'utilisation d'un objet gestionnaire pour faire la tâche.
Merci d'avance.
Gonzalo d'Argentine.
Si votre 'usedSize' est initialisé à 0 alors aucun appel à 'operator []' ne retournerait 'out_of_range()' à la place d'un endroit dans votre tableau? À quoi ressemble 'out_of_range()'? – SirGuy
Je suis un peu confus par 'cout <<" a = "<< 0' - voulez-vous dire' cout << "a =" << a'? –
@GuyGreer Non! quand '' usedSize = 0' et 'index = 0' l'instruction conditionnelle est fausse, car index est égal à usedSize non supérieur. out_of_range est une exception C++ standard. Voyez-le [ici] (http://www.cplusplus.com/reference/stdexcept/out_of_range/) –