//
// Cok basit bir, iki template alistirmasi
//
#include <iostream>
using namespace std;
// ornegin NASA sizden 5 adet sayiyi saklayan ve ortalamalarini almak gibi
// mühim bir islem yapan bir class istedi.
// Ve sizde bu zorlu gorevi hakkiyla yerine getirmek istiyorsunuz.
// Soyle bir sinif yazdiniz.
class Wow
{
public:
int numbers[5]; // ingilizce yaziyorsunuz ki anlasinlar :O
float mean() // float veriyoruz, ne de olsa ortalamalari tam sayi cikmayabilir (cok akillica!)
{
float sum = 0;
for (int i = 0; i < 5; i++)
sum+= numbers[i];
return sum / 5;
}
};
// goreni hayrete dusuren bu harikulade kod parcasini yolladiniz
// ve soyle bir cevap geldi
//
// - dude, we really appreciate your heroic efforts but you need to supply some more classes
// which can utilize the following types for storage...
// double, long, unsigned short int, little float (!), happy byte
// is that ok ?
// - doh !
// - ... (line busy)
//
// poff :( bir sürü tip icin tekrar yazmam gerekiyor... double, float vs..
// ama sanki aksamdan kalma gittiginiz bir C++ dersinden hayal meyal:
//
// - tekrar eden kod kotudur. kotuu ! kotuuuu !!
// gibi biseyler hatirliyorsunuz.
// evet ayni -sablonu- farkli turler icin kullanabilmelisiniz. kullanabilirsiniz de zaten ! haha!!!
// C++'ta mumkun olmayan pek az sey vardir.
template <typename T>
class BetterWow
{
public:
T numbers[5];
// burada T, class taniminin basinda belirttigimiz - bir sablon parametresidir -
// ve bu parametrenin turu "typename" dir. alacagi degerler ne olabilir?
// Bir "type" olabilir tabii ki :) . (orn. int float double vs. ya da ev yapimi class larimiz heheh :) )
float mean()
{
float sum = 0;
for (int i = 0; i < 5; i++)
sum+= numbers[i];
return sum / 5;
}
};
// Simdi n'oldu ?
// BetterWow sinifinin taniminin basina template anahtar kelimesi ile beraber
// < > sembolleri icerisinde typename turunde bir parametre tanimladik ( T ).
// Bu sinif bir sablon sinif oldu.
// Sablon sinifin kullanimi
int main()
{
BetterWow<int> int_saklayan_nesne;
BetterWow<float> float_saklayan_nesne;
// Kullanim gayet acik. BetterWow tipinde bir nesne yaratirken < > sembolleri icerisinde
// hangi tip icin yaratmak istedigimizi belirtiyoruz.
cout << "int lerin ortalamasi ";
for (int i = 0; i < 5; i++)
int_saklayan_nesne.numbers[i] = i;
cout << int_saklayan_nesne.mean() << endl;
cout << "float larin ortalamasi ";
for (int i = 0; i < 5; i++)
float_saklayan_nesne.numbers[i] = (float)i / 2;
cout << float_saklayan_nesne.mean() << endl;
return 0;
}
Do weird and difficult things.
|