Åžub052009

C++'da Farklı Bir Concstructor Kullanım Şekli

Yazar: Gökhan ÖZİÇ Yayınlanma Saati: 12:47
Kategori(ler): C / C++

     Object Oriented Programming ile gelen en büyük artılardan biri kuşkusuz constructor'lar. Developer'ın işini nasıl kolaylaştırdığını hepimiz biliyoruz. Ama bazen kullanım şekli itibariyle karışıklığa da sebep olabiliyor tabii.      Bu seneki projelerimden biri olan havayolları şirketi rezervasyon programı ile uğraşırken (C++), constructor'lerin kullanımı inceliyorudm ki değişik bir kullanımını farkettim. Şimdi örnekleyerek bu kullanıma yakından göz atalım. Elimizde Test adında bir class var ve tek attribute'ü "a" diye bir integer. Methodları ise iki tane constructor ve bir "getA()" methodu. Kolay bir örnekten gitmek istedim ki anlaşılması da kolay olsun. Bu classın kullanımı şöyle olsun: view plaincopy to clipboardprint #include "stdafx.h"   #include <iostream>       using namespace std;       class Test    {    private:        int a;       public:        Test():a(0){}        Test(int x)        {            a = x;        }        int getA()const       {            return a;        }    };          int _tmain(int argc, _TCHAR* argv[])    {        Test test1(4);        Test test2;           cout << "The test1 and test2 objects' \"a\" variables are: " << test1.getA() << " " << test2.getA() << endl;        return 0;    }        İki constructor'ımız var. Bunlardan ilki "default constructor" olan "Test():a(0){}". Test classından oluşturduğumuz objenin initial değeri verilmediyse bu constructor çalışacak ve objenin a değerini 0'a eşitleyecek. Diğeri ise oluşturulan objenin initial değeri verildiyse o değeri a ile eşitleyecek. Gayet kolay bir class. Kullanımını da main'de görebiliyoruz. İki constructor da düzgün çalışıyor. Cout kısmında output olarak 4 ve 0'ın ekrana basıldığını göreceksiniz. Şimdi aynı class'ı farklı bir constructor ile kullanalım ve yazımın ana konusu olan main'deki kullanımının nasıl değişebildiğini görelim. Bu class'ın kullanımı da şu şekilde olsun: view plaincopy to clipboardprint #include "stdafx.h"   #include <iostream>       using namespace std;       class Test    {    private:        int a;       public:        Test(int x = 0):a(x){}        int getA() const       {            return a;        }    };       int _tmain(int argc, _TCHAR* argv[])    {        Test test1 = 4;        Test test2;           cout << "The test1 and test2 objects' \"a\" variables are: " << test1.getA() << " " << test2.getA() << endl;        return 0;    }        Bu örnekte ise default constructor ile parameter contructor'ı birleştirdim. "Test(int x = 0):a(x){}" satırı şöyle açıklanabilir. Eğer Test classından bir obje oluşturulmuş ve initial değeri gönderilmediyse methodun parametresini sıfır kabul et (int x = 0 satırından bahsediyorum) ve bunu da objenin a değerine eşitle. Eğer initial değeri verilmişse de o değeri parametre olarak x'e gönder ve x ile a değerini eşitle. Buraya kadar herşey normal. Şimdi dikkatinizi main'deki "Test test1 = 4;" satırına çekmek istiyorum. İşte yazımın ana konusu bu satır. Bu satır şu anda hatasız çalışıyor ve hepinizin de tahmin edebileceği gibi test1 objesinin a değerini 4'e eşitliyor. Peki bunu nasıl yapıyor?      Constructor'a yakından bakarsak aslında biz bu şekilde bir initialization'ı zaten tanımlamış olduk. "Test(int x = 0):a(x){}" satırında gördüğünüz gibi x = 0 ibaresi zaten objenin bu şekilde tanımlanabilir olmasının compiler'a bildirilmesi anlamına geliyor. Yani artık obje = int komutu (bizim Test classımız için), x = 0 komutu sayesinde doğru oluyor. Çünkü biz, "Test(int x = 0):a(x){}" komutu ile objenin birşeye eşitlenebileceğini compiler'a söylemiş oluyoruz. Compiler'da bize hiçbir sorun çıkartmadan eşitlemeyi yapıyor. Cout kısmında ekrana 4 ve 0 basıldığını göreceksiniz.      Umarım işinize yarayacak bir bilgi olmuştur. Bence çok ilginç bir constructor yaklaşımı. C++'ın ne kadar profesyonel bir dil olduğunu da gözler önüne sermesi cabası.

