Egy minta tartalmazhat tagmintákat is, amik lehetnek akár alprogramok is. A mintákat ki lehet terjeszteni, ez felel meg az öröklődésnek. A tagmintáknál meg kell adni, hogy melyik tag legyen virtuális, és melyik nem, illetve azt is, ha egy ősmintabeli tagot akarunk kiterjeszteni. Többszörös öröklődés nincs. Az objektumok közötti értékadás nem megengedett, csak a referenciát lehet módosítani. A minta tagjainak láthatóságát nem lehet korlátozni, minden mindenhonnan látható.
Virtuális minták esetén nincs hagyományos értelemben vett öröklődés, viszont van valami nagyon hasonló: a kiterjesztés. (Ha a minta nem virtuális, az öröklődés a felüldefiniálással egyenértékű.) A továbbiakban ezt öröklődésnek nevezzük. A minták öröklődésének formája:
Ahol
Az fent deklarált P egy olyan minta lesz,
Ha p_obj egy P mintájú objektum, akkor a végrehajtását a kódban egyszerűen a p_obj kifejezéssel, illetve a (... megfelelő paraméterek...) -> p_obj utasítással érhetjük el.
A p_obj végrehajtása három részből áll:
Ekkor a lefutási sorrend: 11->A; 22->D; 33->B;
Mint már említettük, van egy Object nevű minta, ami minden mintának az őse, bár ezt nem írjuk ki. Ennek segítségével lehet olyan eljárás-mintákat írni, melyek valamilyen egyéb mintával vannak paraméterezve. Ennek technikája az, hogy a mintában felveszünk egy
változót, és ezt a változót majd örököltetés közben átdefiniáljuk:
Példa:
A type bármely mintával átdefiniálható a register minta leszármazottjaiban, mivel az objectből származik, ami a legáltalánosabb szuperminta.
A workerRegiter mintában, mely a register almintája, a type attribútumot workerre definiálja át.
Lehetőség van virtuális minták definiálására is, ahol a virtuális minta deklarációja úgy néz ki, hogy:
illetve
Ahol az A.Nev egy virtuális minta (általában függvény), a B.Nev az A.Nev virtuális kiterjesztése és tovább kiterjeszthető, a C.Nev pedig szintén az A.Nev virtuális kiterjesztése, de tovább már nem terjeszthető ki, azaz úgy döntünk, hogy ez a végső változat (final binding). Ez annyiban újdonság, hogy az így deklarált mintákra késői összekapcsolás teljesül, azaz csak futásidőben dől el, hogy milyen kód fog lefutni egy függvényhívásra, tehát ez megfelel más nyelvek virtuális függvényeinek, de annyiban különbözik, hogy nem definiálhatók át, csak kiterjeszthetők.