OYUN YAPALIM

Yeni Başlayanlar İçin C++ | Ders 7

by on Tem.05, 2011, under C++, DirectX, Temel C++

DirectX öğrenmek isteyenler okusun! Motor yapımında kullanılacak!

Bu derste sizlere sınıf elemanlarına erişimi ve sınıflardaki kalıtım yapısını anlatacağım.


Sınıf Elemanlarına Erişim

Bir sınıfın elemanına :: ile erişiriz. Mesela sınıf içinde prototipini verdiğimiz bir fonksiyonu tanımlamak için

geri_donus_tipi sinif_adi::metod_adi(parametreler)
{
   ...
}

deriz. Bu :: operatörü bir de statik nesneler ile kullanılır. Statik nesneler “static” anahtar kelimesi ile tanımlanır ve o sınıf türündeki tüm değişkenlerde aynı değeri alır. Erişimi ise normalin aksine sinif_adi::statik_degisken olarak yapılır. Örnek:

#include <iostream>

using namespace std;

class deneme
{
public:
    int a;
    static int i;//statik değişken
};

// Statik değişkeni tanımlıyoruz.
// Tüm statik değişkenler tanımlanmalıdır.
// tur sinif::degisken; seklinde tanımlanır
int deneme::i;

int main()
{
    deneme x;
    deneme y;
    x.i = 10;
    x.a = 30;
    y.i = 20;
    y.a = 5;
    /* i statik olduğu için bir
    değişkene bağlı değildir.*/
    cout<<y.i<<' '<<x.i<<endl;//Ekrana 20 20 yazar.
    cout<<y.a<<' '<<x.a<<endl;//Ekrana 5 30 yazar.

    cout<<endl;
    system("pause");
    return 0;
}

Gördüğünüz gibi statik değişkenler, bir sınıf değişkenine bağlı değildir. Ancak diğer değişkenler bağlıdır. Bir de statik değişkene

deneme::i = 20;

yazarak da erişebilirdik.

Kalıtım(Inheritance)

OOP mantığında, bir sınıf başka bir sınıftan “türeyebilir”. Yani ona ait tüm elemanları alarak başlar. Ebeveyn sınıfa “Temel(Base) Sınıf”, türeyen sınıfa da “Alt(Derived) sınıf” denir. Tabii bunlar uluslararası kelimeler. Genelde örnek uygulamalarda temel fınıfa “Base”, alt sınıfa da “Derived” denildiğini görürsünüz. Neyse konumuza dönelim. kısa bir örnek vererek devam etmek istiyorum:

class base
{
public:
   int a,b,c;
};
class derived: public base
{
public:
   void fonk()
   {
      cout<<a<<b<<c;
   }
};

class derived: public base {…}

Bu satır ile, derived sınıfının base sınıfından “public” olarak türediğini anlıyoruz.

Temel sınıfa erişim şekilleri

Biraz önce dedim: “public” olarak türedi diye. İşte buna erişim şekli ya da erişim türü denir. Erişim türleri, üst sınıfın public üyelerinin alt sınıfa geçiş şeklini belirtir. Yani public yazarsanız, temel sınıfın tüm public elemanları public olarak geçer. Zaten private elemanlar kalıtıma dahil edğillerdir. Yani alt sınıf tarafından erişilemezler. Örnek:

class base
{
public:
   int a,b,c;
};
class derived: private base
{
public:
   void fonk()
   {
      cout<<a<<b<<c;
   }
};

int main()
{
   derived x;
   cout<<x.a; // Hata verir !
}

Gördüğünüz gibi, temel sınıfta public olan a,b,c değişkenleri, derived içine private olarak geçiyor. Bu durumda da onlara dışarıdan erişim sağlayamadık.

Kalıtım ve Yapıcı/Yıkıcılar

Türemiş sınıfların yapıcısında önce temel sınıfın yapıcısı çalışır. Sonra türemiş sınıfın yapıcısındaki kodlara geçilir. Yıkıcıda ile tam tersi görülür. Önce türemiş sınıfın yıkıcısı çalışır, sonra da temel sınıfın yıkıcısı.

Tür Dönüşümü

#include <iostream>

using namespace std;

class B
{
public:
    int a;
};

class D: public B
{
public:
    int b;
};

class D2: public D
{
public:
    int c;
};

int main()
{
    B *b;
    b = new D2; // B türündeki b değişkenine D2 türü atanıyor
    b->a = 20;
    //b->b = 10; //Hata verir!
    //b->c = 5; //Hata verir!
    cout<<endl;
    system("pause");
    return 0;
}

Gördüğünüz gibi… D2 sınıfı D den türemiştir, D de B den türemiştir. Bu durumda D ve D2, B nin elemanlarını içerir. Hal böyle olunca da D ve D2 sınıfları B sınıfı gibi davranabilir. Ancak bu durumda sadece D ve D2 ye ait olan elemanlara erişim sağlanamaz. Çünkü değişkenin türü B, sadece B nin elemanlarını tanır.

NOT: Derslerde değinmedim ama, sınıfları aynı bir .h dosyasına koyup(header files) sayfanın başında #include ile o dosyayı çağırabilirsiniz. Genelde her sınıf için ayrı bir .h kullanılır. Sınıflardaki fonksiyonların tanımlamalarını ise bir .cpp içinde tutun ve o dosyanın başında da #include ile sınıfı çağırın.

NOT: Visual Studio da Project->AddClass diyerek yeni bir sınıf oluşturabilirsiniz. Bu durumda her sınıf kendi .h/.cpp dosyasına konur.

Bu konuda kendi örneklerinizi yazarak çalışma yapınız. Bir de örneleri “elle” yazın. büyük faydasını görürsünüz. Kopyala/Yapıştır ile malesef öğrenilemiyor.

Bir sonraki derste görüşmek üzere.

Related Posts

  • Yeni Başlayanlar İçin C++ | Ders 9 2 günlük bir aradan sonra tekrar merhaba. Bu derste sizlere...
  • Yeni Başlayanlar İçin C++ | Ders 6 DirectX programlama yapmak isteyenler özellikle okusun! Bu derste sizlere sınıf...
  • Yeni Başlayanlar İçin C++ | Ders 8 DirectX öğrenmek isteyenler okusun! Motor yapımında kullanılacak! Tekrar hoşgeldiniz. bu...
  • Yeni Başlayanlar İçin C++ | Ders 4 FONKSİYONLAR Geldik fonksiyonlara. En çok kullanılan şey. C++ dilinin %90...
  • Yeni Başlayanlar İçin C++ | Ders 3 OPERATÖRLER Programlama dillerinde, işlevi olan işaretlere operatör denir. Ayrıntılı bilgi...
  • Related posts brought to you by Yet Another Related Posts Plugin.

    :, , , , , , , , ,

    17 Saatte PHP Öğrenin!
    17 Saatte PHP Öğrenin!

    Leave a Reply

    17 Saatte PHP Öğrenin!

    Bir şey mi arıyorsun?

    Site içi arama formunu kullanabilirsin:

    Hala bulamadın mı? Bir yorum yazarak ya da benimle iletişime geçerek bir çözüm bulabilirsin.

    Archives

    Tüm Yazılar (kronolojik)