Bonjour,

Il n'y a normalement pas de différence de fonctionnement entre un objet créé en statique ou en dynamique mais qu'en est il du polymorphisme?

Dans l'exemple ci-dessous, est il possible d'avoir un même comportement de la section "dynamique" et "statique" du main ou le polymorphisme n'a de sens qu'en manipulant des pointeurs?

Merci de m'éclairer sur ce point

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
#include <iostream>
 
using namespace std;
 
class ObjA
    {
    public:
        virtual void affiche(void) {cout << "c'est un ObjA" << endl;}
        virtual ObjA* giveMeAOuB(int index) {cout << "sans effet" << endl; return NULL;}
    };
 
class ObjB : public ObjA
    {
    public:
        virtual void affiche(void) {cout << "c'est un ObjB" << endl;}
        virtual ObjA* giveMeAOuB(int index) {if (index) return new ObjA(); else return new ObjB();}
    };
 
int main()
    {
    //Dynamique:
    ObjA *dynA = new ObjB();
    ObjA *dynB = dynA->giveMeAOuB(0);
    dynB->affiche();        //Affiche "c'est un objB"
    delete dynB;
 
    dynB = dynA->giveMeAOuB(1);
    dynB->affiche();        //Affiche "c'est un objA"
 
    delete dynA;
    delete dynB;
 
    //Statique:
    ObjA statA = ObjB();
    ObjA statB = *(statA.giveMeAOuB(0));
    statB.affiche();         //Affiche : "sans effet" "c'est un objA"
 
    statB = *(statA.giveMeAOuB(1));
    statB.affiche();        //Affiche : "sans effet" "c'est un objA"
 
    return 0;
    }