C++ Sınıflara Giriş

Nesneye dayalı programlama, öğrenim aşamasında kimileri için karmaşık olabilmektedir. O nedenle amacım pratik ve basit olarak sınıf(class) yapısına giriş yapmak ve temel olarak sınıflar hakkında gerekli bilgileri size vermektir. Nesne dayalı programlamaya giriş yazısına buradan ulaşabilirsiniz.

Aşağıdaki kodda basit bir sınıf tanımlaması yaptık.
class Araba{
    public:
        void ata(string, int);
        void goster();
    private:
        std::string marka;
        int model;
};
Yukarıdaki kodu incelemeye başlayalım. Öncelikle sınıf tanımlarken class anahtar kelimesi ile başlıyoruz, daha sonrasında sınıfın ismini Araba olarak verdik. Sınıfın gövdesi barındıran süslü parantezleri ekledik ve sınıfın sonlandığı kısım (;) noktalı virgül ile bitirildi. Sınıfın sonuna noktalı virgülü kesinlikle koymalısınız aksi takdirde derleyici hata verecektir.

Sınıf gövdesini incelersek public ve private olarak iki tane erişim belirteci kullanıldığı görülecektir. Erişim belirteçleri bunlarla sınırlı olmamakla beraber bu yazıda sadece bu ikisine değinilecektir. public erişim belirteci, sınıf alanları ve sınıf metotlarının, sınıf içinde ve sınıf dışında kullanılabileceğini bildirir, private ise sadece sınıf içerisinde kullanılacağını bildirmektedir. Yani private içerisindeki bir alan, sınıf dışında kullanılamaz. Herhangi bir erişim belirteci içerisine yazılmayan alan veya metotlar varsayılan olarak private erişimine sahip olup, sadece sınıf içerisinden erişilebilir.

Sınıf içerisinde kullandığımız metotlar, değer döndürmeyen ata() ve goster() adlı fonksiyonlardır. Bu fonksiyonlar public içerisinde bildirilmiştir ve sınıf dışında kullanılabilir. Sınıf alanları, bir diğer deyişle sınıf üyelerimiz ise string tipinde marka ve int tipinde model değişkenlerimizdir. Bu alanlar private içerisinde tanımlandığı için sadece sınıf içerisinden erişilebilir.

Metot gövdelerinin sınıf dışına yazılması tercih edilir. Sınıf dışına yazılan metotlar aşağıdaki kodda olduğu gibi yazılır.
void Araba::ata(std::string a, int b){
    marka = a;
    model = b;
}

void Araba::goster(){
    cout << "---------------------------------" << endl; 
    cout << "Araba Markasi: " << marka << endl;
    cout << "Araba Modeli: " << model << endl;
    cout << "---------------------------------" << endl << endl;
}
Fonksiyonların sınıfa ait olduğunu belirtmek için SınıfAdi::FonksiyonAdi şeklinde bir bildirim yapılır. Eğer sınıf ismini belirtmezsek, derleyici fonksiyon içerisindeki değişkenleri tanımsız olarak görüp, hata verecektir. Sınıf içerisinde fonksiyonu gövdesi ile yazsaydık böyle bir bildirim yapmaya gerek yoktur.

ata() fonksiyonu burada private erişimine sahip değişkenlere erişmek için kullanılan fonksiyondur. Bu fonksiyon sayesinde bu değişkenlere gerekli değer atamalarını gerçekleştirebiliyoruz. Aslında bu fonksiyon tanımlanan sınıfın set fonksiyonudur, diyebiliriz. Ancak bu konuya diğer yazımızda set ve get fonksiyonları olarak değineceğim zaten. Kısaca anlatmak gerekirse set fonksiyonu private değişkenlere atama yapmak için kullanılan fonksiyondur, get fonksiyonu ise private değişkenin değerlerini döndüren fonksiyondur. Tekrar ata fonksiyonuna dönelim, fonksiyon parametre olarak a ve b değişkenlerini almakta ve bu değişkenlerin ise private değişkenlere atanması sağlanmakta.

goster() fonksiyonu ise aynı şekilde değer döndürmeyen bir fonksiyondur. Fonksiyon private değişkenlerin değerini ekrana yazdırmaktadır.

Şimdi ise sınıfı main fonksiyonu içerisinde nasıl kullanıldığını görelim.
int main(){
    Araba araba1; //araba1 nesnesi
    Araba araba2; //araba2 nesnesi

    araba1.ata("Opel", 2001);
    araba2.ata("Nissan", 2006);

    araba1.goster();
    araba2.goster();

    return 0;
}
Görüldüğü üzere Araba sınıfından iki tane nesne olduşturduk. Bu nesnelerin private değişkenlerine ata fonksiyonu sayesinde değerler atadık ve bu bilgileri ekranda kullanıcıya tekrar göstermek için goster() metotunu kullandık. Her nesnenin sınıf sayesinde kendine ait değişkenleri ve metotları vardır. Bu metotlara erişim içinse (.) nokta işareti ile bağlantı sağlanmaktadır.

Bu yazıda temel anlamda sınıf tanımlamayı ve belli başlı özelliklerini, sınıf dışı metot gövdelerinin yazımını ve sınıfa ait bildirim yapmayı, main içerisinde sınıf kullanımına değinmiş olduk.

Yukarıdaki kodların toplu hali.
#include <iostream>
#include <string>

using std::cout
using std::endl;

//sınıf tanımı
class Araba{
    public:
        void ata(std::string, int);
        void goster();
    private:
        std::string marka;
        int model;
};

void Araba::ata(std::string a, int b){
    marka = a;
    model = b;
}

void Araba::goster(){
    cout << "---------------------------------" << endl; 
    cout << "Araba Markasi: " << marka << endl;
    cout << "Araba Modeli: " << model << endl;
    cout << "---------------------------------" << endl << endl;
}

int main(){
    Araba araba1; //araba1 nesnesi
    Araba araba2; //araba2 nesnesi

    araba1.ata("Opel", 2001);
    araba2.ata("Nissan", 2006);

    araba1.goster();
    araba2.goster();

    return 0;
}

Hiç yorum yok:

Yorum Gönderme