Rechercher : dans
Par :

[C/C++] Surcharge d'opérateurs

Dernière réponse le 27 mai 2008 à 08:47:41 lucyhle, le 26 mai 2008 à 22:29:28 
 Signaler ce message aux modérateurs

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...

Configuration: Linux
Firefox 2.0.0.12

Meilleures réponses pour « [C/C++] Surcharge d'opérateurs » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. Voir Les fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Entrées/sorties : Les flux en C++ VoirEntrées/sorties : les flux en C++ 1. Ouvrir un fichier en lecture 1.1 Ouverture du fichier "donnees.txt" en lecture 1.2 Lecture du contenu de "donnees.txt" 2. Ouvrir un fichier en écriture 2.1 Ouverture du fichier "donnees.txt" en...
Langage C - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Langage C++ - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

 Char Snipeur, le 27 mai 2008 à 08:47:41

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 :

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. Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur