La programmation orientée objet, permet la liaison dynamique. Si tout objet a un type statique (déterminé à la compilation par les règles de la portée lexicale), il peut aussi avoir un lien dynamique vers un autre type héritier de ce type statique. Par exemple:
class A{ public: virtual void f(); } a, *pa; class B: public A{ public: void f(); void g(); } b; //... pa=&b; pa->f(); // appel de B::f()Ici,
pa
est une adresse d'un objet de type pointeur sur A
,
le type (statique) de
*pa
est A
, mais le lien associé après l'affectation sera
B
, et le nom f
sera associé à la définition de B::f
.
Cependant, pour la syntaxe, seule le type statique est pris en compte (par
exemple, pa->g()
est illégal).
La liaison dynamique ne C++ sera étudiée plus tard.