Video: structs-0 2024
Biblioteca standard C ++ oferă un set complet de operații matematice, de timp, de intrare / ieșire și DOS, pentru a numi doar câteva. Multe dintre programele timpurii pe care le înveți ca începători utilizează așa-numitele funcții de caractere caractere definite în fișierele de fișiere includ .
Tipurile de argument pentru multe dintre aceste funcții sunt fixe. De exemplu, ambele argumente pentru strcpy (char *, char *) trebuie să fie un pointer la un șir de caractere cu null terminat - nimic altceva nu are sens.
Există funcții care se aplică tipurilor multiple. Luați în considerare exemplul funcției low maximum (), care returnează maximum două argumente. Toate variantele următoare au sens:
int maxim (int n1, int n2); // returnează maxim două numere maxime nesemnate (nesemnate u1, nesemnate u2); maxim dublu (dublu d1, dublu d2); char maximum (char c1, char c2);
Aici doriți să implementați maximum () pentru toate cele patru cazuri.
Bineînțeles, ați putea supraîncărca maxim () cu toate versiunile posibile:
maxim dublu (dublu d1, dublu d2) {retur (d1> d2)? d1: d2;} int maximă (int n1, int n2) {retur (n1> n2)? n1: n2;} char maximum (char c1, char c2) {retur (c1> c2)? c1: c2;} // … se repetă pentru toate celelalte tipuri numerice …
Această abordare funcționează. Acum C ++ selectează cea mai bună potrivire, maximă (int, int) , pentru o referință cum ar fi maximum (1, 2) . Totuși, crearea aceleiași funcții pentru fiecare tip de variabilă este o pierdere brută de timp.
Codul sursă pentru toate funcțiile maxime (T, T) urmează același model, unde T este unul dintre tipurile numerice. Ar fi atât de convenabil dacă ați putea scrie funcția o dată și l-ați lăsat pe C ++ să furnizeze tipul T după cum este necesar atunci când se folosește funcția. De fapt, C ++ vă permite să faceți exact acest lucru. Ele sunt denumite definiții șablon .