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ı

public anahtar sözcüğü, Animal sözcüğünden önce kullanıldığında kalıtım türünü belirtir. Genel kalıtım, temel sınıfın genel üyelerinin türetilmiş sınıfta genel olarak kalması anlamına gelir. Bu, en yaygın biçimdir ve “bir ...’dır” ilişkisini modeller: bir Dog bir Animal’dır.

challenge icon

Görev

Kolay

Kalıtımı uygulamalı olarak 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 ayıracaksın:

  • Vehicle.h: Şunları içeren bir temel Vehicle sınıfı tanımla:
    • Genel bir std::string brand üyesi
    • Genel bir int year üyesi
    • Araç markasını ve yılını şu biçimde yazdıran genel bir displayInfo() yöntemi: Brand: <brand>, Year: <year>
  • Motorcycle.h: Motorcycle sınıfından genel olarak kalıtım alan bir Vehicle sınıfı tanımla. Bu türetilmiş sınıf şunları eklemelidir:
    • Motor hacmi için genel bir int engineCC üyesi
    • Şunu yazdıran genel bir revEngine() yöntemi: <brand> goes vroom vroom!

    Motorcycle sınıfı brand, year ve displayInfo() üyelerini Vehicle sınıfından otomatik olarak devralır.

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

    Bir Motorcycle nesnesi oluştur; 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 std::cout << "Engine: " << moto.engineCC << "cc" << std::endl; ile kendin yazdır 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 koruma makroları eklemeyi ve temel sınıfa erişmek için Motorcycle başlığı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;

    // 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

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