protected kalıtımı (protected inheritance)

Bir önceki yazımızda private kalıtımı ele almıştık. protected kalıtımda ise kurallar şöyle:
Taban sınıfın (parent class) private bölümü türetilmiş sınıfa (child class) tamamen kapalı. Taban sınıfın public ve protected bölümleri ise türemiş sınıfın protected bölümünün bir parçası olarak ele alınıyor.

Yukarıdaki kodda Der sınıfı Base sınıfından protected kalıtımı ile oluşturulmuş. Der sınıfının üye işlevi içinde Base sınıfının private bölümünde bildirilen pri_func işlevine erişim geçerli değil. Taban sınıfın private bölümü kalıtım biçimi ne olursa olsun türemiş sınıflara kapalı. Ancak taban sınıfın public ve protected bölümleri türemiş sınıfın protected bölümü gibi ele alındığından bu bölümler türemiş sınıfın kodları tarafından kullanılabiliyor. Şimdi de main işlevine bakalım. Der sınıfının protected bölümü Der sınıfının müşterilerine kapalı olduğu için main işlevi içinde yapılan

çağrıları geçerli değil. Buraya kadar neredeyse her şey private kalıtımı ile aynı. Peki protected kalıtımının private kalıtımından farkı ne? Şimdi Der sınfıından bir türetme daha yapalım:

Taban sınıfın protected bölümü türemiş sınıflara açık, değil mi? protected kalıtımı ile oluşturulan Der sınıfının protected arayüzüne kendi taban sınıfı olan Base‘in public ve protected arayüzleri eklenmiş oldu. Artık Der sınıfının protected arayüzüne Der‘den türetilmiş sınıflar da erişebilecekler. SDer sınıfı Der sınıfından kalıtım yoluyla oluşturuluyor. SDer sınıfının foo isimli üye işlevinde pub_func ve pro_func işlevlerine yapılan çağrılar geçerli.

Şimdi Der sınıfının Base sınıfından private kalıtımı yoluyla oluşturulduğunu düşünelim:

private kalıtımında ise taban sınıfın public ve proteced arayüzleri türemiş sınıfın private arayüzüne ekleniyor. SDer sınıfının üye işlevleri SDer sınıfının taban sınıfı olan Der sınıfının private bölümüne erişemiyorlar. Bu yüzden artık SDer sınıfının foo isimli üye işlevinde pub_func ve pro_func işlevlerine yapılan çağrılar geçerli değil.
private kalıtımının hangi amaçlarla kullanıldığı konusuna önceki yazımızda değinmiştik. protected kalıtımı da aynı amaçlarla kullanılacak. Eğer taban sınıftan aldığımız arayüzü kendi oluşturacağımız sınıftan kalıtım yoluyla elde edilecek sınıflara aktarmak istiyorsak protected kalıtımını aktarmak istemiyorsak private kalıtımını tercih etmeliyiz.

Share

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Kod Eklemek İçin Okuyun
Eklemek istediğiniz kodları lütfen aşağıdaki “pre” kodları arasında yazınız.
<pre class="lang:c++ decode:true ">
--yazacağınız kodlar--
</pre>
(buradan kopyalayarak kullanabilirsiniz)