![]() |
#4 |
![]()
İnline Fonksiyonlar
3. İnline Fonksiyonlar C++ `ın C ye ek olarak getirmiş olduğu bir özellikte inline fonksiyonlardır. Anlamak için basit bir örnekle başlayalım. Örneğin öyle bir program yazıcağız ki, aşırı miktarda kare alma işlemi yapmamız gerekecek ve bunun için herhangi bir fonksiyon çağırmıyor olalım. Bu durumda define komutu ile derleyiciye şu şekilde bir komut veririz: Alıntı: #define kare(x) x*x İşlemin sonunda ; olmamasına dikkat ediniz. Kullanımına gelince de, Alıntı: y=kare(x); bu durumda derleyici derleme aşamasında bütün kare(x) `leri x*x olarak yorumlayacaktır. Burada dikkat edilmesi gereken yer, #define topla(x,y) x+y ve kullanımda da z=topla(x,y)*topla(x,y); işte işlem sırasının vermiş olduğu hatayı görüyorsunuzdur. Tabi bunu da parantezlerle ayıracağız. Şimdi bunu C++ tam uyarlarsak, inline kelimesini, bir direktif olarak yada C++ derleyicisine fonksiyonu tek satıra koyması önerisi olarak düşünebiliriz. Derleyici bir çok nedenden dolayı bunu kabul etmeyebilir. Mesela, Fonksiyon çok uzun olabilir, Döngü içeren bir fonksiyon, değişken tanımı içeren bir fonksiyon, kendini çağıran bir fonksiyon her zaman inline olmaz. Alıntı: //kup.cpp //Kupun hacmini bulma #include <iostream.h> //inline fonksiyonumuz //------------------ inline double kup( const double x) { return x * x * x; } //--------------------- int main() { cout << "Kübün bir kenar uzunluğunu giriniz: "; double kenar; cin >> kenar; cout << "Kenar" << kenar << "olan kübün hacmi = " << kup (kenar) << endl; return 0; } Fonksiyon Yüklemesi ve Prototipleri 4. Fonksiyon Yüklemesi ve Prototipleri Şimdi C++ `ın getirmiş olduğu başka bir özellikten daha bahsedeceğiz. Aynı isimli fonksiyonların farklı işlemler yapabilmesi. Aynı şekilde çağrılacaklardır, fakat derleyici bunların farklı fonksiyonlar olduğunu anlayacaktır. Tabi bunun şartları var. Fonksiyonların tipleri yada bunların sıraları farklı olmalıdır. Fonksiyonların başında kalıbın tanımını yaparken, parametre listesinden bahsetmiştik. Bu parametreler belli değerler döndürürler, işte derleyicide bu döndürdüğü değerlere yani imzalarına göre bunların farklı fonksiyonlar olduğunu anlayacaktır. Tabi bunların sıraları da farklı fonksiyonlar gibi gözükmelerini sağlayacaktır. Hemen olayı anlamak için örnek verelim. Alıntı: double Ortalama(int *dizi, int uzunluk){ //kodlar } double Ortalama(double*dizi, int uzunluk){ //kodlar } Görüldüğü gibi bu iki fonksiyon da bir birinden farklıdır. Her ne kadar isimleri aynı olsa da... Fonksiyon tanımlamasının fonksiyon kullanılmadan önce yapılmış olması gerekmektedir. Fonksiyonlarımızı header başlığı altından çağırabiliriz. Mesela ben daha önce bir Faktoriyel fonksiyonu yazip bunu Fakt.h olarak saklıyorum. Programımı yazarken #include <Fakt.h> diyerek bunu çağırıyorum ve programda yazdığım "5'in faktoriyelini al" dediğim zaman direk Fakt.h taki fonksiyonda işlemi yapıp aldığı değeri programa verir. Mümkün olduğunda C++ ın kendi kütüphanelerindeki hazır fonksiyonları kullanmaya çalışacağız. Var olan bir fonksiyonu yeniden yazmanın pek bir anlamı olmaz. İleride kütüphanelerdeki fonksiyonları da mümkün olduğunca göreceğiz. Fonksiyonları Referans ile Çağırma 5. Fonksiyonları Referans ile Çağırma Daha önceki örneklerimizde fonksiyona parametre olarak geçilen bir değer olarak çağırmıştık. Şimdi ise onu referanslar ile çağıracağız. Bunu çok uzatmadan direk örnek üzerinde anlatalım. Alıntı: //referans.cpp //fonksiyonlarda referans #include <iostream.h> void deneme(int &x, int &y); int main() { int x,y; cout<<" iki sayı giriniz:"; cin>>x>>y; cout << "Denemeden önceki:\n"; cout << "X: " << x << endl; cout << "Y: " << y << endl; deneme(x, y); cout << "\nDenemeden sonraki:\n"; cout << "X: " << x << endl; cout << "Y: " << y << endl; return 0; } void deneme(int &x, int &y) { int deger = x; x = y; y = deger; } Referans parametresi (&) dir. Bu sayede fonksiyona argüman yerine o argümanın adresini yolluyoruz. Fonksiyon bu sefer verdiğimiz değere, o adresi kullanarak ulaşır. Bu çok yüksek değerleri fonksiyona gönderdiğimizde kullanacağımız yöntem olmalıdır |
|
![]() |
![]() |
Etiketler |
burda, hersey |
|
|