lucyhle
Messages postés15Date d'inscriptiondimanche 18 mai 2008StatutMembreDernière intervention15 avril 2010
-
27 mai 2008 à 12:27
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 2008
-
27 mai 2008 à 13:07
Bonjour,
J'ai des trous de mémoires de de compétences sur la surcharge d'opérateur.
A quoi ca sert?
Par exemple ici: pourquoi surcharge t'on les opérateur -> et * ?
Fichier CPtr.h
#if !defined __CPTR_H__
#define __CPTR_H__
namespace std
{
template <typename T> // Pourquoi ne met on pas template <class T> Quelle est la différence? class CPtr
{
protected :
T * m_Ptr;
public :
CPtr (void);
~CPtr (void);
T & operator * (void) throw ();
const T & operator * (void) const throw (); // non obligatoire?? T * operator -> (void) throw ();
const T * operator -> (void) const throw (); // non obligatoire??
private
CPtr & operator = (const CPtr & Ptr);
CPtr (const CPtr & Ptr);
}; // CPtr
} // namespace std
#include "CPtr.hxx"
#endif /* __CPTR_H__ */
Fichier CPtr.cxx
#if !defined __CPTR_HXX__
#define __CPTR_HXX__
#include "CPtr.h"
#define TEMPL template <class T> // class ou typename? #define TEMPLINL TEMPL inline
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 27 mai 2008 à 13:07
"pourquoi surcharge t'on les opérateur -> et * ?"
Pour pouvoir écrire ca:
CPtr<float> myPtr;
*myPtr = 4.0f;
ou ca: CPtr myObject;
myObject->UneMethodeQuelconque();
" template <typename T> // Pourquoi ne met on pas template <class T> Quelle est la différence?"
Aucune différence ici.
"const T & operator * (void) const throw (); // non obligatoire?? const T * operator -> (void) const throw (); // non obligatoire??"
Si, c'est nécessaire, sinon un code de ce genre de pourra pas fonctionner:
void UneFonction(const CPtr & _unObject)
{
_unObject->UneMethode();
// L'objet est ici (const CPtr), donc l'opérateur "const T * operator -> (void) throw ();" n'est pas disponible. Seule la version "const" l'est.
}
#define TEMPL template <class T> // class ou typename?
Pareil: c'est équivalent ici.