Menu
Coddy logo textTech

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. Kendisinden kalıtım alınan sınıfa temel sınıf (veya ebeveyn), kalıtım alan sınıfa ise türetilmiş sınıf (veya çocuk) denir.

Türetilmiş bir sınıf oluşturmak için, iki nokta üst üste ve ardından erişim belirleyicisi ile 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 gelen hem name hem de eat() öğelerine erişebilir, ayrıca kendi bark() metoduna sahiptir. Kalıtımın özü budur: yeni işlevsellik 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 kelimesinden önceki public anahtar kelimesi kalıtım türünü belirtir. Public kalıtım, temel sınıfın public üyelerinin türetilmiş sınıfta public kalmaya devam etmesi anlamına gelir. Bu en yaygın formdur ve bir "is-a" (bir ...-dır) ilişkisini modeller: bir Dog bir Animal'dır.

challenge icon

Görev

Kolay

Kalıtımı (inheritance) iş başında gösteren basit bir araç hiyerarşisi oluşturalım. Temel bir Vehicle sınıfı ve onu özel davranışlarla genişleten türetilmiş bir Motorcycle sınıfı oluşturacaksınız.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • Vehicle.h: Aşağıdaki özelliklere sahip temel bir Vehicle sınıfı tanımlayın:
    • Genel (public) bir std::string brand üyesi
    • Genel (public) bir int year üyesi
    • Aracın markasını ve yılını şu formatta yazdıran genel bir displayInfo() metodu: Brand: <brand>, Year: <year>
  • Motorcycle.h: Vehicle sınıfından genel (public) olarak kalıtım alan bir Motorcycle sınıfı tanımlayın. Bu türetilmiş sınıf şunları eklemelidir:
    • Motor hacmi için genel bir int engineCC üyesi
    • Şunu yazdıran genel bir revEngine() metodu: <brand> goes vroom vroom!

    Motorcycle sınıfı, brand, year ve displayInfo() özelliklerini Vehicle sınıfından otomatik olarak devralacaktır.

  • main.cpp: Üç girişi okuyun (her biri ayrı bir satırda):
    1. Marka adı (string)
    2. Yıl (tamsayı)
    3. Motor CC (tamsayı)

    Bir Motorcycle nesnesi oluşturun, devralınan üyelerini (brand ve year) ve kendi engineCC üyesini ayarlayın. Ardından sırasıyla üç çıktı satırı oluşturun: önce devralınan displayInfo() metodunu çağırın, ardından motor hacmini kendiniz std::cout << "Engine: " << moto.engineCC << "cc" << std::endl; ile yazdırın ve son olarak motosiklete özgü revEngine() metodunu çağırın. Bu, hem devralınan metodu hem de türetilmiş sınıfın kendi metodunu kullanarak kalıtımı gösterir.

    Çıktı formatı:

    Brand: <brand>, Year: <year>
    Engine: <engineCC>cc
    <brand> goes vroom vroom!

Örneğin, Harley, 2022 ve 1200 girişleri için:

Brand: Harley, Year: 2022
Engine: 1200cc
Harley goes vroom vroom!

Başlık dosyalarınıza "header guard" eklemeyi ve temel sınıfa erişmek için Motorcycle başlık dosyanızda #include "Vehicle.h" kullanmayı unutmayın.

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;

    // YAPILACAK: Bir Motorcycle nesnesi oluşturun
    // YAPILACAK: Marka, yıl ve engineCC üyelerini ayarlayın
    // YAPILACAK: Kalıtılan bilgileri göstermek için displayInfo() fonksiyonunu çağırın
    // YAPILACAK: Motor bilgisini şu formatta yazdırın: Engine: <engineCC>cc
    // YAPILACAK: Motosiklete özgü davranışı göstermek için revEngine() fonksiyonunu çağırın

    return 0;
}
quiz iconKendini test et

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