begin process at 2012 05 29 08:56:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

héritage et surcharge opérateur <<


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

héritage et surcharge opérateur <<

mercredi 17 janvier 2007 à 22:20:27 | héritage et surcharge opérateur <<

gniouf63

Bonjour à tous
j'espère ne pas mettre trompé de thème voila je developpe sous microsoft visual c++6  et je me demandais si il était possible de surcharger virtuellement l'opérateur de sortie << voila un apercu de mon code :

class Mere //class abstraite
{
    ......
    virtual fstream & operator << (fstream & sortie)=0;
    ....
}

class Fille :  public  Mere
{
     .....
    virtual fstream & operator << (fstream & sortie);
    ....
}

Jusque là aucun problème de compilation cependant si j'appelle la fonction de cette manière :

Mere *ptr;
sortie<<(*ptr);

J'obtiens l'erreur suivante :
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class Mere' (or there is no acceptable conversion)

Je vous remercie d'avance =)
@bientot

mercredi 17 janvier 2007 à 22:53:20 | Re : héritage et surcharge opérateur <<

rrk275

Je pense que ton problème vient du fait que tu reitere le terme virtual dans la classe fille ...
Je te passe un exemple fonctionnant  b est fils de a :


#include <stdio.h>

class a
{
public:
  int nb;
  virtual void operator << (a & other)=0;
};

class b : public a
{
  void  operator << (a & other)
  {
    nb += other.nb;
  }
};

int main()
{
  a * l1 = new b,*l2 = new b;
  l1->nb = 5;
  l2->nb = 1000;
  *l1<<*l2;
  printf("%d %d\n",l1->nb,l2->nb);
}




mercredi 17 janvier 2007 à 22:53:54 | Re : héritage et surcharge opérateur <<

rrk275

mince .. manque le return 0; à la fin .. je vais me faire taper sur les doigts ^^

Louis
jeudi 18 janvier 2007 à 01:56:42 | Re : héritage et surcharge opérateur <<

luhtor

Pour des questions de lisibilité, mieux  vaut toujours mettre le virtual meme dans la classe fille, rien que pour bien voir que la fonction est également présente dans la classe mère.
Mais dans ton cas, je vois pas comment ca pourrait marcher. L'opérateur que tu as créés n'a rien a voir avec celui que tu utilises.

Mere object;
object << Mere ou Fille;

Toi tu as la sortie a gauche et la classe Mere a droite, et dans ta classe tu définies l'inverse. Faut créer une fonction externe, amie ou pas:

friend std::stream & operator << (const Mere & object);
friend std::stream & operator << (const Fille & object);

mais tu auras pas de polymorphisme la dessus, donc un object Fille converti en Mere, ne fonctionnera pas exactement comme voulu avec l'opérateur <<.

Au lieu d'utiliser l'opérateor <<, mieux vaut utiliser une fonction membre virtuelle pour faire jouer le polymorphisme.
jeudi 18 janvier 2007 à 12:20:28 | Re : héritage et surcharge opérateur <<

gniouf63

j'ai trouvé la réponse finalement voila ce que ca donne :

lass Mere //class abstraite
{
    ......
    friend fstream & operator << (fstream & sortie, const Mere &);  //appelle la fonction ecritureSortie qui est virtuelle
    virtual void ecritureSortie(fstream & sortie)=0;
    ....
}

class Fille :  public  Mere
{
     .....
    virtual void ecritureSortie(fstream & sortie);
    ....
}

merci a vous et bonne journée



Cette discussion est classée dans : class, mere, sortie, opérateur, virtual


Répondre à ce message

Sujets en rapport avec ce message

export class via dll probleme (cpp)? [ par cheroua ] salut, Voici la classe à partir de laquelle je genère une dll... J'utilise une méthode explicite p truc interessant pour les debutants [ par foxz ] ma question : est-ce portable ?ya t-il une autre solution ?non je ne demanderais pas si c safe thread :-))) (a priori ca l'est)class A{   int hidden;  Ma première sérialisation d'objet [ par jex0519 ] Bonjour à tous,Je suis débutant en c++, et j'ai un projet ou je dois sauvegarder mes objets afin de pouvoir les recharger après...<br multi heritage [ par foxz ] Bonjour,d'une maniere general.class strm{ // base stream virtual int w(void*,int)=0; // write virtual int r(void*,int)=0; //read};class fil:virtual pu class A:public int ??? [ par foxz ] J'ai besoin de faire ca : class A:public int{}; mais ca ne marche pas. (ni avec float) En fait, je veux cree une class ressemblant a un int mais j'a class et fstream [ par yvesyves ] Bonjour j'ai créé la classe suivante...#include class Machin{    ...    private :        std::ifstream StreamIn;};A la compilation j'ai cette erreur s probleme cpp class [ par leroiloup ] ce programme ne m'affiche rient#include#include#includeusing namespace std;class Ahmed{      public:         Ahmed(){};             virtual void a Probleme d'heritage [ par bakibak ] Bonjour a tous, je suis en train de coder un projet pour la gestion d'un zoo a la fac.Sans tout vous décrire j'ai une classe personne et deux classe h compile à plusieurs fichiers [ par ntrvdonett ] Bonsoir,Au risque de faire rire, j'ai un problème de compilation en mettant une class dans un fichier à part, je rame depuis deux heure pour rien, et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales