0% found this document useful (0 votes)
5 views43 pages

CPPL9 Inheritance

Uploaded by

engineeringengtr
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views43 pages

CPPL9 Inheritance

Uploaded by

engineeringengtr
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

BİL-142 Bilgisayar Programlama II

(C/C++)

Hazırlayan: [Link] Akcayol


Gazi Üniversitesi
Bilgisayar Mühendisliği Bölümü

Konular
 Giriş
 Temel (Base) Sınıflar ve Türetilmiş (Derived) Sınıflar
 protected Üyeler
 Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Türetilmiş Sınıflarda Constructor ve Destructor
 public, protected ve private Inheritance

1
Giriş
 Inheritance (miras alma), bir sınıfa ait data ve
fonksiyonların tekrar kullanılarak daha gelişmiş sınıf
üretilmesini sağlar.
 Tüm data üyeleri ve fonksiyon üyelerini yeniden
oluşturarak bir yeni sınıf oluşturmak yerine mevcut
bir sınıfın üyelerini kullanarak yeni bir sınıf üretmek
daha kolaydır.
 Mevcut sınıf base class, türetilen sınıf ise derived
class olarak adlandırılır.
 Türetilmiş bir class, base class’ın private üyelerine
doğrudan erişemez.

Konular
 Giriş
 Temel (Base) Sınıflar ve Türetilmiş (Derived) Sınıflar
 protected Üyeler
 Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Türetilmiş Sınıflarda Constructor ve Destructor
 public, protected ve private Inheritance

2
Temel Sınıflar ve Türetilmiş Sınıflar
 Bir sınıftan başka sınıflar üretilebilir. Bir çizgi class’ı
kullanılarak bir dikdörtgen veya başka şekil için yeni
bir class türetilebilir.
 Türetilen yeni sınıf (derived-class), türetildiği sınıfın
(base class) bazı öelliklerini kullanabilir.
 Araçlar base class olarak tanımlanırsa, çok sayıda
araç (otomobil, traktör, bot, uçak, bisiklet, ...)
üretilebilir.
 Bir üniversitede çalışanlar için base class
oluşturulursa, akademik ve idari çalışanlara yönelik
iki sınıf türetilebilir.
 Bir sınıf birden fazla sınıf kullanılarak türetilebilir.
5

Temel Sınıflar ve Türetilmiş Sınıflar


 Bir sınıftan (single inheritance) ve birden fazla
sınıftan (multiple inheritance) türetilen sınıflar.

3
Temel Sınıflar ve Türetilmiş Sınıflar
 Şekilde Shape inheritance hiyerarşisi görülmektedir.
 Aşağıdaki kod public inheritance yapmaktadır.

 Tüm inheritance yapılarında (private, protected, public), base


class içindeki private üyelere erişlemez ancak türetilmiş
sınıfında üyeleri sayılırlar.

Konular
 Giriş
 Temel (Base) Sınıflar ve Türetilmiş (Derived) Sınıflar
 protected Üyeler
 Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Türetilmiş Sınıflarda Constructor ve Destructor
 public, protected ve private Inheritance

4
protected Üyeler
 Bir base class’ın public üyelerine, class üyeleri,
oluşturulan nesne, türetilmiş class’lardan oluşturulan
nesneler tarafından erişilebilir.
 Bir base class’ın private üyelerine sadece o class
içindeki fonksiyonlar ve friends fonksiyonlar
tarafından erişilebilir.
 protected ise public ve private arasında
erişim sağlar.
 Bir base class’ın protected üyelerine o class’ın
üyeleri, friends fonksiyonları, o class’tan türetilen
class’ların üyeleri ve friends fonksiyonları tarafından
erişilebilir.
9

Konular
 Giriş
 Temel (Base) Sınıflar ve Türetilmiş (Derived) Sınıflar
 protected Üyeler
 Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Türetilmiş Sınıflarda Constructor ve Destructor
 public, protected ve private Inheritance

5
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Bir şirketin çalışanlarına yönelik uygulamada, komisyonla
çalışan elemanlar (commission employees) ve sabit
ücret+komisyonla çalışan elemanlar (base plus commission
employees) olsun.
 Bu şirket için commission employees ile base salaried
commission employees arasındaki ilişki aşağıdaki farklı
örneklerle oluşturulabilir:
 İlk örnekte, CommissionEmployee class’ı oluşturulup,
first name, last name, social security number,
commission rate ve gross sales amount
değişkenleri private tanımlanabilir.
 İkinci örnekte, BasePlusCommissionEmployee class’ı
oluşturulup, first name, last name, social
security number, commission rate,gross sales
amount ve base salary değişkenleri private tanımlanır.
11

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki


 Üçüncü örnekte, BasePlusCommissionEmployee
