Predloge C ++

V tem članku boste izvedeli več o predlogah v jeziku C ++. Naučili se boste uporabljati moč predlog za generično programiranje.

Predloge so zmogljive funkcije C ++, ki vam omogoča pisanje generičnih programov. Preprosto povedano, lahko ustvarite eno funkcijo ali razred za delo z različnimi tipi podatkov s pomočjo predlog.

Predloge se pogosto uporabljajo v večji programski bazi za večkratno uporabo in prilagodljivost programov.

Koncept predlog se lahko uporablja na dva različna načina:

  • Predloge funkcij
  • Predloge za predavanja

Predloge funkcij

Predloga funkcije deluje podobno kot običajna funkcija z eno ključno razliko.

Predloga ene funkcije lahko deluje hkrati z različnimi tipi podatkov, vendar lahko ena običajna funkcija deluje samo z enim nizom podatkovnih tipov.

Če morate na dveh ali več vrstah podatkov izvesti enake operacije, s preobremenitvijo funkcije ustvarite dve funkciji z zahtevano izjavo funkcije.

Vendar bi bil boljši pristop uporaba predloge funkcij, ker lahko isto nalogo zapišete manj in vzdržno kodo.

Kako prijaviti predlogo funkcije?

Predloga funkcije se začne s predlogo ključne besede, ki ji sledijo parametri / s predloge, ki ji sledi izjava funkcije.

 predloga < razred T> T someFunction (T arg) (…)

V zgornji kodi je T argument predloge, ki sprejema različne vrste podatkov (int, float), razred pa je ključna beseda.

typenameNamesto razreda lahko v zgornjem primeru uporabite tudi ključno besedo .

Ko se argumentu podatkovnega tipa posreduje someFunction( ), prevajalnik ustvari novo različico someFunction()za dani podatkovni tip.

Primer 1: Predloga funkcije za iskanje največjega števila

Program za prikaz največjih med dvema številkama s pomočjo funkcijskih predlog.

 // If two characters are passed to function template, character with larger ASCII value is displayed. #include using namespace std; // template function template T Large(T n1, T n2) ( return (n1> n2) ? n1 : n2; ) int main() ( int i1, i2; float f1, f2; char c1, c2; cout <> i1>> i2; cout << Large(i1, i2) <<" is larger." << endl; cout <> f1>> f2; cout << Large(f1, f2) <<" is larger." << endl; cout <> c1>> c2; cout << Large(c1, c2) << " has larger ASCII value."; return 0; )

Izhod

Vnesite dve celi števili: 5 10 10 je večje. Vnesite dve številki s plavajočo vejico: 12,4 10,2 12,4 je večje. Vnesite dva znaka: z Z z ima večjo vrednost ASCII.

V zgornjem programu Large()je definirana predloga funkcije, ki sprejme dva argumenta n1 in n2 podatkovnega tipa T. Tpomeni, da je lahko argument katere koli podatkovne vrste.

Large() funkcija vrne največjega med obema argumentoma s preprosto pogojno operacijo.

Znotraj main()funkcije, spremenljivke tri različne vrste podatkov: int, floatin charse prijavi. Nato se spremenljivke posredujejo v Large()predlogo funkcije kot običajne funkcije.

Med izvajanjem, ko se celo število prenese v funkcijo predloge, prevajalnik ve, da mora ustvariti Large()funkcijo za sprejem argumentov int, in to stori.

Podobno, ko se posredujejo podatki s plavajočo vejico in podatki char, pozna tipe podatkov argumenta in ustrezno generira Large()funkcijo.

Tako je samo ena predloga funkcije nadomestila tri enake običajne funkcije in omogočila vzdrževanje kode.

Primer 2: Zamenjajte podatke s pomočjo funkcijskih predlog

Program za zamenjavo podatkov s pomočjo funkcijskih predlog.

 #include using namespace std; template void Swap(T &n1, T &n2) ( T temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( int i1 = 1, i2 = 2; float f1 = 1.1, f2 = 2.2; char c1 = 'a', c2 = 'b'; cout << "Before passing data to function template."; cout << "i1 = " << i1 << "i2 = " << i2; cout << "f1 = " << f1 << "f2 = " << f2; cout << "c1 = " << c1 << "c2 = " << c2; Swap(i1, i2); Swap(f1, f2); Swap(c1, c2); cout << "After passing data to function template."; cout << "i1 = " << i1 << "i2 = " << i2; cout << "f1 = " << f1 << "f2 = " << f2; cout << "c1 = " << c1 << "c2 = " << c2; return 0; ) 

