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 hem Animal sınıfından gelen name ve eat() özelliklerine hem de kendi bark() metoduna erişebilir. 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'dan ö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 kalması anlamına gelir. Bu en yaygın biçimdir ve bir "is-a" 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ğıdakilere 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 olarak miras 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 miras alacaktır.

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

    Bir Motorcycle nesnesi oluşturun, miras alınan üyelerini (brand ve year) ve kendi engineCC üyesini ayarlayın. Ardından hem miras alınan metodu hem de motosiklete özgü metodu çağırarak kalıtımı gösterin.

    Çı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.

Kopya kağıdı

Kalıtım, bir sınıfın başka bir sınıftan özellikler ve davranışlar edinmesini sağlar. Miras alınan sınıf temel sınıf (ebeveyn), miras alan sınıf ise türetilmiş sınıf (çocuk) olarak adlandırılır.

Türetilmiş bir sınıf oluşturmak için, iki nokta üst üste işaretinden sonra erişim belirleyicisini 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;
    }
};

Türetilmiş sınıf, temel sınıfın genel (public) üyelerine ve kendi üyelerine erişebilir:

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Animal sınıfından miras alındı
myDog.bark();   // Dog sınıfında tanımlandı

public anahtar kelimesi genel kalıtımı belirtir; bu, temel sınıfın genel üyelerinin türetilmiş sınıfta da genel kalmaya devam edeceği anlamına gelir. Bu, bir "is-a" (bir ...-dır) ilişkisini modeller.

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şturun
    // TODO: brand, year ve engineCC üyelerini ayarlayın
    // TODO: Kalıtılan bilgileri göstermek için displayInfo() fonksiyonunu çağırın
    // TODO: Motor bilgisini şu formatta yazdırın: Engine: <engineCC>cc
    // TODO: 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