IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

matser

shared_ptr et polymorphisme

Noter ce billet
par , 15/03/2021 à 14h43 (664 Affichages)
Bonjour,

j'ai voulu savoir comment on fait une méthode polymorphe avec shared_ptr, mais je n'ai pas trouvé mon bonheur. J'ai donc dû expérimenter diverse technique, infructueuses. Alors voici mes conclusions:
Voici deux classe B et C qui héritent d'une classe A, avec, dans celle-ci, une méthode virtuelle pure (évidement, on est pas obligé de rendre la classe A abstraite) :
classes.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A{
public:
  virtual void quelObjet()=0;
};

class B:public A{
public:
  void quelObjet()override;
};

class C:public A{
public:
  void quelObjet()override;
};
classes.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "classes.hpp"

void B::quelObjet(){
  std::cout<<"objet B"<<std::endl;
}

void C::quelObjet(){
  std::cout<<"objet C"<<std::endl;
}
et main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <memory>
#include <vector>
#include "classes.hpp"

int main(){
  std::vector<std::shared_ptr<A>>V;
  auto b=std::shared_ptr<A>(new B);
  auto c=std::shared_ptr<A>(new C);
  b->quelObjet();
  c->quelObjet();
  V.push_back(b);
  V.push_back(c);
  V[0]->quelObjet();
  V[1]->quelObjet();
}
lorsque l'on exécute tout ça, on obtient bien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
objet B
objet C
objet B
objet C
les appels "b->quelObjet()" et "V[0]->quelObjet()" sont bien les appels de "quelObjet()" de la classe B et les appels "c->quelObjet()" et "V[1]->quelObjet" les appels de "quelObjet()" de la classe C

Envoyer le billet « shared_ptr et polymorphisme » dans le blog Viadeo Envoyer le billet « shared_ptr et polymorphisme » dans le blog Twitter Envoyer le billet « shared_ptr et polymorphisme » dans le blog Google Envoyer le billet « shared_ptr et polymorphisme » dans le blog Facebook Envoyer le billet « shared_ptr et polymorphisme » dans le blog Digg Envoyer le billet « shared_ptr et polymorphisme » dans le blog Delicious Envoyer le billet « shared_ptr et polymorphisme » dans le blog MySpace Envoyer le billet « shared_ptr et polymorphisme » dans le blog Yahoo

Mis à jour 15/03/2021 à 15h17 par matser

Catégories
Sans catégorie

Commentaires