class A
{
public:
    void F1() { cout << "A::F1()\n"; }    
    virtual void F2() { cout << "A::F2()\n"; }
};
class B : public A
{
public:
    void F1() { cout << "B::F1()\n"; }    
    void F2() { cout << "B::F2()\n"; }
};
int main()
{
    A a;
    a.F1(); // affiche "A::F1()"
    a.F2(); // affiche "A::F2()"
    B b;
    b.F1(); // affiche "B::F1()"
    b.F2(); // affiche "B::F2()"
    // copie non polymorphique
    a = b;
    a.F1(); // affiche "A::F1()"
    a.F2(); // affiche "A::F2()"
    // utilisation polymorphique de B (par pointeur)
    A * pa = &b;
    pa->F1(); // affiche "A::F1()"
    pa->F2(); // affiche "B::F2()" <-- grace à virtual
    // utilisation polymorphique de B (par référence)
    A & ra = b;
    ra.F1(); // affiche "A::F1()"
    ra.F2(); // affiche "B::F2()" <-- grace à virtual
}
			
		
 
	
Partager