Anasayfa Eğitseller Programlama C++'da Fonksiyonlar-2

C++'da Fonksiyonlar-2 PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 1
ZayıfEn iyi 
Eğitseller - Programlama
Pazar, 13 Mayıs 2007 19:33

Yavaş yavaş ileri seviye C++ derslerine geçişimizi sürdürürken, size bu sefer biraz daha karmaşık (gibi görünen) bir teknik öğretmeyi amaçlıyorum.  Bu derste bir fonksiyonun, diğer bir fonksiyona, işaretçi bir argüman olarak nasıl geçirildiğini öğreneceksiniz. Aslında bu özelliğin normal değişkenleri işaretçi olarak geçirmekten çok farkı yok. Biraz kurcalarsanız ne kadar kolay olduğunu kavrayacaksınız.

Ayrıca belirtmek isterim ki, önceki derslerimin tutulması beni çok sevindirdi. Hayatımda yazdığım ilk dersler olmasına rağmen başarılı olabileceğimi düşünmüyordum. Çok teşekkür ederim…

Her neyse, derse geçmek gerekirse, ufak bir örnekle başlayalım hemen. Ama hatırlatmalıyım ki, pointerlar(işaretçiler) ile fonksiyonlar hakkında bilgisi olmayanlar önceki derslere dönüş yapmalılar.

 

#include <iostream> //her zamanki gibi girdi çıktı işlemleri için

#include <string> //string sınıfımızı kullanmak için include ediyoruz

 

using namespace std; //std isimuzayını kullan

 

void yazdir(string yazi) //yazı yazdıran fonksiyonumuz

{

                cout << yazi << endl;

}

 

void fonkcagir(void (*fonk)(string)) //işte can alıcı nokta! kodlardan sonrasını okuyun

{

                fonk("bu bir denemedir!"); //bize gönderilen fonksiyonu yazı argümanıyla çağır

}

 

int main(int argc, char* argv[])

{

                fonkcagir(yazdir); //fonkcagir fonksiyonuna yazdir fonksiyonunu argüman olarak geçir

                system(“pause”); //durdur ki çıktıyı görelim :)

                return 0;

}

 

Çıktı elbette şöyledir:  bu bir denemedir!

Şimdi fonkcagir fonksiyonunu ele alalım;

 

void fonkcagir(void (*fonk)(string))

 

Gördüğünüz gibi, alınan argüman bir tane. Geridönüş değeri “void” olan bir fonksiyona işaret et, ve bu fonksiyona “fonk” de! (siz hede veya hodo de diyebilirsiniz :) ). Sonrasında bu fonksiyonun argümanlarını bildir. Tek bir argümanı var, o da string yapısına sahip. Yani bunu tekrar ele alırsak;

 

void(*fonk)(string)       

 

olarak yazmalıyız. Esasında bunu okunabilirliğin artması açısından şu şekilde de yazabilirdik;

 

void(*fonk)(string yazi)

 

Sonrasında ise fonkcagir(yazdir) olarak çağırarak aslında şunu yapmış oluyoruz;

 

yazdir(“bu bir denemedir!”);

 

Peki bize gönderilen fonksiyon birden çok argümanlı ya da geridönüş değeri “int” falan olsa idi ne yapacaktık?

Pekala, o halde yazdir fonksiyonunu tekrar ele alalım bakalım. Bu düşündüğümüzün ikisinide uygulayalım;

 

int yazdir(string yazi, int sayi)

{

                cout << yazi << “   sayi = “ << sayi << endl; //gelen yazi ve sayi değişkenlerinin çıktısını alıyoruz.

                return 0; //geridönüş tipi “int” olan bir fonksiyon olduğundan herhangi bir sayı döndürmeliyiz.

}

 

Ardından hemen fonkcagir fonksiyonunu da değiştirmeliyiz;

 

void fonkcagir(int (*gelenfonk)(string, int))

{

                gelenfonk("bu bir denemedir!", 5);

}

 

Bunu önceki programa uyarlayıp çalıştırdığımızda şu çıktıyı alırız: bu bir denemedir!   sayi = 5

Ayrıca dikkatinizi çekmiştir ki, daha iyi anlaşılabilmesi için fonk argüman adını gelenfonk adıyla değiştirdim.

Tamam bunu da anladıysak, şimdide fonkcagir a birden fazla argüman özelliği verelim. Sonrada çağıralım bakalım ne olacak;

 

void fonkcagir(int (*gelenfonk)(string, int), int sayi)

{

                gelenfonk("bu bir denemedir!", sayi); //gelenfonk a iki argüman geçiriyoruz.

}

 

Bu sefer iki tane argüman var, birisi “int (*gelenfonk)(string, int)” diğeri “int sayi”…

Bunu main fonksiyonumuz içinde şu şekilde çağırır isek;

 

fonkcagir(yazdir, 10);

 

Çıktımız elbette şu şekilde olacaktır: bu bir denemedir!   sayi = 10

Bu dersimizinde sonuna geldik. Burada size gösterilenler bu özelliğin temel düzeyinden ibarettir. Yapabilecekleriniz hayal gücünüzle sınırlıdır! Aslında sınırsızdır :)

Kendinize sınır koymamayı, devamlı daha yükseğe zıplamayı öğrenmeye gayret edin! Ancak bu şekilde yapamayacağını düşündüğünüz şeyleri kolaylıkla yapabileceksiniz…

Bu ders hakkında her türlü soruyu forumda sorabilirsiniz. İyi kodlamalar!

Evren ACIGÜL

Son Güncelleme ( Pazar, 13 Mayıs 2007 19:37 )
  Yorum yok.
Yorum ekle. (0 yorum)

 

OyunGelistirici.net - Türk Oyun Yapımcılarının Buluşma Noktası

Bu sitede yazılan tüm yazıların hakları yazarlarına aittir. İzin alınmadan yayınlanamaz.

Bu sitede Firefox kullanmanız önerilir. En az 1024 x 768 masaüstü çözünürlüğü tavsiye edilir.