Polymorfismi (polymorphism, monimuotoisuus) ilmenee myös osoitinmuuttujia käytettäessä. Osoitinmuuttuja voi olla kantaluokan osoittimeksi esitelty, mutta siitä huolimatta siihen voidaan sijoittaa johdetun luokan olion osoite. Tällöin käytettävissä on tietysti vain ne olion ominaisuudet, jotka ovat samoja kuin kantaluokassa. Virtuaalisten funktioiden tapauksessa kutsutaan saman (tai lähinnä ylimmän = perityn) luokan funktiota, johon osoitin sillä hetkellä osoittaa.
Lisätään esimerkiksi edelliseen ympyrä- esimerkkiin (CIRCLE.CPP) osoitin graafiseen olioon. Seuraavassa ensimmäiset kutsut kutsuvat pisteen funktioita ja jälkimmäiset ympyrän funktioita:
... cPiste a; cYmpyra y; caKuvio *p; // p voi osoittaa mihin tahansa saman tai aliluokan olioon! p = &a; p->sytyta(); p->siirra(1,2); // Piirtää pisteen p = &y; p->sytyta(); p->siirra(4,5); // Piirtää ympyränTässä ei ole kyseessä sama asia kuin funktioiden kuormittamisessa (lisämäärittely, overloading), päinvastoin, virtuaalisten metodien tulee olla määritelty täsmälleen samoin parametrein kussakin luokassa.