CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Polymorphisme et ambiguité d'appel

Fvirtman
Fvirtman
Niveau 10
01 août 2006 à 11:17:13

Petit probleme objet : need help !
Voici comment est structué mon petit projet :

class Commun
{

friend ostream operator<<(ostream& o,Commun&);
// 1)
};

class Base : public Commun
{

virtual void plouf()=0; // virtuel pure, donc
Base est virtuelle pure
};

classe Fille : public Base
{
void plouf();
friend ostream operator<<(ostream& o,Fille&);
// 2)
}

A un endroit, j´ai
Base* B = new Fille(....);

et puis un moment, je veux faire :
cout << *B;

forcément, il m´appelle 1) ....
Moi je voudrais qu´il m´appelle 2).
Le soucis, c´est qu´on ne peut pas associer friend et virtual, et que les 200 Filles possibles de base contiennent une surcharge de << en friend.

Comment feriez vous pour que si j´appelle mon cout, j´ai l´appel de la fille ?

Altonfrere
Altonfrere
Niveau 10
01 août 2006 à 11:46:00

simple question tu fais quoi dans le cout ensuite ? (pour Commun et Fille)

tu peux peut être faire des accesseurs virtuels pour les infos à afficher (que tu réécris donc dans les classes filles de Commun)

class Commun
{
friend ostream operator<<(ostream& o,Commun&);

virtual const char *getData() { return "Commun"; }
};

class Fille : public Base
{
public:
const char *getData() { return "Fille"; }
};

et dans ton << :
ostream operator<<(ostream& o,Commun&)
{
// appel à getData() quelquepart
}

Fvirtman
Fvirtman
Niveau 10
01 août 2006 à 11:56:22

je genere du XML. enfin peu importe en fait.
je pense que je vais "defriendiser" les operateurs << et foutre une virtuelle pure, et on n´en parle plus...

Fvirtman
Fvirtman
Niveau 10
01 août 2006 à 12:27:59

autre probleme du coup... :(

class First
{
ostream operator<<(ostream& o);
};

class Second : public First
{
ostream operator<<(ostream& o);
};

ostream Second::operator<<(ostream& o)
{
return o << "truc" << (First&)(*this); //
la ça ne compile pas
}

Je voudrais pouvoir, dans la méthode Second::operator<<, appeler l´opérateur de First.
Je me prends un :

error C2679: binary ´<<´ : no operator defined which takes a right-hand operand of type ´class First´ (or there is no acceptable conversion)
Une idée ?

godrik
godrik
Niveau 30
01 août 2006 à 15:03:33

et pourquoi pas un appel explicite:
ostream Second::operator<<(ostream& o)
{
o << "truc" ;
return First::operator<< (o);
}

Fvirtman
Fvirtman
Niveau 10
01 août 2006 à 15:56:28

Merci Godrik ! :) ça m´a bien bien débloqué !
Maintenant, j´ai encore des problemes de conception, mais je vais étudier ça !

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment