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
vesayfaSayisi
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.