PDA

Tam Sürümünü Görmek İçin : inheritance_virtual


ankakusu
30/06/2008, 13:43
Tekrardan selamlar :)

Benim inheritance konusu hakkında birkaç ufak sorum olacaktı. Acaba virtual ne demek oluyor? Bunu genellikle constructorlarda kullanıyoruz. Peki fonksiyonlarla da kullanabiliyor muyuz acaba?


quasimodo
30/06/2008, 20:23
virtual kelime anlami olarak sanal demek. C++ taki anlamida su;
virtual fonksiyon bir sinifin uye fonksiyonudur ve bu fonksiyon
turemis sinif tarafindan ezilebilir. Mesela;


class Window // Temel Sinif
{
public:
virtual void Create() // virtual fonksiyon
{
cout <<"Tmel Sinif"<<endl;
}
};

class CommandButton : public Window
{
public:
void Create()
{
cout << "Turetilmis Sinif "<< endl;
}
};

int main()
{
Window * x, * y;

x = new Window();
x->Create();

y = new CommandButton();
y->Create();
}

Create fonksiyonu hangi nesne icin cagirilmissa o nesnenin Create()
fonksiyonu cagirilir. Bu karar islemi calisma zamaninda olur.
Tabiki baska fonksiyonlarda sanal olabilir.

acehreli
30/06/2008, 23:35
ankakusu, virtual'in constructor'larla kullanildigini sanmiyorum.

quasimodo'nun soylediginden baska, bir de turetmeyle ilgisi var:


class B
{};

class C : virtual public B
{};

class D : virtual public B
{};

class E : public D
{};


Oradaki virtual sozcukleri olmasa, E'nin birbiriyle ilgisi olmayan iki tane B'si olurdu (birisi C'den, birisi D'den gelen).

C ve D B'den virtual olarak turetildiklerinde ise E'nin tek bir B'si olur (C ve D tarafindan paylasilan):


virtual yoksa:

B B
| |
C D
\ /
E

virtual turetim:

B
/ \
C D
\ /
E


Ali

quasimodo
01/07/2008, 00:10
Diamond :D

Coldplay
01/07/2008, 10:56
acehreli bu konuyu 2 cümleyle cok iyi anlatmis. Ben sahsen dün bu konuyu aciklamak icin yarim sayfa yazdim. Sonra yazdiklarimi kendim bile anlamayinca postalamaktan vazgectim.:D Hem de elimde bu elmas tarzi kalitim resimleri oldugu halde.

acehreli
04/07/2008, 02:59
Tesekkurler Coldplay... O kadar iyi anlatmis olmaliyim ki, yaptigim onemli hata kimseyi rahatsiz etmemis. :)

E tabii ki hem C'den hem D'den tureyecekti:

class E : public C, public D
{};

Ali

quasimodo
04/07/2008, 12:19
Sadece UML ye bakmıştım ben :(

mengu88
04/08/2008, 16:30
Çok güzel bilgiler bunlar , polymorphism'i biraz daha anlamamı sağladı teşekkürler :)