Under normala förhållanden , metoder i C + + kan inte dela ett namn . Detta orsakar fel genom att införa möjligheten till förvirring i metod referenser . En programmerare som vill använda samma namn för en metod , men omdefiniera den metod som bygger på olika parametrar , har två alternativ . Programmeraren kan överbelasta funktion med samma namn , men att ändra argument metoden . Dessutom, om programmeraren använder en härledd klass han eller hon kan åsidosätta en funktion av en basklass att utföra olika funktioner . Överbelastning Metoder
När en programmerare deklarerar en metod , som namnet oftast inte kan utse en annan metod med annan kod inuti . Undantaget till detta är då argumenten för metoden skiljer . Till exempel kan en programmerare definiera metoden " beräkna " för att ta ett heltal som argument :
int beräkna ( int x ) katalog
Enligt reglerna i C + + , en annan metod som heter " beräkna ", som tar ett heltal som argument inte skulle kunna existera , oberoende av koden inuti metoden. Men , skulle en annan metod med samma namn och olika argument existerar :
int beräkna ( double x ) katalog
typ eller argument när metoden anropas skulle avgöra vilken metod exekverar
.
Begränsningar
finns begränsningar för hur metoden överbelastning fungerar i C + + . För att överbelasta ett metodnamn , måste de argument använda olika datatyper , eller skiljer sig i mängden utsedda argument. Metoder som returnerar olika värden , men delar ett namn och identiska argument listan , är inte tillåtna i C + + . Metoder med identiska namn och argument som bara skiljer sig på grund av en annan typ namn ( eller ge en befintlig datatyp ett annat namn ) är inte heller tillåtet . Till exempel :
typdef int fake_int ,
int write ( int x ) katalog
dubbel write ( int x ) katalog
int write ( fake_int x )
ingen av dessa tre metoden definitioner följa reglerna för förfarandet överbelastning och kommer tillbaka ett felmeddelande .
Härledning
annat sätt att överbelasta en metod är genom klass härledning . Vid konstruktion av klass , kan en programmerare gör en klass ärver funktioner från en annan klass . Den ärva ( härledd ) klass kan använda metoderna för klassen den ärver från ( basklass ) . En basklass ( klass X ) kan ha en metod " print " definieras . En annan klass ( klass Y ) som härrör från klass X har också tillgång till utskrift . Dock kunde klass Y definierar också sin egen version av den tryckta metoden . I detta fall kommer utskriften metoden exekveras vara den som definieras i klass Y , om inte programmeraren anger att klass X versionen av tryck ska köras .
Exempel
ett exempel på en metod omdefinieras genom en härledd klass omfattar två klasser . Först basklassen :
class First (
allmänheten :
int x ;
int returnX ( ) {
avkastning x ;
}
};
Sedan en härledd klass som omdefinierar " returnX ( ) "-metoden :
klass Second : offentlig Först {
allmänheten :
int returnX ( ) {
retur x +1;
}
};
den "andra " klass har tillgång till variabeln " x " och metoden " returnX ( ) " som är en del av den " första " klass . Men omdefinierar andra den returnX ( ) metoden i sin egen definition . Detta innebär att när ett objekt av klassen Second anropar returnX ( ) metoden , kommer returvärdet vara x +1 .