Using Inheritance

Kategori: C++ , 16 Kasım 2019 , JanFranco


Interitance yani kalıtım, bir sınıfın başka bir sınıfın özelliklerini kopyalamasıdır. Örneğin elimizde bir hayvan sınıfı mevcut. Bu sınıfın isim, bacak sayısı gibi özellikleri var. Yeni bir köpek sınıfı açalım. Bu sınıfın da isim, bacak sayısı gibi özellikleri olacak. Bunların yanında yeni özellikler de ekleyeceğiz. Bu durumda köpek sınıfı hayvan sınıfından miras alırsa, isim, bacak sayısı gibi özellikleri kopyalamış olacak. Bu özelliklerin yanına yeni özellikler de ekleyebilecek. C++'da inheritance implementasyonu aşağıdaki şekildedir:


class subclas_name : access_mode base_class_name
{
    // body
};
Bir örnek yapalım:


#include <bits/stdc++.h> 

using namespace std; 

class Parent 
{ 
    public: 
    int id_p; 
}; 

class Child : public Parent 
{ 
    public: 
    int id_c; 
}; 

int main() 
{ 
    Child obj1; 
    obj1.id_c = 7; 
    obj1.id_p = 91; 
    cout << "Child id is " << obj1.id_c << endl; 
    cout << "Parent id is " << obj1.id_p << endl; 
    return 0; 
}

>>

Child id is 7
Parent id is 91
Burada Child sınıfı Parent sınıfından miras aldı. C++'da 3 tip kalıtım modu vardır: public, protected, private. Public modda base class'ın (miras alınan sınıf) özellikleri aynen alınır. Public özellikleri public olarak, private özellikleri private olarak, protected özellikleri protected olarak alınır. Protected modda base sınıfın public ve protected özellikleri protected olarak alınır, private özellikleri ise private olarak kalır. Private modda ise tüm özellikler private olarak alınır. Bir örnek görelim:


class A 
{ 
    public: 
	int x; 
    protected: 
	int y; 
    private: 
	int z; 
}; 

class B : public A 
{ 
	// x is public 
	// y is protected 
	// z is not accessible from B 
}; 

class C : protected A 
{ 
	// x is protected 
	// y is protected 
	// z is not accessible from C 
}; 

class D : private A
{ 
	// x is private 
	// y is private 
	// z is not accessible from D 
}; 
Burada A sınıfında x public alanda, y protected alanda, z ise private alanda tanımlanmış. Bu sınıfı miras olarak alacağız. B sınıfı public modda miras alıyor. Bu durumda A sınıfının x, y değişkenlerinin erişim belirleyicisi ne ise o şekilde alınıyor. z değişkenine B sınıfı erişemiyor. Yani B sınıfında x public bir değişken, y protected değişken ve z erişilebilir değil. C sınıfı protected modda miras alıyor. Bu durumda x ve y değişkenleri B sınıfında protected olarak bulunuyor. z değişkenine ise erişilemiyor. D sınıfı private modda miras alıyor. Bu durumda x ve y değişkenleri private olarak tanımlanıyor ve z değişkenine yine erişilemiyor. C++'daki inheritance modları bu şekilde. Inheritance tekli yapılabileceği gibi çoklu da yapılabilir:


class subclass_name : access_mode base_class
{
    // body
};
Bu şekildeki kullanım single inheritance'tır. Yani tekli kalıtım. Bir türeyen bir de miras alınan sınıf vardır. Örnek verelim:


class Vehicle { 
    public: 
	Vehicle() 
	{ 
	    cout << "This is a Vehicle" << endl; 
	} 
}; 

class Car: public Vehicle{ 

};
Car yani araba sınıfı Vehicle yani araç sınıfını miras aldı. Çoklu kalıtımı görelim:


class subclass_name : access_mode base_class1, access_mode base_class2, ....
{
    // body of subclass
};
Türeyen sınıf bir kaç base sınıftan miras alabilir. Örnek görelim:


class Vehicle { 
    public: 
	Vehicle() 
	{ 
	    cout << "This is a Vehicle" << endl; 
	} 
}; 

class FourWheeler { 
    public: 
	FourWheeler() 
	{ 
	    cout << "This is a 4 wheeler Vehicle" << endl; 
	} 
}; 

class Car: public Vehicle, public FourWheeler { 

}; 
Burada Car sınıfı hem Vehicle hem de FourWheeler sınıflarından miras almıştır. Yani araba hem bir araçtır hem de dört tekerleklidir.


Yorumlar

Henüz bir yorum bulunmuyor.