Ibland kan en ärvd klass behöva referera till någon av sina basklasser på något sätt. Är det frågan
om metoder som inte är överlagrade som den ärvda klassen kan anropa är det bara att anropa
dessa. Vill en klass dock referera till en överlagrad emtod från en basklass är det dock svårare. Om
t.ex. Circle av någon orsak vill referera till metoden
area() hos basklassen Shape fungerar det inte med att
direkt anropa metoden area(), eftersom man då anropar den överlagrade
versionen av area() i Circle. Man måste explicit kunna
referera till basklassens metod. Det kan man göra genom att placera basklassens namn följt av
:: före metodnamnet. Om vi alltså vill göra ovannämda anrop gör vi följande:
void Circle::foo () {
// anropa area() från Shape
float Area = Shape::area();
} |
Notera att denna syntax kan endast användas av objektet själv, d.v.s. det måste göras inifrån en
metod som tillhör klassen. Varför vill man göra detta då? Man kanske har en situation där en
virtuell metod i en basklass gör någon viss uppgift, och en subklas vill lägga någon viss
funktionalitet till. Man överlagrar då metoden i subklassen och implementerar den nya
funktionaliteten i denna metod. Basklassens motsvarande metod används ju då inte längre för
subklassen. Istället för att kopiera den kod som basklassen utför till subklassen kan man explicit
anropa den överlagrade metoden från basklassen met syntaxen ovan. Beroende på sitautionen kan man
anropa metoden t.ex. före den egna extra funktionalitetn utförs. På så vis kan man använda sig av
existerande kod på ett snyggt sätt, utan cut'n'paste.