Menü Kapat

Kalıtım

Kalıtım (inheritance) bir nesnenin başka bir nesnenin özelliklerini birebir devralmasıdır. Yeni sınıflar kalıtım mekanizmasıyla var olan sınıflardan türetilebilirler. Sınıfların türetildiği sınıflara ana sınıf ve türetilen sınıflara ise alt sınıf denir.

class Arac
{
private:
    string Mensei;
    string Renk;
    ...
};

class Araba : Arac
{
    ///Mensei ve Renk özelliklerini içerir
    ///Araba için diğer özellikler burada bulunacaktır
};

 

Bu örnekte Arac ana sınıf, Araba ise türetilmiş sınıftır. Araba sınıfı otomatik olarak Mensei ve Renk özelliklerini kalıtır ve Araba’ya özel özellikleri ve fonksiyonları eklemekte özgürdür.

C++’da Kalıtım Tipleri

C++ public, private ve protected olmak üzere 3 çeşit kalıtım tipini destekler. Public kalıtım’da türetilen sınıf ana sınıfın private ve public tüm üye değişkenlerini kalıtır fakat sadece ana sınıfın public elemanlarına doğrudan erişebilir.

Kalıtım Tipleri

Insan.h

#pragma once

#include
#include <string>
using namespace std;

class Insan {
private:
    string isim;
    string soyIsim;
    int yas;
public:
    Insan();
    Insan(string i, string s);
    Insan(string i, string s, int y);

    ~Insan();

    void merhaba() const;
};

 

Ogrenci.h

#pragma once
#include "Insan.h"

class Ogrenci :  public Insan
{
public:
    Ogrenci();
    ~Ogrenci();
};

 

Ogrenci.cpp

#include "Ogrenci.h"

    Ogrenci::Ogrenci()
    {
    }

    Ogrenci::~Ogrenci()
    {
    }

 

main.cpp

#include "Insan.h"
#include "Ogrenci.h"

int main()
{

    Ogrenci ogrenci1;

    //ogrenci1.isim = "Burak";///Hata: private elemana doğrudan erişim

    ogrenci1.merhaba();

    return 0;
}

 

Bu örnekte bir Insan sınıfı var. Daha sonra Ogrenci sınıfı geliyor ve “:” işareti ve public Insan ile devam ediyor. Bu, Ogrenci sınıfının, Insan sınıfının public kalıtımlı alt sınıfı olduğunu gösteriyor. Aynı zamanda Ogrenci sınıfının varsayılan yapıcı ve yıkıcı fonksiyonları vardır ki bunlar Insan sınıfınınkilerden ayrıdır.

Bahsedildiği gibi C++ kalıtımında public, private ve protected olmak üzere 3 tip vardır.

Table 1. Erişim

Erişim

public

protected

private

Aynı sınıf

+

+

+

Türetilmiş sınıf

+

+

Sınıf dışı

+

Örnek: Public Inheritence

class Base
{
public:
    int m_public;
private:
    int m_private;
protected:
    int m_protected;

};

class Pub: public Base
{
public:
    Pub()
    {
        m_public = 1; // doğru: m_public public olarak kalıtılmıştır
        m_private = 2; // yanlış: m_private türetilmiş sınıftan erişilemez
        m_protected = 3; // doğru: m_protected protected olarak kalıtılmıştır

    }

};

int main()
{
    Base base;
    base.m_public = 1; // doğru
    base.m_private = 2; // yanlış: m_private erişilemez
    base.m_protected = 3; // yanlış: m_protected doğrudan erişilemez

    Pub pub;
    pub.m_public = 1; // doğru
    pub.m_private = 2; // yanlış: m_private Pub tarafından erişilemez
    pub.m_protected = 3; // yanlış: m_protected doğrudan erişilemez

 

Örnek: Private Inheritence

class Base
{
public:
    int m_public;
private:
    int m_private;
protected:
    int m_protected;

};
class Pri: private Base
{

public:

    Pri()
    {
        m_public = 1; // doğru
        m_private = 2; // yanlış: türetilmiş sınıflar ana sınıftaki private'a erişemez
        m_protected = 3; // doğru

    }

};
int main()
{

    Base base;

    base.m_public = 1; // doğru
    base.m_private = 2; // yanlış: m_private Base sınıfında private'dır
    base.m_protected = 3; // yanlış: m_protected Base sınıfta protected'dır

    Pri pri;
    pri.m_public = 1; // yanlış: m_public artık private'dır
    pri.m_private = 2; // yanlış: m_private artık erişilemezdir
    pri.m_protected = 3; // yanlış: m_protected artık&nbsp;private'dır

    return 0;
}

 

public

protected

private

public üyeler türetilmiş sınıfta da public olur ve üye ve üye olmayan fonksiyonlar tarafından doğrudan erişilebilirler

public üyeler türetilmiş sınıfta protected olurlar ve üye fonksiyonlar tarafından erişilebilirler

public üyeler türetilmiş sınıfta private olurlar ve üye fonksiyonlar tarafından erişilebilirler

protected üyeler türetilmiş sınıfta da protected olur ve üye fonksiyonlar tarafından erişilebilirler

üyeler türetilmiş fonksiyonda yine protected olurlar ve üye fonksiyonlar tarafından erişilebilirler

protected üyeler türetilmiş sınıfta private olurlar ve üye fonksiyonlar tarafından erişilebilirler

private üyeler türetilmiş sınıfta gizlidir ve erişilemezler

private üyeler türetilmiş sınıfta gizlidir ve erişilemezler

private üyeler türetilmiş sınıfta gizlidir ve erişilemezler

Bir yorum yazınız. Yorumlarınız bizim için değerlidir.