Thread overview
Fonksiyonlarda aşırı yükleme
Jul 17, 2013
agora
Jul 17, 2013
agora
July 17, 2013

Birbirinden farklı parameterleri (tipleri karsilastirirsak) ayni isimli birden fazla fonksiyonun tanimlanmasinda kullanabiliyormusuz. Buna fonksiyonlarin asiri yuklenmesi (function overloading) deniyor. D'den once C++ deneyimimde bu sekilde ogrenmistim. Aciklamak gerekirse;

Asiri yuklenmis fonksiyon cagiriminda derleyici, cagridaki arguman(lar)in sayisini, tipini ve sirasini incelemekte ve ona en uygun fonksiyonu secmekte. Fonksiyonun asiri yuklenmesi olayi genelde farkli veri tipleri uzerinde benzer islemler yapan, ayni fonksiyonlar olustururken kullanilmakta

Asagida bi ornek kod paylasiyorum int ve double'ın karesini hesaplamaya yarayan aşırı yüklenmiş kare fonksiyonudur bu.

import std.stdio;

int karesi(int x)
{
	return x * x;
}

double karesi(double y)
{
	return y * y;
}

void main()
{
	writeln("7 Sayısının karesi: ", karesi(7));
	writeln("7.5 sayısının karesi: ", karesi(7.5));
}

http://imgim.com/4409incir5321127.png

Asiri yuklenen fonksiyonlar, isaretleri ile ayirt ediliyorlar. İsaret, fonksiyonun adi ve parametre tiplerinin birlesimi olmakta. Derleyici, tip güvenli bağlamayı sağlamak için her fonksiyon tanıtıcısını parametrelerinin sayısı ve tipi ile çözümlüyor.

Benzer parametre listeleri ve farklı donus tiplerini kullanarak asiri yuklenmis fonksiyonlar olusturmak yazim hatasidir…

Derleyici, ayni isimli fonksiyonlar arasinda ayrim yaparken sadece parametre listelerini kullanmaktadır. Asiri yuklenmis fonksiyonlarin ayni sayida parametre icermesine gerek yoktur. Eğer varsayılan parametrelerle yükleme işleminde dikkatli olunmazsa karışıklık oluşabilir.

Kaynak: Deitel & Deitel C++

Kitabıydı ama benzer şekilde kullanımını D ile yapabiliyoruz diye yazayım dedim. D bu durumda farklı çözümler üretir mi acaba?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 17, 2013

Hocam dershanede bunu gördüm bir merakım daha var

2 farklı paylaşım mevcut mesela

void bilgiVer(in int sayı)
{
   writeln("Tamsayı     : ", sayı);
}

mesela burada void içerisinde in parametresi var ve in const gibi davranıyordu yanılmıyorsam.

in int sayı

Bunun değiştirilemezliği derleme zamanında oluyor değil mi?

Yani çalışma esnasında zaten kullanıcıdan bir bilgi alınacaktır

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 17, 2013

Alıntı (agora):

>

D bu durumda farklı çözümler üretir mi acaba?

Bu konuda C++ ile aynı:

http://ddili.org/ders/d/islev_yukleme.html

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 17, 2013

Alıntı (agora):

>

burada void içerisinde in parametresi var

bilgiVer demek istedin tabii; void değil... :)

Alıntı:

>

in const gibi davranıyordu yanılmıyorsam.

in, 'const scope''tan başka bir şey değildir. (scope henüz gerçeklenmedi.) Bazı ustaların görüşüne göre in'in hiç kullanılmaması gerekiyormuş. Kitaptaki in'leri isterseniz buna göre boşverebilirsiniz.

Alıntı:

>

Bunun değiştirilemezliği derleme zamanında oluyor değil mi?

Evet.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]