Abstract sınıf
- C++ kursu
- Orta seviye
- Ders 38/116
- 5 dk
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
#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
#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
virtual void draw() = ____;
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?
???- 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.