Ünitenin tamamını tek sayfada görPremium
Kalıtım, nesne yönelimli programlamanın (OOP) en temel taşlarından biridir ve yazılımın yeniden kullanılabilirliğini (reusability) artırmak için tasarlanmıştır. Mevcut bir sınıftan (base class) yeni bir sınıf (derived class) türetme işlemidir. Bu süreçte, mevcut sınıfın veri üyeleri ve üye fonksiyonları yeni sınıfa aktarılır. Türetilmiş sınıf, temel sınıfın özelliklerini devralarak daha özelleşmiş bir nesne grubu temsil eder.
Kalıtım hiyerarşisinde 'doğrudan temel sınıf' (direct base class) ve 'dolaylı temel sınıf' (indirect base class) kavramları mevcuttur. Doğrudan temel sınıf, türetilen sınıfın bir seviye üstündeki sınıftır. Dolaylı temel sınıf ise hiyerarşide iki veya daha fazla seviye yukarıda bulunan sınıfları ifade eder. Ayrıca, bir sınıfın tek bir temel sınıftan türetilmesine 'tekli kalıtım', birden fazla temel sınıftan türetilmesine ise 'çoklu kalıtım' denir.
Kalıtımın temel mantığı 'is-a' (bir ...-dir) ilişkisine dayanır. Örneğin, bir 'Araba' (Car) sınıfı, bir 'Taşıt' (Vehicle) sınıfından türetildiğinde, araba aynı zamanda bir taşıttır. Bu durum, türetilmiş sınıf nesnesinin temel sınıf nesnesi olarak ele alınabileceğini gösterir. Buna karşılık 'has-a' (bir ...-e sahiptir) ilişkisi, kalıtım değil 'kompozisyon' (composition) olarak adlandırılır ve bir sınıfın başka bir sınıfın nesnesini veri üyesi olarak barındırmasını ifade eder.
C++ programlama dilinde üç ana kalıtım türü bulunur: public, private ve protected. 'Public' kalıtımda, türetilmiş sınıfın her nesnesi aynı zamanda temel sınıfın bir nesnesidir. Ancak bunun tersi doğru değildir; temel sınıfın nesnesi, türetilmiş sınıfın bir nesnesi olarak kabul edilemez. Türetilmiş sınıflar, temel sınıfın özel (private) üyelerine doğrudan erişemezler; bu verilere erişmek için temel sınıfta tanımlanmış olan public veya protected üye fonksiyonları kullanmaları gerekir.
Kalıtım hiyerarşisi, ağaç benzeri bir yapı oluşturur. Bir sınıf hem temel sınıf hem de türetilmiş sınıf rolünü üstlenebilir. Temel sınıflar, türetilmiş sınıflara veri ve işlevsellik sağlarken, türetilmiş sınıflar bu özellikleri devralarak üzerine yeni veri üyeleri veya fonksiyonlar ekleyebilirler. Bu yapı, yazılımın modülerliğini ve genişletilebilirliğini sağlar.
Public kalıtım örneğinde, 'class TwoDimensionalShape : public Shape' ifadesi kullanılır. Burada TwoDimensionalShape, Shape sınıfından türetilir. Temel sınıfın private üyeleri doğrudan erişilebilir olmasa da, türetilmiş sınıf nesnesinin bir parçası olarak kalıtım yoluyla aktarılırlar. Öte yandan, 'friend' fonksiyonları kalıtım yoluyla aktarılmazlar; yani bir temel sınıfın arkadaşı, türetilmiş sınıfın da otomatik olarak arkadaşı sayılmaz.
Protected erişim belirleyicisi, public ve private arasında bir ara koruma seviyesi sunar. Bir üye 'protected' olarak tanımlandığında, bu üye sadece temel sınıfın kendi üyeleri, temel sınıfın arkadaşları (friends), türetilmiş sınıfın üyeleri ve türetilmiş sınıfın arkadaşları tarafından erişilebilir hale gelir.
Bu mekanizma, private üyelerin sağladığı katı gizliliği korurken, aynı zamanda türetilmiş sınıfların temel sınıfın iç yapısına daha esnek bir şekilde erişmesine olanak tanır. Özellikle sınıf hiyerarşilerinde, türetilmiş sınıfların temel sınıfın özelliklerini manipüle etmesi gereken durumlarda protected kullanımı oldukça yaygındır.
Kalıtım hiyerarşisinde public ve protected üyeler, türetilmiş sınıfa aktarılırken orijinal erişim seviyelerini korurlar. Bu, türetilmiş sınıfın temel sınıfın sağladığı arayüzü ve korumalı verileri, hiyerarşi içinde güvenli bir şekilde kullanabilmesini sağlar. Ancak, private üyelerin kalıtım yoluyla aktarılmasına rağmen doğrudan erişilememesi, kapsülleme (encapsulation) ilkesinin bir gereğidir.