Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > odev yardim serileri 1: templates :)
Yazar
neurorebel


avatar

Kayıt: 15.08.2007
30.04.2008-00:15 #43719
//
// 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.

Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
30.04.2008-21:42 #43775
ANlatim tarzini cok begendimlaughing Eline saglik tum ornekler icin.





Yazar
neurorebel


avatar

Kayıt: 15.08.2007
30.04.2008-22:23 #43787
sağolun hocam :) beğendiğinize çok sevindim biggrin





Do weird and difficult things.

Yazar
encin


avatar

Kayıt: 30.11.2007
01.05.2008-00:25 #43800
laughinglaughing süper












Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb