A sablonok mire vannak mire találták ki őket? Egy hete próbálom megérteni a c++ nak a sablonok nyelvi részét de nem megy.
A kulcsszó a kód újra felhasználás.
Nem kell ugyan azt újra és újra lekódolnod.
Igen tudom erre jó egy függvény is nem kell 1000 szer bele írnom a main() ba a kódot hanem meghívom csak mindig a függvényt és kész.
Nekem azzal van bajom,hogy nem tudom,hogyan kell használni a sablonokat mert nem értem.Ezt kéne elmagyaráznia valakinek.
Van egy általános listád. Ami tárol valamilyen elemeket, mondjuk számokat. Amikor beteszel egy elemet senki nem szól rád, hogy "hééé eddig csupa számot tettél be, most meg egy stringet" és amikor kiveszel akkor neked kell ellenőrizni, hogy amit kivettél az az-e amire számítasz! Kiveszed és számmá konvertálod, mert úgy gondolod, hogy szám van benne, közben meg az a string, hogy "tíz". Az ilyen hiba csak futásidőben fog kiderülni, amikor a felhasználónál ugrálnak elő a piros ablakok, hogy fatál error.
A sablonok használatával a sablon osztályból a fordító automatikusan generál egy osztályt, ami csak a sablonban megadott értékeket fogadja el és csak azokkal dolgozik. Ekkor már a fordító tudja ellenőrizni, hogy a list<int>-be te tényleg csak inteket tudsz bepakolni és csak is inteket fog neked visszaadni.
Aztán persze a sablonokkal lehet nagyon elborult dolgokat is csinálni, amik mind-mind fordítási időben hajtódnak végre.
Szóval arra vannak a sablonok ha esetleg nem tudom,hogy milyen típust fog fogadni a függvény akkor sablonokat használva úgyis a megfelelő típust behelyettesíti.
template <class T> T min(T a, T b) {
Itt a template kulcsszóval lehet sablonokat definiálni.
Akkor ez egy függvénysablon.
<> jelek között kell megadni azt,hogy mit is?
T lesz a típus az az a sablon egy példánya a T nem?
//main.cpp
#include<iostream>
template<class T> T osszead(const T, const T);
int main(){
return 0;
}
T osszead(const T x, const T y){
return x+y;
}
Itt azt írja,hogy nem létezik a T típus ezért nem fordul le.Igen amúgy igaza van a fordítónak.De akkor,hogyan csináljam meg?
main felett a függvény deklarációja main alatt meg a definíciója lenne.
//main.cpp
#include<iostream>
template<class T> T osszead(const T, const T);
int main(){
int j = 8, k = 8, s;
s = osszead(j,k);
std::cout << s ;
return 0;
}
template<class T>T osszead(const T x, const T y){
return x+y;
}
Így már jó de itt nem történik felüldefiniálás.
A main feletti a deklaráció a main alatti meg a definíció.
Jól mondom?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!