CodeBlanks Logo Icon CodeBlanks

Abstract sınıf

Soyut sınıf ve saf sanal metot (pure virtual) öğrenirsin.

Abstract sınıf

Bir soyut sınıf (abstract class), en az bir saf sanal fonksiyon (pure virtual function) içeren sınıftır. Saf sanal fonksiyon = 0 ile bildirilir: virtual void draw() = 0;.

Soyut sınıftan örnek oluşturulamaz: Drawable d; derleme hatası verir. Ama türetilmiş sınıf saf sanalı uygulayıp örnek alınabilir. class Circle : public Drawable { void draw() override { } }; geçerlidir. Soyut sınıflar arayüz tanımlamak için kullanılır; türetilen sınıfın hangi metotları uygulayacağını zorunlu kılar.

Saf sanal uygulama

Saf sanal fonksiyonu uygulamayan türetilmiş sınıf da soyut kalır. Uygulayan sınıf somut (concrete) olur ve örnek alınabilir.

Örneğin Drawable soyut sınıfında virtual void draw() = 0; varsa, Circle ve Square bunu uygulamak zorundadır. Circle uyguladığı için somut olur; new Circle() geçerlidir. Bu, hangi sınıfın ne yapacağını derleme zamanında garanti eden güçlü bir tasarımdır.

Uygulama Drawable soyut sınıfı ve Circle uygulaması

Drawable soyut sınıfı tanımla; virtual void draw() = 0;. Circle sınıfı Drawable'dan miras alsın; void draw() override gövdesi std::cout << "Daire";. main içinde Drawable* d = new Circle(); yaz, d->draw(); çağır ve delete d; yap.

Başlangıç kodu

main.cpp
#include <iostream>

// Drawable ve Circle sınıflarını tanımla

int main() {
    // Drawable* ile Circle oluştur ve draw çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Drawable {
public:
    virtual void draw() = 0;
};

class Circle : public Drawable {
public:
    void draw() override { std::cout << "Daire"; }
};

int main() {
    Drawable* d = new Circle();
    d->draw();
    delete d;
    return 0;
}

Beklenen çıktı

Daire

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Saf sanal bildirimi tamamla

Soru
virtual void draw() = ____;
Cevap
virtual void draw() = 0;

Açıklama: = 0, fonksiyonu saf sanal yapar.

2 Bileşeni anlamına eşle

Kavram Anlamı
= 0 Saf sanal
Drawable Soyut sınıf
override Uygulama
new Circle() Somut örnek

3 Saf sanal fonksiyon nasıl bildirilir?

main.cpp
???
  • static void draw();
  • virtual void draw() { }
  • void draw() virtual;
  • virtual void draw() = 0; Doğru cevap

Açıklama: = 0, fonksiyonu saf sanal yapar ve sınıfı soyutlaştırır.

Orta seviye bölümündeki tüm dersler