Sınıflar ve Nesneler
C++ programlama dilinde sınıflar ve nesneler, nesne yönelimli programlamanın (OOP) temel taşlarını oluşturur. Bir sınıf, nesnelerin özelliklerini (veri üyeleri) ve davranışlarını (üye fonksiyonlar) tanımlayan bir şablondur. Nesne ise bu sınıfın somut bir örneğidir ve sınıfta tanımlanan veri ve fonksiyonlara sahiptir. Sınıflar ve nesneler, kodun modüler, yeniden kullanılabilir ve sürdürülebilir olmasını sağlar. Bu yaklaşım, yazılım projelerinde karmaşık sistemleri modellemek ve yönetmek için kritik öneme sahiptir.
Sınıflar ve nesneler, gerçek dünyadaki varlıkları programlama ortamında temsil etmeye ve sistem mimarisini düzenlemeye yardımcı olur. Encapsulation (kapsülleme), inheritance (kalıtım) ve polymorphism (çok biçimlilik) gibi OOP ilkelerini uygulayarak daha güvenli ve ölçeklenebilir uygulamalar geliştirebilirsiniz. Ayrıca veri yapıları ve algoritmaların sınıf yapıları içinde uygulanması, performans ve bakım kolaylığı sağlar.
Bu eğitimde, C++ dilinde sınıf tanımlamayı, nesne oluşturmayı, üye fonksiyonları kullanmayı ve algoritmaları nesneler üzerinde uygulamayı öğreneceksiniz. Aynı zamanda bellek yönetimi, hatalı kullanım ve performans sorunları gibi yaygın tuzaklardan kaçınmayı da göreceksiniz. Bu bilgiler, projelerinizde profesyonel standartlarda sınıflar ve nesneler kullanmanıza ve sistem tasarımında güçlü bir temel oluşturmanıza yardımcı olacaktır.
Temel Örnek
text\#include <iostream>
\#include <string>
class Calisan {
private:
std::string isim;
int id;
double maas;
public:
Calisan(const std::string& i, int n, double m) : isim(i), id(n), maas(m) {}
void setIsim(const std::string& i) { isim = i; }
void setId(int n) { id = n; }
void setMaas(double m) { maas = m; }
std::string getIsim() const { return isim; }
int getId() const { return id; }
double getMaas() const { return maas; }
void goster() const {
std::cout << "ID: " << id << "\nIsim: " << isim << "\nMaas: $" << maas << "\n";
}
};
int main() {
Calisan c1("Ahmet Yılmaz", 101, 5000.75);
c1.goster();
c1.setMaas(5500.50);
std::cout << "Guncellenmis Maas: $" << c1.getMaas() << "\n";
return 0;
}
Bu temel örnekte, Calisan sınıfı üç özel üye değişkeni (isim, id, maas) kapsülleyerek doğrudan erişimi engeller. Constructor (yapıcı) fonksiyon, nesne oluşturulduğunda değerleri başlatır. Getter ve setter fonksiyonları, veri üyelerine kontrollü erişim sağlar. goster() fonksiyonu, nesnenin durumunu ekrana yazdırır. const anahtar kelimesi, metodun nesne durumunu değiştirmeyeceğini garanti ederek güvenliği artırır. Bu yapı, personel yönetim sistemleri veya veri kapsülleme gerektiren uygulamalarda yaygın olarak kullanılır.
Pratik Örnek
text\#include <iostream>
\#include <vector>
\#include <algorithm>
class Urun {
private:
std::string isim;
int id;
double fiyat;
public:
Urun(const std::string& i, int n, double f) : isim(i), id(n), fiyat(f) {}
void setFiyat(double f) { fiyat = f; }
double getFiyat() const { return fiyat; }
std::string getIsim() const { return isim; }
void goster() const {
std::cout << "ID: " << id << ", Isim: " << isim << ", Fiyat: $" << fiyat << "\n";
}
};
class Envanter {
private:
std::vector<Urun> urunler;
public:
void urunEkle(const Urun& u) { urunler.push_back(u); }
void tumunuGoster() const {
std::cout << "Envanter:\n";
for (const auto& u : urunler)
u.goster();
}
void indirimUygula(double oran) {
for (auto& u : urunler) {
double yeniFiyat = u.getFiyat() * (1.0 - oran / 100.0);
u.setFiyat(yeniFiyat);
}
}
void fiyataGoreSirala() {
std::sort(urunler.begin(), urunler.end(),
[](const Urun& a, const Urun& b){ return a.getFiyat() < b.getFiyat(); });
}
};
int main() {
Envanter market;
market.urunEkle(Urun("Laptop", 201, 1200.00));
market.urunEkle(Urun("Telefon", 202, 800.50));
market.urunEkle(Urun("Kulaklik", 203, 150.75));
market.tumunuGoster();
std::cout << "\n%10 Indirim Uygulanıyor...\n";
market.indirimUygula(10);
market.fiyataGoreSirala();
market.tumunuGoster();
return 0;
}
Bu gelişmiş örnekte, Urun sınıfı tekil ürünleri temsil ederken, Envanter sınıfı ürün koleksiyonunu yönetir. STL vector yapısı ve algoritmalar kullanılarak ürünleri sıralama ve indirim uygulama işlemleri yapılır. Lambda fonksiyonları ile sort işlemi optimize edilir. Bu yapı, encapsulation ve tek sorumluluk prensibini uygular, bellek yönetimi STL tarafından otomatik olarak yapılır ve performans odaklıdır. C++’ın ileri seviye özellikleri ile gerçek dünya uygulamaları modellendi.
C++’ta sınıflar ve nesneler için en iyi uygulamalar arasında: constructor ve destructor kullanımı, veri kapsülleme, const-correctness, STL konteynerleri, üye değişkenlerin initializer list ile başlatılması ve referans ile parametre geçişi yer alır. Yaygın hatalar: bellek sızıntısı, veri üyelerine doğrudan erişim, verimsiz algoritmalar ve yetersiz hata yönetimi. RAII, smart pointers ve move semantics ile kaynaklar güvenle yönetilir. Performans için gereksiz kopyalardan kaçınılmalı, güvenlik için girişler doğrulanmalıdır.
📊 Referans Tablosu
C++ Element/Concept | Description | Usage Example |
---|---|---|
Class | Nesneleri tanımlayan şablon | class Calisan { private: std::string isim; public: void setIsim(std::string i){isim=i;} }; |
Object | Sınıfın somut örneği | Calisan c1("Ahmet",101,5000.75); |
Constructor | Nesneyi oluştururken başlatır | Calisan(const std::string& i,int n,double m):isim(i),id(n),maas(m){} |
Destructor | Nesne yok edilirken kaynak temizler | \~Calisan() { /* temizleme */ } |
Encapsulation | Veriyi korur ve erişimi kontrol eder | private: int id; public: void setId(int n){id=n;} |
Member Function | Nesne verilerini işleyen fonksiyon | void goster() const { std::cout<\<isim; } |
Sınıflar ve nesneleri öğrenmek, karmaşık sistemleri modellemenizi, verimli algoritmalar uygulamanızı ve sürdürülebilir yazılım mimarileri oluşturmanızı sağlar. Encapsulation, veri ve davranış kontrolünü sağlar, böylece projeler ölçeklenebilir ve güvenli olur. Sonraki adımlar olarak kalıtım, çok biçimlilik ve tasarım kalıplarını çalışmak, modüler ve profesyonel C++ uygulamaları geliştirmenize yardımcı olur. Kaynak olarak C++ dokümantasyonu, STL ve ileri seviye OOP eğitimleri önerilir.
🧠 Bilginizi Test Edin
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek