C++
Ö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.
Örnek çözümü göster
#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;
}
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.
Örnek çözümü göster
#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;
}
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.
Kendini test et
-
Ç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ı
Cevabı göster
Temel sınıfta virtual ve işaretçi ile çağrı — virtual + işaretçi çok biçimliliği sağlar.
-
override anahtar kelimesini yaz
void speak() ____ { std::cout << "Hav"; }
Cevabı göster
void speak() override { std::cout << "Hav"; }
Sıradaki ders: Sınıf tasarımı