C++ Dersi:
Nesne Tabanlı Programlama
2. Baskı
Bölüm 13: Miras
³
İçerik
13.1 Miras Kavramı
13.2 Miras Yönteminin Uygulanması
13.3 ErişimEKketleri: public, private, protected 13.4 Miras ve Yapıcı Fonksiyonlar
13.5 Üst Sınıf Tanımlamasında public, private ve protected Erişim EKketlerinin Kullanımı
13.6 Üst SınıQaki Fonksiyonların Alt Sınıflarda Tekrar Tanımlanması
13.7 Çoklu Miras Çözümlü Sorular
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
2
Hedefler
• Verilen sınıflar arasında miras ilişkisi kurma
• Aralarında miras ilişkisi olan sınıf tanımlarını dikkate alarak UML sınıf diyagramını çizme
• public, private ve protected erişim eKketlerinin farklarını açıklama
• Verilen problem tanımını dikkate alarak, üst sınıf tanımlamasında, public, private ve protected eKketlerinden uygun olanı
seçme
• Alt sınıflarda üst sınıfa ait yapıcı fonksiyonları çağırma
• Üst sınıQa tanımlı olan fonksiyonları alt sınıflarda tekrar tanımlama
13.1 Miras Kavramı
• İng. Inheritance
• Var olan bir sınıQan bir alt sınıf türeterek üyelerin alt sınıfa aktarılmasına miras adı verilir.
• Sınıflar arası ilişkiyi tanımlayarak bir hiyerarşi kurulmasını sağlar.
• İki sınıf arasındaki veri üyelerine ve üye fonksiyonlarına
bakıldığında benzerlikler var ise, ortak olan bu üyeler temel bir sınıQa toplanır. Bu temel sınıQan türeyen alt sınıflar bu üyelere miras yoluyla sahip olurlar.
• Ortak üyelere ek olarak, alt sınıf kendine özgü yeni veri üyeleri ve üye fonksiyonlar tanımlayabilir.
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
4
13.1 Miras Kavramı...
• Ogrenci ve Personel sınıfları; ad, soyad, tckimlik ve
adres bilgilerini Birey sını`ndan miras olarak alır .
13.1 Miras Kavramı...
• Özellikleri miras alınan sınıfa üst sınıf (superclass) veya taban sınıf (base class), miras alan sınıfa ise alt sınıf (subclass) veya türemiş sınıf (derived class) adı verilir
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
6
13.1 Miras Kavramı...
• Bir üst sınıf sadece kendi bünyesinde tanımlı üyelere erişebilir, alt sınıflarına ait üyelere erişemez.
• Sınıflar arasında miras ilişkisi olup olmadığını daha iyi anlamak için,
“ tasarlanan alt sınıf bir üst sınıQır” önermesinin doğru olması gereklidir.
– Öğrenci bir Birey’dir. // doğru bir önermedir
– Kare bir Daire’dir. // doğru bir önerme değildir
13.2 Miras Yönteminin Uygulanması
• Miras ilişkisi, public (genel), private (özel) ve protected (korumalı) olmak üzere üç farklı erişim eKkeK ile kurulabilir.
• public erişim eKkeK, üst sınıQan aktarılan public üyelere alt sınıQan da public, protected üyelere protected ve private üyelere ise private olarak erişileceğini ifade eder.
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
8
13.2 Miras Yönteminin Uygulanması...
• Örnek
13.2 Miras Yönteminin Uygulanması...
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
10
13.3 Erişim EIketleri: public, private, protected
• public erişim eKkeK ile tanımlanmış tüm üyeler, aralarında miras ilişkisi olsun olmasın diğer tüm sınıflar tara`ndan erişilebilir
üyelerdir.
• private erişim eKkeKne sahip tüm sınıf üyelerine dışarıdan erişim kapailır.
• protected eKkeK ile tanımlanan üyelere
sadece alt sınıflar erişebilir.
13.3 Erişim EIketleri: public, private, protected...
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
12
• Örnek
13.3 Erişim EIketleri: public, private,
protected...
13.3 Erişim EIketleri: public, private, protected...
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
14
13.4 Miras ve Yapıcı Fonksiyonlar
• Alt sınıf Kpinde bir nesne yarailırken öncelikle üst sını`n yapıcı fonksiyonu çağrılır, daha sonra alt sını`n yapıcı
fonksiyonu çağrılır.
• Yıkıcı fonksiyonlar için ise bu tam tersidir: öncelikle alt sını`n
yıkıcı fonksiyonu, onun ardından üst sını`n yıkıcı fonksiyonu
çağrılır.
13.4 Miras ve Yapıcı Fonksiyonlar...
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
16
13.4 Miras ve Yapıcı Fonksiyonlar...
13.4 Miras ve Yapıcı Fonksiyonlar...
• Örnek
– Birey sını` üst sınıQır
– Ogrenci sını` Birey sını`nın alt sını`dır
– Ogrenci sını`nın sahip olduğu veri üyeleri, miras yoluyla aldığı ad, soyad ve kendi sahip olduğu ogrenciNo ve ortalama’dır.
– Ogrenci sını`nın sahip olduğu üye fonksiyonlar, miras yoluyla aldığı profiliYaz() ve kendi içerisinde tanımladığı ortalamaAl()
fonksiyonlarıdır.
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
18
13.4 Miras ve Yapıcı Fonksiyonlar...
13.4 Miras ve Yapıcı Fonksiyonlar...
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
20
13.4 Miras ve Yapıcı Fonksiyonlar...
13.5 Üst Sınıf Tanımlamasında public, private ve protected Erişim EIketlerinin Kullanımı
• İki sınıf arasında miras ilişkisinin kurulması için : işareKnin hemen ardından üst sını`n adı yazılır
• Üst sını`n adı yazılırken, söz konusu sını`n hemen önüne bir erişim eKkeK konur.
– public, private veya protected
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
22
• Erişim eKketleri, alt sını`n üst sını`n üyelerine erişip erişemeyeceğini ya da nasıl erişeceğini farklı şekillerde tanımlar.
13.5 Üst Sınıf Tanımlamasında public, private
ve protected Erişim EIketlerinin Kullanımı...
• Üst sınıQaki private üyelere alt sınıQan erişilemez.
• Üst sınıQaki protected üyeleri alt sını`n private üyeleri olarak kabul edilir.
• Üst sınıQaki public üyeleri, alt sını`n private üyeleri olarak kabul edilir.
class B: private A {};
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
24
13.5 Üst Sınıf Tanımlamasında public, private
ve protected Erişim EIketlerinin Kullanımı...
• Üst sınıQaki private üyelere alt sınıQan erişilemez.
• Üst sınıQaki protected üyeleri alt sını`n protected üyeleri olarak kabul edilir.
• Üst sınıQaki public üyeleri, alt sını`n protected üyeleri olarak kabul edilir.
class B: protected A {};
13.5 Üst Sınıf Tanımlamasında public, private
ve protected Erişim EIketlerinin Kullanımı...
• Üst sınıQaki private üyelere alt sınıQan erişilemez.
• Üst sınıQaki protected üyeleri alt sını`n protected üyeleri olarak kabul edilir.
• Üst sınıQaki public üyeleri, alt sını`n public üyeleri olarak kabul edilir.
class B: public A {};
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
26
13.5 Üst Sınıf Tanımlamasında public, private
ve protected Erişim EIketlerinin Kullanımı...
13.6 Üst SınıSaki Fonksiyonların Alt Sınıflarda Tekrar Tanımlanması
• İng. Redefining
• Üst sınıQa tanımlanan fonksiyon, alt sınıQa aynı isimle yeniden tanımlanmasıdır.
• Örnek:
13.6 Üst SınıSaki Fonksiyonların Alt Sınıflarda Tekrar Tanımlanması…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
28
13.6 Üst SınıSaki Fonksiyonların Alt
Sınıflarda Tekrar Tanımlanması…
13.6 Üst SınıSaki Fonksiyonların Alt Sınıflarda Tekrar Tanımlanması…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
30
13.7 Çoklu Miras
• İng. Mul6ple Inheritance
• Bir sını`n birden fazla üst sınıfa sahip olması durumudur
• Çoklu miras ile bir sınıf, birden çok sınıfa ait özellikleri aynı anda miras olarak alabilir.
• Tekli miras kadar yaygın bir kullanımı olmasa
da birden çok sınıfla ortak özelliklerin olduğu
durumlarda tercih edilen bir yöntemdir.
13.7 Çoklu Miras…
• Örnek: Bir akademik kurumda henüz doktora öğrencisi olan ve bir yandan da öğretmenlik yapan bir asistanı ele alalım. Bu asistan doktora öğrencisi olduğu için Ogrenci’dir ve aynı zamanda
öğretmenlik yapiğı için bir Ogretmen’dir.
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
32
13.7 Çoklu Miras…
13.7 Çoklu Miras…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
34
Çözümlü Sorular…
Soru
Cevap
Çözümlü Sorular…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
36
Soru…
Çözümlü Sorular…
Soru
Çözümlü Sorular…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
38
Cevap
Çözümlü Sorular…
Soru
Çözümlü Sorular…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe
40
Cevap…
Çözümlü Sorular…
Cevap…
Çözümlü Sorular…
C++ Dersi: Nesne Tabanlı
Programlama © 2014,2012 Çiğdem Turhan
Fatma Cemile Serçe