Kalıtımı özel hale getirerek, temel olarak B'nin A'dan miras almasının bile (hiç) özel olduğunu - dış dünya tarafından erişilebilir / görünür olmadığını söylüyorsunuz.
İzin verilirse ne olacağına dair uzun soluklu bir tartışmaya girmeden, basit gerçek, buna izin verilmemesidir. Türetilmiş türdeki bir nesneye başvurmak için tabana bir işaretçi kullanmak istiyorsanız, genel kalıtım kullanmakta oldukça sıkışıp kaldınız demektir.
Özel miras değil mutlaka (ya da normal) izlenmesi amaçlanan Liskov ikame prensibi . Açık miras türetilmiş bir amacı, ana sınıfı bir nesne ile ikame edilebilir, ve uygun anlam iddia edecek yine sonuçlanır. Özel miras yok değil buna da düşünmektedirler. Özel mirasın ima ettiği ilişkinin olağan açıklaması "açısından uygulanır" dır.
Genel miras, türetilmiş bir sınıfın temel sınıfın tüm yeteneklerini koruduğu ve bunun yanında potansiyel olarak daha fazlasını eklediği anlamına gelir. Özel miras genellikle aşağı yukarı tam tersi anlamına gelir: türetilmiş sınıf, daha kısıtlı bir arayüzle bir şeyi uygulamak için genel bir temel sınıf kullanır.
Örneğin, şimdilik C ++ standart kitaplığındaki kapsayıcıların şablonlar yerine kalıtım kullanılarak uygulandığını varsayalım. Mevcut sistemde, std::deque
ve std::vector
kaplar, ve std::stack
daha kısıtlı bir arayüz sağlayan bir kap adaptörüdür. Şablonlara dayandığından, veya std::stack
için bir adaptör olarak kullanabilirsiniz .std::deque
std::vector
Aynı şeyi mirasla sağlamak isteseydik, muhtemelen özel mirası kullanırdık, bu nedenle std::stack
şöyle bir şey olurdu:
class stack : private vector {
};
Bu durumda, biz kesinlikle yok değil kullansın manipüle edebilmek istiyorum stack
bu bir sanki vector
. Bunu yapmak, bir yığının beklentilerini ihlal edebilir (ve büyük olasılıkla) (örneğin, kullanıcı amaçlandığı gibi tamamen yığın benzeri bir moda yerine ortadaki öğeleri ekleyebilir / çıkarabilir). Biz temelde kullandığınız vector
bizim yığınını uygulamak için uygun bir yol olarak, ama (örneğin) biz uygulanmasını değiştirdiyseniz stack
ya da (hayır bir temel sınıf bağımlılıktan birlikte) tek başına standı açısından bunu yeniden uygulamak std::deque
, biz do not bunu istiyorum herhangi bir müşteri kodunu etkilemek için - müşteri kodu için, bunun sadece bir yığın olması gerekir, özel bir vektör (veya deque) çeşidi değil.
protected