C++ Nesne Yönelimli Programlama (OOP)

  • 1
  • (1)
  • (5)
  • 18 Oca 2025

Nesne Yönelimli Programlama (OOP), yazılım geliştirme sürecinde yeniden kullanılabilir ve bakımı kolay kod yazmak için kullanılan bir yaklaşımdır. C++ dili, OOP destekleyen en popüler dillerden biridir. Bu makalede C++'ta OOP'nin temel kavramlarını ve uygulama örneklerini inceleyeceğiz.

Sınıflar ve Nesneler (Classes & Objects)

C++'ta bir sınıf, veri öğeleri ve fonksiyonları bir arada tutan bir yapıdır. Nesneler ise sınıfın somut bir gerçekleşimi olarak tanımlanabilir.


#include <iostream>
#include <locale.h>
using namespace std;

class Kitap {
public:
    string baslik;
    int sayfaSayisi;

    void bilgileriGoster() {
        cout << "Başlık: " << baslik << ", Sayfa Sayısı: " << sayfaSayisi << endl;
    }
};

int main() {
    setlocale(LC_ALL, "Turkish");
    Kitap kitap1;
    kitap1.baslik = "C++ Programlama";
    kitap1.sayfaSayisi = 350;
    kitap1.bilgileriGoster();

    return 0;
}
  • Kitap sınıfı, baslik ve sayfaSayisi adında iki veri öğesi içerir.

Kapsülleme (Encapsulation)

Kapsülleme, veriyi dışarıdan erişimden korumak ve yalnızca belirli metotlarla erişim sağlamak için kullanılır. private anahtar kelimesi ile veri elemanlarına doğrudan erişim kısıtlanabilir.

public, private ifadeleri hakkında daha detaylı bilgi için C++ Erişim Belirleyicileri (Access Specifiers) içeriğine göz atabilirsiniz.


#include <iostream>
#include <locale.h>
using namespace std;

class Kitap {
private:
    string baslik;
    int sayfaSayisi;

public:
    void setBilgiler(string b, int s) {
        baslik = b;
        sayfaSayisi = s;
    }
    void getBilgiler() {
        cout << "Başlık: " << baslik << ", Sayfa Sayısı: " << sayfaSayisi << endl;
    }
};

int main() {
    setlocale(LC_ALL, "Turkish");
    Kitap kitap;
    kitap.setBilgiler("C++", 500);
    kitap.getBilgiler();
    return 0;
}

Her bir sınıf özelliğini ayrı ayrı kapsüllemek için aşağıdaki kod örneğini inceleyebilirsiniz. baslik değerine setBaslik metodu ile değer atanırken, atanan değer getBaslik metodu ile okunmaktadır. Böylelikle baslik değişkenine doğrudan erişim söz konusu olmamaktadır.


#include <iostream>
#include <locale.h>
using namespace std;

class Kitap {
private:
    string baslik;
    int sayfaSayisi;

public:
    void setBaslik(string b) {
        baslik = b;
    }
    void setSayfaSayisi(int s) {
        sayfaSayisi = s;
    }
    string getBaslik() {
        return baslik;
    }
    int getSayfaSayisi() {
        return sayfaSayisi;
    }
};

int main() {
    setlocale(LC_ALL, "Turkish");
    Kitap kitap;
    kitap.setBaslik("C++");
    kitap.setSayfaSayisi(350);
    cout << "Başlık: " << kitap.getBaslik() << ", Sayfa Sayısı: " << kitap.getSayfaSayisi() << endl;
    return 0;
}

Kalıtım (Inheritance)

Kalıtım, bir sınıfın başka bir sınıftan özelliklerini miras almasına olanak tanıyan bir OOP prensibidir. Bu sayede mevcut kod tekrar kullanılabilir ve genişletilebilir. Üst sınıftaki (ana sınıf) özellikler, alt sınıflarda (türetilmiş sınıflar) kullanılabilir ve gerektiğinde özelleştirilebilir.

Aşağıdaki örnekte Kitap sınıfı temel sınıf olarak tanımlanmış ve Roman ve Biyografi sınıfları ondan türetilmiştir.



#include <iostream>
#include <locale.h>
using namespace std;

class Kitap {
public:
    string baslik;
    int sayfaSayisi;

    void bilgileriGoster() {
        cout << "Başlık: " << baslik << ", Sayfa Sayısı: " << sayfaSayisi << endl;
    }
};

class Roman : public Kitap {
public:
    string tur;

    void romanBilgileri() {
        cout << "Tür: " << tur << endl;
    }
};

class Biyografi : public Kitap {
public:
    string kisi;

    void biyografiBilgileri() {
        cout << "Kişi: " << kisi << endl;
    }
};

int main() {
    setlocale(LC_ALL, "Turkish");
    Roman roman;
    roman.baslik = "Suç ve Ceza";
    roman.sayfaSayisi = 500;
    roman.tur = "Klasik";
    roman.bilgileriGoster();
    roman.romanBilgileri();

    Biyografi biyografi;
    biyografi.baslik = "Nikola Tesla";
    biyografi.sayfaSayisi = 320;
    biyografi.kisi = "Nikola Tesla";
    biyografi.bilgileriGoster();
    biyografi.biyografiBilgileri();

    return 0;
}

Polimorfizm (Polymorphism)

Polimorfizm, aynı işlevselliğin farklı şekillerde uygulanmasını sağlayan bir OOP prensibidir. C++'ta polimorfizm genellikle sanal fonksiyonlar kullanılarak gerçekleştirilir.


#include <iostream>
#include <locale.h>
using namespace std;

class Kitap {
public:
    virtual void bilgileriGoster() {
        cout << "Kitap bilgileri gösteriliyor." << endl;
    }
};

class Roman : public Kitap {
public:
    void bilgileriGoster() override {
        cout << "Roman bilgileri gösteriliyor." << endl;
    }
};

int main() {
    setlocale(LC_ALL, "Turkish");
    Kitap* k;
    Roman r;
    k = &r;
    k->bilgileriGoster();
    return 0;
}

Örnekler Visual Studio 2022 ortamında C++ konsol uygulaması üzerinde denenmiştir.

İlişkili İçerikler

Bu makale içerisinde Visual Studio 2022 üzerinde C++ konsol uygulaması oluşturup, üzerinde değişik örnekler denenmektedir. İnceleyip uygulayabilirsiniz.

C++'ta sınıflar, veri öğelerinin ve fonksiyonların erişim düzeylerini belirlemek için erişim belirleyicileri (access specifiers) kullanır.

C++ Şablonları (Templates), kod tekrarını azaltmak ve türe bağımsız programlama yapmak için kullanılan bir mekanizmadır. Şablonlar sayesinde aynı kod parçası birden fazla veri tipi ile kullanılabilir.

Paylaşın
Etiket Bulutu