CodeBlanks Logo Icon CodeBlanks

Özet - Miras alma

virtual/override ve final'i birleştirerek bir şekil hiyerarşisi yazarsın.

Özet - Miras alma

Bu bölümde miras almayı ve çok biçimliliği öğrendin. Bir sınıf iki nokta ve public ile temel sınıfı devralır. virtual fonksiyonlar işaretçi üzerinden çağrılda gerçek türü seçer; override bunu açıkça işaretler ve imza uyumsuzluğunu yakalar.

Türetilmiş yapıcı, başlatma listesinde temel yapıcıyı çağırır; önce temel sonra türetilmiş kurulur. final sınıf veya fonksiyon mirasını kapatır. Şimdi bunları bir araya getiren bir görev yapacağız.

Uygulama Shape hiyerarşisi kur

Shape sınıfını tanımla: public: altında virtual int area() { return 0; }. Square sınıfını Shape'ten türet, int side; üye değişkeni ve Square(int s) : side(s) { } yapıcı metodunu ekle, int area() override { return side * side; } ile yeniden tanımla. main içinde Square sq(5); oluştur ve std::cout ile sq.area()'yi yazdır.

Başlangıç kodu

main.cpp
#include <iostream>

// Shape ve Square sınıflarını tanımla

int main() {
    // Square örneği oluştur ve area yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Shape {
public:
    virtual int area() {
        return 0;
    }
};

class Square : public Shape {
public:
    int side;
    Square(int s) : side(s) {
    }
    int area() override {
        return side * side;
    }
};

int main() {
    Square sq(5);
    std::cout << sq.area();
    return 0;
}

Beklenen çıktı

25

Uygulama Shape hiyerarşisini çok biçimli çağır

Yukarıdaki Shape ve Square tanımlarını al. main içinde Square sq(4); oluştur, Shape* p = &sq; al ve std::cout << p->area() ile çok biçimli çağrı yap. virtual sayesinde Square::area çağrılır.

Başlangıç kodu

main.cpp
#include <iostream>

class Shape {
public:
    virtual int area() {
        return 0;
    }
};

class Square : public Shape {
public:
    int side;
    Square(int s) : side(s) {
    }
    int area() override {
        return side * side;
    }
};

int main() {
    // Square oluştur, Shape* ile area çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Shape {
public:
    virtual int area() {
        return 0;
    }
};

class Square : public Shape {
public:
    int side;
    Square(int s) : side(s) {
    }
    int area() override {
        return side * side;
    }
};

int main() {
    Square sq(4);
    Shape* p = &sq;
    std::cout << p->area();
    return 0;
}

Beklenen çıktı

16

Sırada ne var?

Miras alma ve çok biçimliliği öğrendin: virtual, override, temel yapıcı çağrısı ve final. Şimdi öğrendiklerini gerçek bir projede kullanma zamanı.

Sonraki bölümde 5 derslik bir yardımcı kütüphane projesi yapacaksın. Her derste bir parça ekleyecek, son derste çalışan bir modül elde edeceksin. Sınıf tasarımı, üye fonksiyonlar ve erişim belirleyiciler tüm becerilerini bir arada kullanacaksın.

Soru ve cevaplar

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

1 Çok biçimliliğin çalışması için ne gerekir?

main.cpp
Animal* a = &dog;
a->speak();
  • Yalnızca public miras
  • Temel sınıfta private üye
  • Türetilmiş sınıfta final
  • Temel sınıfta virtual ve işaretçi ile çağrı Doğru cevap

Açıklama: virtual + işaretçi çok biçimliliği sağlar.

2 override anahtar kelimesini yaz

Soru
void speak() ____ { std::cout << "Hav"; }
Cevap
void speak() override { std::cout << "Hav"; }

Açıklama: override, temel sınıf fonksiyonunu geçersiz kıldığını belirtir.

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