Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

inheritance_virtual

Konu, 'C / C++' kısmında ankakusu tarafından paylaşıldı.

  1. ankakusu

    ankakusu Üye

    Kayıt:
    19 Aralık 2006
    Mesajlar:
    176
    Beğenilen Mesajlar:
    0
    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?
     
  2. quasimodo

    quasimodo Daimi Üye

    Kayıt:
    8 Ekim 2006
    Mesajlar:
    737
    Beğenilen Mesajlar:
    0
    Meslek:
    Öğrenci
    Şehir:
    İstanbul
    virtual kelime anlami olarak sanal demek. C++ taki anlamida su;
    virtual fonksiyon bir sinifin uye fonksiyonudur ve bu fonksiyon
    turemis sinif tarafindan ezilebilir. Mesela;

    Kod:
     
         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.
     
  3. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    ankakusu, virtual'in constructor'larla kullanildigini sanmiyorum.

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

    Kod:
    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):

    Kod:
    virtual yoksa:
    
    B   B
    |   |
    C   D
     \ /
      E
    
    virtual turetim:
    
      B
     / \
    C   D
     \ /
      E
    
    Ali
     
  4. quasimodo

    quasimodo Daimi Üye

    Kayıt:
    8 Ekim 2006
    Mesajlar:
    737
    Beğenilen Mesajlar:
    0
    Meslek:
    Öğrenci
    Şehir:
    İstanbul
    Diamond :D
     
  5. Coldplay

    Coldplay Daimi Üye

    Kayıt:
    23 Haziran 2008
    Mesajlar:
    1,448
    Beğenilen Mesajlar:
    0
    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.
     
  6. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    Tesekkurler Coldplay... O kadar iyi anlatmis olmaliyim ki, yaptigim onemli hata kimseyi rahatsiz etmemis. :)

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

    Kod:
    class E : public C, public D
    {};
    Ali
     
  7. quasimodo

    quasimodo Daimi Üye

    Kayıt:
    8 Ekim 2006
    Mesajlar:
    737
    Beğenilen Mesajlar:
    0
    Meslek:
    Öğrenci
    Şehir:
    İstanbul
    Sadece UML ye bakmıştım ben :(
     
  8. mengu88

    mengu88 Üye

    Kayıt:
    22 Temmuz 2008
    Mesajlar:
    25
    Beğenilen Mesajlar:
    0
    Çok güzel bilgiler bunlar , polymorphism'i biraz daha anlamamı sağladı teşekkürler :)