Video: 105 STL Algorithms in Less Than an Hour 2024
Standard C ++-biblioteket ger en komplett uppsättning matte, tid, inmatning / utmatning och DOS-operationer, för att bara nämna några. Många av de tidiga program som du lär dig som nybörjare använder de så kallade teckensträngsfunktionerna som definieras i de inkluderade filsträngarna .
Argumenttyperna för många av dessa funktioner är fasta. Till exempel måste båda argumenten till strcpy (char *, char *) vara en pekare till en nollställd teckensträng - inget annat är meningsfullt.
Det finns funktioner som gäller för flera typer. Tänk på exemplet på funktionen lowly maximum (), som ger maximalt två argument. Alla följande variationer är meningsfulla:
int maximum (int n1, int n2); // returnera max av två heltal unsigned maximum (unsigned u1, unsigned u2); dubbel max (dubbel d1, dubbel d2); char max (char c1, char c2);
Här vill du genomföra maximal () för alla fyra fallen.
Du kan självklart överbelasta maximalt () med alla möjliga versioner:
Dubbel max (dubbel d1, dubbel d2) {retur (d1> d2)? d1: d2;} int max (int n1, int n2) {return (n1> n2)? n1: n2;} char max (char c1, char c2) {retur (c1> c2)? c1: c2;} // … upprepa för alla andra numeriska typer …
Denna metod fungerar. Nu väljer C ++ den bästa matchen, max (int, int) , för en referens som maximal (1, 2) . Att skapa samma funktion för varje typ av variabel är dock ett bruttoavfall av tid.
Källkoden för alla maximala (T, T) funktioner följer samma mönster, där T är en av de numeriska typerna. Det skulle vara så bekvämt om du kunde skriva funktionen en gång och låt C ++ leverera typen T som behövs när funktionen används. Faktum är att C ++ kan du göra exakt detta. De kallas malldefinitioner .