class’ının CommissionEmployee class’ından yeni bir
versiyonu oluşturulur ve private üyelere ulaşılmaya
çalışılır. Bu durumda compile hatası oluşur çünkü
türetilmiş class base class’ın private üyelerine ulaşamaz.
 Dördüncü örnekte, CommissionEmployee class’ının
dataları protected tanımlanır, yeni bir
BasePlusCommissionEmployee class’ı oluşturulur ve
CommissionEmployee class’ının datalarına doğrudan
ulaşılabilir.
 Beşinci örnekte, CommissionEmployee class’ının
dataları private tanımlanır,
BasePlusCommissionEmployee class’ı türetilir ve
CommissionEmployee class’ının fonksiyonlarıyla private
datalara erişilir. 12

6
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 CommisionEmployee class’ının oluşturulması

13

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

14

7
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

15

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

16

8
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

17

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

18

9
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

19

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

20

10
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

21

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki


 CommissionEmployee class’ı, bir constructor,
earnings isimli fonksiyon ve print isimli
fonksiyon üyelerine sahiptir.
 get ve set fonksiyonları firstname, lastname,
socialSecurityNumber, grossSales ve
commisionRate dataları üzerinde işlem yapmak
için kullanılır.
 CommissionEmployee class’ının constructor’ı data
üyelerine ilk değerlerini atar.

22

11
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 BasePlusCommissionEmployee class’ının inheritance
olmadan oluşturulması

23

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

24

12
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

25

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

26

13
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

27

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

28

14
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

29

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

30

15
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

31

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

32

16
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 CommissionEmployee class’ı ile
BasePlusCommissionEmployee class’ının birçok
kodu aynıdır. Örneğin firstName, lastName,
getFirstName, setFirstName, setLastName ve
getLastName aynıdır.
 get ve set fonksiyonları ile ikisi de private data üyeleri
socialSecurityNumber, grossSales ve
commisionRate üzerinde işlem yapıyorlar.
 BasePlusCommissionEmployee class’ının
constructor’ı farklı olarak baseSalary değerini set
ediyor.
 BasePlusCommissionEmployee class’ının diğer
farklılıkları setBaseSalary ve getBaseSalary
fonksiyonlarıdır. 33

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki


 BasePlusCommissionEmployee class’ının inheritance
kullanılarak oluşturulması

34

17
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

35

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

Türetilen class, base


class’ın private üyelerine
erişemez.

36

18
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 BasePlusCommissionEmployee class’ı
CommissionEmployee class’ı kullanılarak türetilmiştir.
 public anahtar kelimesi,
BasePlusCommissionEmployee class’ının
CommissionEmployee class’ının tüm üyelerini
alacağını gösterir.
 Türetilmiş class’lar base class’ların constructor’larını
alamazlar. Her class kendi constructor’ına sahiptir.
 Önceki örnekte BasePlusCommissionEmployee
class’ı, CommissionEmployee class’ının private
üyelerine erişmeye çalıştığı için compile hatası verir.
 Satır 35’te, getCommisionRate ve getGrossSales
fonksiyonları ile aynı değerler alınabilir. Aynı değişiklik
Satır 42-45’tede yapılabilir. 37

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki


 protected data kullanarak BasePlusCommissionEmployee-
CommissionEmployee inheritance oluşturulması

38

19
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

39

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

40

20
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

41

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

42

21
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

43

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

44

22
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

45

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

46

23
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

47

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

48

24
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

49

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki


 BasePlusCommissionEmployee class’ının
CommissionEmployee class’ındaki firstName,
lastName, socialSecurityNumber, grossSales
ve commissionRate data üylerine ulaşabilmesi için
protected tanımlanması gereklidir.
 protected data üyeleri bir class’ın tüm üyeleri, friends
fonksiyonları ve o class’tan türetilmiş tüm class’ların
üyeleri ve friends fonksiyonları tarafından erişilebilir.

50

25
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Önceki örnekte CommissionEmployee class’ında
firstName, lastName, socialSecurityNumber,
grossSales ve commissionRate data üyleri
protected tanımlanmıştır.
 protected tanımlanan data üyelerine get ve set
fonksiyonları olmadan erişilebildiği için performans artar.
 Ancak protected tanımlanan data üyelerine türetilmiş
class’lar tarafından geçersiz değer atanabilir.

51

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki


 private data kullanarak BasePlusCommissionEmployee-
CommissionEmployee inheritance oluşturulması

52

26
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

53

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

54

27
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

55

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

56

28
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

57

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

58

29
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

59

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

60

30
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

61

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

62

31
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

63

Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki

 En iyi yazılım mühendisliği yaklaşımı base class data