Izhod

Preden podatke prenesete v predlogo funkcije. i1 = 1 i2 = 2 f1 = 1,1 f2 = 2,2 c1 = a c2 = b Po posredovanju podatkov v predlogo funkcije. i1 = 2 i2 = 1 f1 = 2,2 f2 = 1,1 c1 = b c2 = a

V tem programu se namesto klica funkcije s predajo vrednosti izda klic s sklicem.

Swap()Predloga funkcija ima dva argumenta in jih zamenjave z referenco.

Predloge za predavanja

Tako kot predloge funkcij lahko tudi za generične operacije razredov ustvarite predloge razredov.

Včasih potrebujete izvedbo razreda, ki je enaka za vse razrede, le uporabljeni tipi podatkov so različni.

Običajno bi morali za vsak podatkovni tip ustvariti drugačen razred ALI v enem razredu ustvariti različne spremenljivke in funkcije članov.

To bo po nepotrebnem napihnilo vašo kodno podlago in jo bo težko vzdrževati, saj je sprememba ena razred / funkcija, ki jo je treba izvesti za vse razrede / funkcije.

Predloge razredov pa olajšajo ponovno uporabo iste kode za vse vrste podatkov.

Kako razglasiti predlogo razreda?

 template < class T> class className (… public: T var; T someOperation (T arg);…);

V zgornji izjavi Tje argument predloge, ki je ograda za uporabljeni tip podatkov.

Znotraj telesa razreda sta spremenljivka člana var in funkcija člana someOperation()tipa T.

Kako ustvariti predmet predloge razreda?

Če želite ustvariti predmet predloge razreda, morate med ustvarjanjem določiti podatkovni tip znotraj .

 className classObject; 

Na primer:

className classObject; className classObject; className classObject;

Primer 3: Preprost kalkulator z uporabo predloge Class

Program za seštevanje, odštevanje, množenje in deljenje dveh števil s pomočjo predloge predavanja

 #include using namespace std; template class Calculator ( private: T num1, num2; public: Calculator(T n1, T n2) ( num1 = n1; num2 = n2; ) void displayResult() ( cout << "Numbers are: " << num1 << " and " << num2 << "." << endl; cout << "Addition is: " << add() << endl; cout << "Subtraction is: " << subtract() << endl; cout << "Product is: " << multiply() << endl; cout << "Division is: " << divide() << endl; ) T add() ( return num1 + num2; ) T subtract() ( return num1 - num2; ) T multiply() ( return num1 * num2; ) T divide() ( return num1 / num2; ) ); int main() ( Calculator intCalc(2, 1); Calculator floatCalc(2.4, 1.2); cout << "Int results:" << endl; intCalc.displayResult(); cout << endl << "Float results:" << endl; floatCalc.displayResult(); return 0; ) 

Izhod

Int rezultati: Številke so: 2 in 1. Seštevanje je: 3 Odštevanje je: 1 Izdelek je: 2 Delitev je: 2 Rezultati float: Številke so: 2.4 in 1.2. Seštevanje je: 3.6 Odštevanje je: 1.2 Izdelek je: 2.88 Delitev je: 2

V zgornjem programu Calculatorje navedena predloga predavanja .

Razred vsebuje dva zasebna člana tipa T: num1 & num2 in konstruktor za začetno uporabo članov.

Vsebuje tudi funkcije javnih članov za izračun seštevanja, odštevanja, množenja in deljenja števil, ki vrnejo vrednost podatkovnega tipa, ki ga je določil uporabnik. Prav tako funkcija displayResult()za prikaz končnega izhoda na zaslon.

V main()funkciji sta ustvarjena dva različna Calculatorpredmeta intCalcin floatCalcza podatkovne tipe: intin float. Vrednosti se inicializirajo s pomočjo konstruktorja.

Upoštevajte, da uporabljamo in med ustvarjanjem predmetov. Ti prevajalniku sporočajo vrsto podatkov, ki se uporablja za ustvarjanje razreda.

To ustvari definicijo razreda za intin float, ki se nato ustrezno uporabi.

Nato displayResult()se pokliče oba predmeta, ki izvede kalkulator in prikaže izhodne podatke.

Zanimive Članki...