Özet - Miras alma
- C++ kursu
- Orta seviye
- Ders 18/116
- 5 dk
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
#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
#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
#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
#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?
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
void speak() ____ { std::cout << "Hav"; }
void speak() override { std::cout << "Hav"; }
Açıklama: override, temel sınıf fonksiyonunu geçersiz kıldığını belirtir.