üyelerinin private tanımlanması ve public
fonksiyonlara erişime izin verilmesidir. Önceki örnekte bu
yönde yeniden düzenleme yapılmıştır.
 CommissionEmployee class’ının data üyeleri
firstName, lastName, socialSecurityNumber,
grossSales ve commissionRate private
tanımlanmış ve public fonksiyonlar olan
getFirstName, setFirstName, getLastName,
setLastName, getSocialSecurityNumber,
setSocialSecurityNumber, getGrossSales,
setGrossSales, setCommissionRate,
getCommissionRate, earnings ve print ile
erişilebilmektedir. 64

32
Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 BasePlusCommissionEmployee class’ı earnings
fonksiyonuna sahiptir. Ancak CommissionEmployee
class’ının earnings fonksiyonu ile baseSalary
değerini toplamaktadır.
 CommissionEmployee class’ının fonksiyonlarına
türetilmiş class içinden erişmek için :: operatörü
kullanılır (CommissionEmployee::earnings()).
 Türetilmiş class içinden base class fonksiyonunu
çağırırken :: kullanılmazsa sonsuz recursion oluşur.

65

Konular
 Giriş
 Temel (Base) Sınıflar ve Türetilmiş (Derived) Sınıflar
 protected Üyeler
 Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Türetilmiş Sınıflarda Constructor ve Destructor
 public, protected ve private Inheritance

33
Türetilmiş Sınıflarda Constructor ve Destructor
 Bir türetilmiş class’tan nesne üretildiğinde, önce kendi
constructor’ını çağırır. Kendi constructor’ı çalıştırılmadan önce
base class constructor’ı çalıştırılır.
 Eğer base class’ta başka class’tan türetilmişse bu işlem
önceki class içinde yapılır.
 Önceki örneklerde BasePlusCommissionEmployee
class’ından bir nesne oluşturulduğunda,
CommissionEmployee constructor’ı çağırılır.
 CommissionEmployee constructor’ının çalışması bitince
BasePlusCommissionEmployee constructor’ı çağırılır.
 Bir türetilmiş class’ın destructor’ı çağırıldığında, sırasıyla
kendi destructor’ı ve base class destructor’ı çalıştırılır. Bu
işlem hiyerarşik olarak son base class’a kadar kaskad devam
eder.
67

Türetilmiş Sınıflarda Constructor ve Destructor

68

34
Türetilmiş Sınıflarda Constructor ve Destructor

69

Türetilmiş Sınıflarda Constructor ve Destructor

70

35
Türetilmiş Sınıflarda Constructor ve Destructor

71

Türetilmiş Sınıflarda Constructor ve Destructor

72

36
Türetilmiş Sınıflarda Constructor ve Destructor

73

Türetilmiş Sınıflarda Constructor ve Destructor

74

37
Türetilmiş Sınıflarda Constructor ve Destructor

75

Türetilmiş Sınıflarda Constructor ve Destructor

76

38
Türetilmiş Sınıflarda Constructor ve Destructor

77

Türetilmiş Sınıflarda Constructor ve Destructor

78

39
Konular
 Giriş
 Temel (Base) Sınıflar ve Türetilmiş (Derived) Sınıflar
 protected Üyeler
 Temel Sınıflar ve Türetilmiş Sınıflar Arasındaki İlişki
 Türetilmiş Sınıflarda Constructor ve Destructor
 public, protected ve private Inheritance

public, protected ve private Inheritance


 Bir class kullanılarak yeni bir class türetilirken public,
private veya protected inheritance yapılabilir.
 Genellikle public inheritance kullanılır.
 Bir base class’tan yeni bir class public olarak türetilirse,
base class’ın public üyeleri türetilmiş class’ın public
üyeleri ve base class’ın protected üyeleri türetilmiş class’ın
protected üyeleri olur.
 Türetilmiş class ile base class’ın private üyelerine ulaşılamaz.
 Bir base class’tan yeni bir class protected olarak türetilirse,
base class’ın public ve protected üyeleri türetilmiş
class’ın protected üyeleri olur.
 Bir base class’tan yeni bir class private olarak türetilirse,
base class’ın public ve protected üyeleri türetilmiş
class’ın private üyeleri olur.
80

40
public, protected ve private Inheritance
 Türetilmiş sınıftaki erişim belrileyicisi base sınıftakinden daha
geniş olamaz.

81

public, protected ve private Inheritance

82

41
public, protected ve private Inheritance
 Türetilen sınıfta kalıtım şekline göre erişim yapılabilir.

83

public, protected ve private Inheritance


 public kalıtım

84

42
public, protected ve private Inheritance
 protected kalıtım

85

public, protected ve private Inheritance


 private kalıtım

86

43

You might also like