Temel Kalıtım
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 48 / 104.
Kalıtım, bir sınıfın başka bir sınıfın özelliklerini ve davranışlarını edinmesini sağlar. Kalıtım alınan sınıfa temel sınıf (veya üst sınıf), kalıtım alan sınıfa ise türetilmiş sınıf (veya alt sınıf) denir.
Türetilmiş bir sınıf oluşturmak için, iki nokta üst üste işaretinin ardından erişim belirtecini ve temel sınıf adını kullanın:
class Animal {
public:
std::string name;
void eat() {
std::cout << name << " is eating" << std::endl;
}
};
class Dog : public Animal {
public:
void bark() {
std::cout << name << " says woof!" << std::endl;
}
};Dog sınıfı artık Animal sınıfından hem name hem de eat() öğelerine ve ayrıca kendi bark() yöntemine erişebiliyor. Kalıtımın özü budur: yeni işlevler eklerken mevcut kodu yeniden kullanmak.
Dog myDog;
myDog.name = "Buddy";
myDog.eat(); // Animal sınıfından miras alındı
myDog.bark(); // Dog sınıfında tanımlandıAnimal'dan önce gelen public anahtar sözcüğü, kalıtım türünü belirtir. Public kalıtım, temel sınıfın public üyelerinin türetilmiş sınıfta public olarak kalması anlamına gelir. Bu, en yaygın biçimdir ve “bir türüdür” ilişkisini modeller: Dog bir Animal'dır.
Görev
KolayKalıtımın işleyişini gösteren basit bir araç hiyerarşisi oluşturalım. Bir temel Vehicle sınıfı ve bu sınıfı özel davranışlarla genişleten türetilmiş bir Motorcycle sınıfı oluşturacaksın.
Kodunu üç dosyaya dağıtacaksın:
Vehicle.h: Aşağıdakilere sahip temel birVehiclesınıfı tanımla:- Herkese açık bir
std::string brandüyesi - Herkese açık bir
int yearüyesi - Araç markasını ve yılını şu biçimde yazdıran herkese açık bir
displayInfo()yöntemi:Brand: <brand>, Year: <year>
- Herkese açık bir
Motorcycle.h:Vehiclesınıfından herkese açık olarak kalıtım alan birMotorcyclesınıfı tanımla. Bu türetilmiş sınıfa şunları ekle:- Motor hacmi için herkese açık bir
int engineCCüyesi - Şunu yazdıran herkese açık bir
revEngine()yöntemi:<brand> goes vroom vroom!
Motorcyclesınıfı,Vehiclesınıfındanbrand,yearvedisplayInfo()öğelerini otomatik olarak devralır.- Motor hacmi için herkese açık bir
main.cpp: Üç girdi oku (her biri ayrı bir satırda):- Marka adı (dize)
- Yıl (tam sayı)
- Motor hacmi (CC) (tam sayı)
Bir
Motorcyclenesnesi oluştur ve devralınan üyelerini (brandveyear) ve kendiengineCCüyesini ayarla. Ardından üç çıktı satırını sırasıyla üret: önce devralınandisplayInfo()yöntemini çağır, sonra motor hacmini şu komutla kendin yazdır:std::cout << "Engine: " << moto.engineCC << "cc" << std::endl;ve son olarak motosiklete özgürevEngine()yöntemini çağır. Bu, hem devralınan yöntemi hem de türetilmiş sınıfın kendi yöntemini kullanarak kalıtımı gösterir.Çıktı biçimi:
Brand: <brand>, Year: <year> Engine: <engineCC>cc <brand> goes vroom vroom!
Örneğin, girdiler Harley, 2022 ve 1200 olduğunda:
Brand: Harley, Year: 2022
Engine: 1200cc
Harley goes vroom vroom!Başlık dosyalarına başlık koruyucuları eklemeyi ve temel sınıfa erişmek için Motorcycle başlık dosyasında #include "Vehicle.h" kullanmayı unutma.
Kendin dene
#include <iostream>
#include <string>
#include "Motorcycle.h"
using namespace std;
int main() {
string brand;
int year;
int engineCC;
cin >> brand;
cin >> year;
cin >> engineCC;
// TODO: Bir Motorcycle nesnesi oluştur
// TODO: brand, year ve engineCC üyelerini ayarla
// TODO: Kalıtımla alınan bilgileri göstermek için displayInfo() işlevini çağır
// TODO: Motor bilgilerini şu biçimde yazdır: Engine: <engineCC>cc
// TODO: Motosiklete özgü davranışı göstermek için revEngine() işlevini çağır
return 0;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarC++ Derleme ve Derleme SüreciHeader Dosyaları ve Kaynak DosyalarıNamespace'ler ve KapsamC++'ta Nesne Yönelimli Programlamaya GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriTekrar - Basit Hesap Makinesi4Sınıf Özellikleri
Nesne ve Statik ÜyelerGetter ve Setter'larconst Üye Fonksiyonlarımutable Anahtar SözcüğüStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim DüzeyleriCtor ve Dtor Çağrı SırasıMetot Geçersiz KılmaVirtual Fonksiyonlar ve VTableÇoklu KalıtımVirtual KalıtımÖzet - Çalışan Hiyerarşisi2Bellek Yönetimi
Stack ve Heap Belleğiİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++’ta Akıllı İşaretçilerC++’ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'ta Erişim BelirleyicileriErişim Belirleyicilerine Derinlemesine BakışBilgi GizlemeStruct ve Class Karşılaştırmasıİç İçe ve İç SınıflarTekrar - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme Zamanı ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDinamik Tür Dönüştürme ve RTTITekrar - Şekil Hesaplayıcı11İleri Düzey OOP Kavramları
Bileşim ve KalıtımCRTP ile Mixin'lerPimpl İdiomuTür SilmeEnum Sınıfları ve Güçlü TürlemeOOP'de İstisna YönetimiÖzel İstisna Hiyerarşileri14Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpBir Kalıp Olarak RAII3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopyalama YapıcısıTaşıma YapıcısıYapıcı Başlatma ListeleriYönlendiren YapıcılarYıkıcıları Derinlemesine İncelemeÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatörleri Aşırı YüklemeKarşılaştırma Operatörlerini Aşırı YüklemeAkış OperatörleriAtama Operatörünü Aşırı Yükleme[] ve () Operatörlerini Aşırı YüklemeTür Dönüşüm OperatörleriTekrar - Matrix Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeDeğişken Sayıda Argüman Alan ŞablonlarSFINAE ve Tür Özelliklerinin TemelleriTekrar: Genel Amaçlı KapsayıcıKendi başına pratik yap: Online C++ derleyicisi