Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Kalı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 bir Vehicle sı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>
  • Motorcycle.h: Vehicle sınıfından herkese açık olarak kalıtım alan bir Motorcycle sı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!

    Motorcycle sınıfı, Vehicle sınıfından brand, year ve displayInfo() öğelerini otomatik olarak devralır.

  • main.cpp: Üç girdi oku (her biri ayrı bir satırda):
    1. Marka adı (dize)
    2. Yıl (tam sayı)
    3. Motor hacmi (CC) (tam sayı)

    Bir Motorcycle nesnesi oluştur ve devralınan üyelerini (brand ve year) ve kendi engineCC üyesini ayarla. Ardından üç çıktı satırını sırasıyla üret: önce devralınan displayInfo() 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;
}
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

Kendi başına pratik yap: Online C++ derleyicisi