Etiket(ler): , ,



[KickIt] [Dzone] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

E-mail | Permalink | Trackback | Yazı RSSRSS comment feed 0 Yorumlar

Åžub022009

www.gokhanozic.com Tekrar Yayında!!!

Yazar: Gökhan ÖZİÇ Yayınlanma Saati: 11:39
Kategori(ler): KuruluÅŸlar

     Merhaba;     Uzun zamandır sitem kapalıydı ve siteme post girme fırsatım haliyle olmadı. Bundan dolay ne kadar üzgün olduğumu anlatamam. Beni asıl üzen ise sitemin kapanışının benimle hiçbir alakası olmaması. Okulumdan birkaç arkadaşım ile bundan yaklaşık 6 ay önce host kiralamaya karar vermiştik. 6 arkadaş ortaklaşa bir bayii kiraladık. Kiralarken de piyasadaki dolandırıcılardan birine kurban gitmeyelim diye firmanın görevlilerinden biriyle bağlantı kurup örnek fatura istedik. Bizimle bağlantıya geçen şahıs çok kibardı ve şirketin politikalarını anlatıp bize örnek bir fatura gönderdi. Biz de faturadan yola çıkarak bu şirketin güvenilir olduğuna kanaat getirdik ve paramızı yatırdık. Başta hiçbir sorun yoktu. Bloglarımızı kurduk ve projemiz olan birkaç siteyi de beslemeye başladık. Yalnız, açtığımızdan 5 ay sonra bayii'yi kiraladığımız firmadan serverların taşındığına dair bir açıklama geldi ve serverlarımız süresi belirtilmeden kapatıldı. Aradan bir-iki hafta geçmesine rağmen açılmadı. Daha sonra yaptığımız araştırmada Türkiye'de çoğu insanın aynı durumdan mağdur olduğunu ve çok insanın aynı firmadan host aldığını gördük. Daha sonradan işin kokusu ortaya çıktı. Bizim bayii kiraladığımız firma aslında, daha önce başka bir adla faaliyetteymiş ve o dönemde birçok insanı dolandırmış. Yine aynı yöntemle hostlar satıp, bayiler kiralayıp insanları dolandırmış ve mağdur etmiş. Daha sonra şirket kapatılmış. Bizim host aldığımız şirket ise bu şirketin yeni adlı versiyonuymuş. Yani dolandırıldık. Aslında bu konu hakkında yazacak fazla birşey de yok. Herşey alenen ortada. İnsanları anlamak mümkün değil. Nedense kolay yol herzaman ilk tercih olarak görülüyor ve kolay yoldan para kazanmanın yolları herşekilde değerlendirilmeye çalışılıyor. Buradan da anlaşılıyor ki, bilişim sektöründe de büyük bir açık var. Bu kadar kolay, bir firma nasıl insanları dolandırabilir anlamak mümkün değil. Özellikle daha önceden insanların parasını gaspetmiş bir firmaın tekrar başka bir isimde, yeni bir firma açmasını neden kimse kontrol etmiyor? Biz ne kadar dikkat etsek de değişen birşey olmuyor. Firmadan fatura istememize, yetkili biriyle görüşmemize ve hatta 5 ay boyunca hiçbir sıkıntı çekmememize rağman başımıza böyle bir olay geldi. Küçük bir tavsiye olarak host alacaksanız muhakkak ama muhakkak çok iyi araştırın. Ben ve arkadaşlarım gibi ortada kalabilirsiniz. Bir şekilde firma hakkında bilgi sahibi olmaya çalışın. Köklü bir firma mı, güvenilir mi? Bunlar çok önemli. Umarım bizim gibi daha mağdur olan olmaz. Bazılarınız neden yasal yollara başvurmadınız diye sorabilirsiniz. Haklısınız. Ama sizce daha önce de insanlarıdolandırmış bir firmanın hiç ceza almadan paçasını kurtarıp başka isimde yeni kurdukları firmayı şikayet etmemizin bir anlamı var mı? Yorumu sizlere bırakıyorum. Umarım yeni hostumda bir sorun çıkmaz ve bende sizlerle paylaşmaya devam ederim. Herkese tekrar merhaba.

Etiket(ler): ,



[KickIt] [Dzone] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

E-mail | Permalink | Trackback | Yazı RSSRSS comment feed 2 Yorumlar