Referera till basklasser

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.