[C/C++] Surcharge d'opérateurs
lucyhle
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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
#define CPTR std::CPtr <T>
TEMPLINL CPTR:: CPtr (void) { m_Ptr = new T(); }
TEMPLINL CPTR::~CPtr (void) { delete m_Ptr; }
TEMPLINL
T & CPTR::operator * (void) throw () { return *m_Ptr; }
TEMPLINL
const T & CPTR::operator * (void) const throw () { return *m_Ptr; }
TEMPLINL
T * CPTR::operator -> (void) throw () { return m_Ptr; }
TEMPLINL
const T * CPTR::operator -> (void) const throw () { return m_Ptr; }
#undef CPTR
#undef TEMPLINL
#undef TEMPL
#endif /* __CPTR_HXX__ */
Merci pour votre aide, j'ai rajouté quelques autres questions qui me trotter dans la tête...
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
#define CPTR std::CPtr <T>
TEMPLINL CPTR:: CPtr (void) { m_Ptr = new T(); }
TEMPLINL CPTR::~CPtr (void) { delete m_Ptr; }
TEMPLINL
T & CPTR::operator * (void) throw () { return *m_Ptr; }
TEMPLINL
const T & CPTR::operator * (void) const throw () { return *m_Ptr; }
TEMPLINL
T * CPTR::operator -> (void) throw () { return m_Ptr; }
TEMPLINL
const T * CPTR::operator -> (void) const throw () { return m_Ptr; }
#undef CPTR
#undef TEMPLINL
#undef TEMPL
#endif /* __CPTR_HXX__ */
Merci pour votre aide, j'ai rajouté quelques autres questions qui me trotter dans la tête...
A voir également:
- [C/C++] Surcharge d'opérateurs
- Surcharge antenne - Forum TNT / Satellite / Réception
- Surcharge lnb - Forum TNT / Satellite / Réception
- Court circuit LNB - Forum TNT / Satellite / Réception
- Surcharge du circuit LNB - Forum TNT / Satellite / Réception
- Quels sont les préfixes des opérateurs de téléphonie mobile en france - Guide
1 réponse
Salut.
Je ne savait même pas que ces opérateurs était surchargeable.
C'est pourtant simple.
Tu as une class CPtr, si tu considère la code suivant :
Je n'ai jamais compris non plus la différence entre class ou typename, pour moi, c'est pareil, si il y a une différence, elle est subtil.
Je ne savait même pas que ces opérateurs était surchargeable.
C'est pourtant simple.
Tu as une class CPtr, si tu considère la code suivant :
CPtr ptr<double>,*pptr; *ptr=2.3; //n'as de sens que si l'opérateur * unaire a été surchargé. ptr->=\0x00000;// tu manipule directement le pointeur *pptr=ptr;//assignation de class classique.Du moins, c'est comme ça que je le comprends.
Je n'ai jamais compris non plus la différence entre class ou typename, pour moi, c'est pareil, si il y a une différence, elle est subtil.