KALITIM. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

Benzer belgeler
Sınıf Yapısı Kalıtım Çok Şekillilik

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

C++ ile Nesneye Dayalı Programlama

C++ Dersi: Nesne Tabanlı Programlama

Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Çok Şekillilik (Polymorphism)

Operatörlere İşlev Yükleme

NESNEYE YÖNELİK PROGRAMLAMA

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

C++ Dersi: Nesne Tabanlı Programlama

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

C++ ve Nesneye Dayalı Programlama

Nesne Yönelimli Programlama

Kalıtım (Inheritance)

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

BTEP243 Ders 3. class Yazım Kuralı:

Nesneye Yönelik Programlama (OOP) 7.Hafta

NESNEYE YÖNELİK PROGRAMLAMA

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

HSancak Nesne Tabanlı Programlama I Ders Notları

C++ Dersi: Nesne Tabanlı Programlama

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

C++ Dersi: Nesne Tabanlı Programlama

public static int Toplam int x, int y

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

NESNEYE YÖNELİK PROGRAMLAMA

1 PROGRAMLAMAYA GİRİŞ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Inheritance. Inheritance (turetim)

Operatörlerin Aşırı Yüklenmesi

BİL-142 Bilgisayar Programlama II

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Kurucu Fonksiyonlar (Constructors)

#ifndef COMPLEX_H #define COMPLEX_H

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

NESNE MODELLERİ : SINIFLAR

BİL-141 Bilgisayar Programlama I (Java)

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA

BİLG Dr. Mustafa T. Babagil 1

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Object-Oriented Programming Laboratuvar 11

YZM 2105 Nesneye Yönelik Programlama

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Operator Aşırı Yükleme (Operator OverLoading)

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

C++ Dersi: Nesne Tabanlı Programlama

Sunum İçeriği. Programlamaya Giriş

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

DERSİN WEB SİTESİ:

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

8. İŞARETCİLER (POINTERS)

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

BMH-303 Nesneye Yönelik Programlama

PROGRAMLAMAYA GİRİŞ DERS 2

C++ Dersi: Nesne Tabanlı Programlama

Pointer Kavramı. Veri Yapıları

Ders 8: Metotlar. barisgokce.com

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Nesneye Dayalı Programlama

Karma C/C + + Kodlama

Nesneye Dayalı Programlama

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Fonksiyonlar -Genel Test- A

BMH-303 Nesneye Yönelik Programlama

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Göstericiler (Pointers)

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Ders 8 Konu Özeti ve Problemler

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Programlama Dillerinde Kullanılan Veri Tipleri

YZM 2105 Nesneye Yönelik Programlama

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

YZM 2105 Nesneye Yönelik Programlama

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Örnek1: #include <iostream> #include <string> using namespace std;

Fonksiyonlar (Altprogram)

const objects & const member functions

NESNEYE YÖNELİK PROGRAMLAMA THIS İŞARETÇİSİ, KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR,NESNE DİZİLERİ

ALGORİTMA VE PROGRAMLAMA I

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

ALGORİTMA VE PROGRAMLAMA I

SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA NESNE YÖNELİMLİ PROGRAMLAMA

Dr. Fatih AY Tel: fatihay@fatihay.net

Erişim konusunda iki taraf vardır:

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References)

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

10/17/2007 Nesneye Yonelik Programlama 3.1

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

BİL-142 Bilgisayar Programlama II

Transkript:

Binnur Kurt kurt@ce.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi Sınıf Yapısı Kalıtım Çok Şekillilik Nesneye Dayalı Programlama 2 1

C++ ın yazılan kodun yeniden kullanılabilir olmasını sağlayan mekanizması kalıtımdır. Yeniden kullanılabilirlikten, bir sınıfın alınıp bir başka yazılım uygulamasında da kullanılabilmesini anlıyoruz. Bu özellik yazılım geliştirme çevrimini kısaltırken aynı zamanda yazılımın daha gürbüz olmasını sağlayacaktır. Tarihçe : Kopyala ve Yapıştır + Uyarla + Hata Ayıkla, Tekrar tekrar kullanılan fonksiyonlar için kütüphaneler oluştur, Yeni yazılım projesi Kütüphane Fonksiyonları (Uyarla + Hata Ayıkla) Nesneye Dayalı Programlama 3 Çözüm : Sınıf Kütüphaneleri Problemleri daha iyi modellediklerinden yeni bir proje için kullanılmak istenildiklerinde daha az değiştirilme ihtiyacı duyarlar. C++ bir sınıfın kodunu değiştirmeden eklentiler yapmamıza olanak tanır. Bu kalıtım yolu ile bir temel sınıftan yeni bir sınıf türetilmesi şeklinde olur. türetilen sınıf ile temel sınıf arasında is a şeklinde bir hiyerarşik ilişki sözkonusudur. Bir temel sınıftan türetilen sınıfı belirtmek için türetilen sınıf adından sonra : konup temel sınıf adı yazılır. Nesneye Dayalı Programlama 2

class teacher { // temel sınıf char *Name; int Age,numberOfStudents; void setname (char *newname){name=newname; class principal : public teacher { // turetilmis sinif char *schoolname; int numberofteachers; void setschool(char *name){schoolname=name; Nesneye Dayalı Programlama 5 principal is a teacher principal (türetilmiş sınıf ) teacher (temel sınıf ) Name, Age, numberofstudents setname(char *) SchoolName numberofteachers setschool(char *) temel sınıf ile türetilmiş sınıf arasında is a ilişkisi vardır void main() { teacher t1; principal p1; p1.setname(" Principal 1"); t1.setname(" Teacher 1"); p1.setschool(" Elementary School"); Nesneye Dayalı Programlama 6 3

. nokta en boy dikdörtgen.. çember elips Nesneye Dayalı Programlama 7 class point { // temel sınıf int x,y; void setpoint(int X,int Y){x=X;y=Y; class rectangle : public point { // turetilmis sinif int Width,Height ; void setsize(int w,int h){width=w;height=h; class circle : public rectangle { // turetilmis sinif void setradius(int r){width=height=r; Nesneye Dayalı Programlama 8

C++ ın yazılan kodun yeniden kullanılabilir olmasını sağlayan mekanizma kalıtımdır. Yeniden kullanılabilirlikten, bir sınıfın alınıp bir başka yazılım uygulamasında da (aynen yada değişikliklerle birlikte) kullanılabilmesini anlıyoruz. Bu özellik yazılım geliştirme sürecini kısaltırken aynı zamanda yazılımın daha gürbüz olmasını sağlayacaktır: İstemlerin Analizi Sistem Analizi Tasarım Kodlama Test Bakım Nesneye Dayalı Programlama 9 Türetilmiş Sınıfta Üyelerin Yeniden Tanımlanabilmesi Bazı durumlarda, temel sınıftaki bir fonksiyonu, türetilmiş sınıfta yeniden tanımlamak gerekebilir: class teacher{ // Base class char *Name; int Age,numberOfStudents; void setname (char *new_name){name=new_name; void print(); void teacher::print() // Print method of teacher class { cout <<"Name: "<< Name<<" Age: "<< age<< endl; cout << "Number of Students: " <<numberofstudents << endl; Nesneye Dayalı Programlama 10 5

class principal : public teacher{ // Derived class char *schoolname; int numberofteachers; void setschool(char *s_name){schoolname=s_name; void print(); // Print function of principal class example13.cpp void principal::print() // Print method of principal class { cout << Name: << Name<< Age: << Age<< endl; cout << Number of Students: <<numberofstudents << endl; cout << Name of the school: << schoolname << endl; Bu durumda principal sınıfı içinde tanımladığımız yeni print() fonksiyonu temel sınıfta tanımlı print() fonksiyonu üzerine yazacaktır. Eğer temel sınıftaki print() fonksiyonuna erişilmek istenirse :: operatörü kullanılarak teacher::print() yazılır. Nesneye Dayalı Programlama 11 Örnek class A{ int ia1,ia2; void fa1(); int fa2(int); class B: public A{ float ia1; // overrides ia1 float fa1(float); // overrides fa1 void main(){ B b; int j=b.fa2(1); b.ia1=; // B::ia1 b.ia2=3; // A::ia2 if ia2 is public in A float y=b.fa1(3.1); // B::fa1 b.fa1(); // ERROR fa1 function in B hides the function of A b.a::fa1(); // OK b.a::ia1=1; // OK Nesneye Dayalı Programlama 12 6

Erişim Denetimi Hatırlatma: Bir sınıf üyesi (sınıf içerisindeki) diğer tüm üyelere erişebilir. O sınıftan bir nesne ise sadece public ile tanımlı üyelere erişebilir. Kalıtım mekanizmasında, türetilmiş sınıf üyelerinin, temel sınıf üyelerine erişimi nasıl denetlenebilir? Kural : türetilmiş sınıf üyeleri temel sınıfın public ve protected ile tanımlanmış üyelerine erişebilir. Nesneye Dayalı Programlama 13 Erişim Sınıf İçinden Türetilmiş sınıftan Dışarıdan Erişim Erişim Erişim public evet evet evet protected evet evet hayır private evet hayır hayır Genel olarak, üyeleri private tanımlamak uygun olacaktır. Böylelikle dışarıdan bir fonksiyonun yanlışlıkla üyenin değerini değiştirmesi olasılığı ortadan kaldırılmış olur. Temel sınıf tasarlanırken olabildiğince protected kullanılmasından kaçınılmalıdır. Yeni sınıflar kalıtım yoluyla türetilerek genişletildikçe, üst sınıfların temel sınıf üyelerine erişimi (karmaşıklığı) önlenmiş olur. Böylelikle daha kararlı ve güvenilir sınıflar gerçekleştirilebilinir. Nesneye Dayalı Programlama 1 7

class teacher{ // Base class private: char *Name; protected: int Age,numberOfStudents; void setname (char *name){name=name; void print(); class principal : public teacher{ // Derived class char *schoolname; int numberofteachers; void setschool(char *name){schoolname=name; void print(); int getage(){ return Age; char* getname(){ return Name; Nesneye Dayalı Programlama 15 void main() { teacher t1; principal p1; t1.numberofstudents=100; t1.setname( Sema Catir"); p1.setschool( Halide Edip Adivar Lisesi"); Nesneye Dayalı Programlama 16 8

public Kalıtım Kalıtım ile bir sınıf türetilirken, genellikle public takısı kullanılır: class Base { class Derived : public Base { Bu şekilde türetilen bir sınıfta temel sınıfın üyelik tanımlamaları değişmez. Örneğin temel sınıfın public üyeleri aynı zamanda türetilen sınıfın da public üyeleri olacaktır. Nesneye Dayalı Programlama 17 class Base { class Derived : private Base { private Kalıtım Buna private kalıtım denir. Temel sınıfın public üyeleri türetilen sınıfın private üyeleri olur. Bunun sonucu olarak türetilmiş sınıfa ait nesneler temel sınıfın hiçbir elemanına erişemezler. Türetilen sınıfın üyeleri temel sınıfın public and protected tanımlı üyelerine erişebilir. Nesneye Dayalı Programlama 18 9

Türetilmiş Sınıfta Erişimin Yeniden Tanımlanması Temel sınıfın public tanımlı üyelerine erişim türetilmiş sınıfta yeniden tanımlanabilir. Class Base{ void f(); class Derived : private Base{ // All members of Base are private now int i; Base::f(); // f() is public again void fb1(); Nesneye Dayalı Programlama 19 Class A private protected public Class B: public A private protected ObjA Class C: private A private protected public yasak public ObjB ObjC Nesneye Dayalı Programlama 20 10

Kalıtım ile Aktarılamayan Metodlar Temel sınıfta tanımlı bir metod, eğer işlev yükleme yapılmamış ise, otomatik olarak türetilen sınıf üyelerinin kullanımına aktarılır. Ancak bazı özel fonksiyonlar, kalıtım ile türetilmiş sınıfa aktarılmazlar: İşlev yüklenmiş = operatörü İşlev yüklenmiş atama operatörünün amacını hatırlayınız! Kurucu Fonksiyonlar Temel sınıfın kurucu fonksiyonu türetilmiş sınıfın kurucu fonksiyonu değildir. Yokedici Fonksiyonlar Temel sınıfın yokedici fonksiyonu türetilmiş sınıfın yokedici fonksiyonu değildir. Nesneye Dayalı Programlama 21 Kurucu Fonksiyonlar ve Kalıtım Türetilmiş sınıftan bir nesne yaratıldığında, temel sınıfa ait kurucu fonksiyon türetilmiş sınıfa ait kurucu fonksiyondan önce çağrılır. Temel sınıf üyeleri türetilmiş sınıfın bir alt parçası olduğundan üst parça oluşturulmadan önce alt parçalara ait üyelerin yapılandırılması zorunluluğu vardır. example15.cpp class teacher{ // turetilmis sinif char *Name; int Age,numberOfStudents; teacher(char *newname){name=newname; // temel sinif kurucusu class principal : public teacher{ // turetilmis sinif int numberofteachers; principal(char *, int ); // // turetilmis sinif kurucusu Nesneye Dayalı Programlama 22 11

principal::principal(char *newname,int numot):teacher(newname) { numofteachers=numot; void main() { principal p1( Sema Catir",20); Eğer temel sınıf, parametre alan bir kurucu fonksiyona sahip ise türetilmiş sınıfa ait kurucu fonksiyon, temel sınıf kurucu fonksiyonunu, uygun parametreler ile çağıracak bir kurucuya sahip olmalıdır. example16.cpp Nesneye Dayalı Programlama 23 Yokedici Fonksiyonlar ve Kalıtım Yokedici fonksiyonlar nesnenin erimi dışına çıkıldığında otomatik olarak çağırılırlar. Kalıtım ile türetilmiş sınıflarda yokedici fonksiyonların çağırılış sırası kurucu fonksiyonların çağırılış sırasının tersi şeklindedir. Bu durumda ilk olarak türetilmiş sınıfın yokedici fonksiyonu çağırılacaktır. example17.cpp Nesneye Dayalı Programlama 2 12

#include <iostream.h> class B { B() { cout << "B constructor" << endl; ~B() { cout << "B destructor" << endl; class C : public B { C() { cout << "C constructor" << endl; ~C() { cout << "C destructor" << endl; void main(){ cout << "Start" << endl; C ch; // create a C object cout << "End" << endl; Nesneye Dayalı Programlama 25 Atama İşlevi ve Kalıtım Temel sınıfın atama işlevi türetilen sınıfın atama işlevi olamaz. class IntegerArray { protected: int size; int *contents; IntegerArray & operator=(const IntegerArray &); // atama islevi : // diger metodlar IntegerArray & IntegerArray::operator=(const IntegerArray &s){ size = s.size; contents = new int[size]; delete[] contents ; memcpy(contents,s.contents.contents,size*sizeof(int)); return *this; Nesneye Dayalı Programlama 26 13

class ExtArray : public IntegerArray { int size; int *dim2; ExtArray & operator=(const ExtArray &); : // DigerMetodlar ExtArray & ExtArray::operator=(const ExtArray &s) { size = s.size; delete[] dim2 ; dim2 = new int[size]; memcpy(dim2,s.dim2,size*sizeof(int)); IntegerArray::size = s.integerarray::size; delete[] contents ; contents = new int[integerarray::size]; memcpy(contents,s.contents,integerarray::size*sizeof(int)); return *this; Nesneye Dayalı Programlama 27 class A { private: int x; float y; A(int i, float f) : x(i), y(f) // initialize A { cout << "Constructor A" << endl; void display() { cout << x << ", " << y << "; "; class B : public A { private: int v; float w; B(int x, float y, int i2, float f2) : A(x, y), // initialize A v(i2), w(f2) // initialize B { cout << "Constructor B" << endl; void display(){ A::display(); cout << v << ", " << w << "; "; class C : public B { private: int z; float t; C(int x,float y, int v,float w,int i3,float f3) : Örnek: Kurucu Zinciri B(i1, f1, i2, f2), // initialize B z(i3), t(f3) // initialize C { cout << "Constructor C" << endl; void display() { B::display(); cout << z << ", " << t; void main() { C c(1, 1.1, 2, 2.2, 3, 3.3); cout << "\ndata in c = "; c.display(); 1

Örnek: Sınıf ve Kurucu Zinciri Açıklama C sınıfı B sınıfından ve B sınıfı da A sınıfından türetilmiştir. Her sınıf kendi ve alt sınıflardaki kurucu fonksiyonlarına uygun sayıda parametre almakta ve aktarmaktadır: A sınıfı kurucu fonksiyonu iki, B sınıfı kurucu fonksiyonu dört (ikisi A sınıfı için) ve C sınıfı kurucu fonksiyonu (A ve B sınıfları kurucuları için ikişer parametre) altı parametre almaktadır. main() fonksiyonunda C sınıfından c adında bir nesne tanımlayıp 6 adet başlangıç değeri verdik. Böylelikle tüm alt sınıflara uygun başlangıç değeri verildi. C(int x, float y,int v, float w, int i3, float f3) : A(x, y), // error: can't initialize A y(i3), z(f3) // initialize C { Nesneye Dayalı Programlama 29 int ve float gibi basit veri tipine sahip sınıf üyelerine aşağıdaki gibi başlangıç değeri verilebilir : class A { int i1,i2; A(int new1, int new2): i1(new1),i2(new2) { Ancak bu bir kalıtım uygulaması değildir. Nesneye Dayalı Programlama 30 15

class Base1{ // Base 1 int a; void fa1(); char *fa2(int); class Base2{ // Base 2 int a; char *fa2(int, char); int fc(); Base1 Deriv class Deriv : public Base1, public Base2{ int a; float fa1(float); int fb1(int); Çoklu Kalıtım bir sınıfın birden fazla temel sınıftan türetilmesi Base2 + + void main() { Deriv d; d.a=; //Deriv::a float y=d.fa1(3.1); //Deriv::fa1 int i=d.fc(); // Base2::fc char * c=d.fa2(1); Ataması geçerli değildir. Kalıtım ile yeniden tanımlanan fonksiyonlara işlev yüklenemez. Geçerli kullanım : char * c=d.base1::fa2(1); yada char * c=d.base2::fa2(1,"hello"); Tekrarlı Kalıtım class A { class X : public A { class Y : public A { class B : public X, public Y { Hem X hem de Y sınıflarının A sınıfından türetildiğine dikkat ediniz. B sınıfı ise çoklu kalıtım ile X ve Y sınıflarından türetilmiştir. X A B Y Bu durumda A sınıfı hem X ve hem de Y sınıflarında ortak olduğundan B sınıfı iki adet A alt sınıfına sahiptir biri X diğeri Y sınıflarından. Nesneye Dayalı Programlama 32 16

Ayrıca A sınıfında aşağıda verildiği gibi bir int tipinde üyeye sahip olsun. class A { protected: int data; class B : public X, public Y { void Cfunc() { int temp = data; // error: ambiguous Derleyici, X sınıfından gelen data yı mı? yoksa Y sınıfından gelen data yı kullanmalı? belirsizliği nedeni ile hata verecektir. Nesneye Dayalı Programlama 33 Çözüm : Sanal Sınıflar Bu problem virtual anahtar sözcüğü kullanılarak çözülebilir. class A { class X : virtual public A { class Y : virtual public A { class B : public X, public Y { virtual anahtar sözcüğü derleyiciye kalıtım ile alt sınıflardan türetilen alt nesnelerden sadece birinin kullanmasını söyler. Ancak bu çözümde burada detaylı olarak duramayacağımız bazı karmaşık durumlarda yeni belirsizlikler getirebilmektedir. Genel olarak çoklu kalıtımdan kaçınmalısınız. Ancak C++ da deneyimli iseniz, çoklu kalıtımın gerekli olduğu durumlarda kullanmanız çözümü kolaylaştıracaktır. Nesneye Dayalı Programlama 3 17

class Base { int a,b,c; class Derived : public Base { int b; class Derived2 : public Derived { int c; Base Drived Derived2 Nesneye Dayalı Programlama 35 class A { class B { class C { class D : public A, public B, private C { A B D C Nesneye Dayalı Programlama 36 18

class L { int next; class A : public L { L L class B : public L { A B class C : public A, public B { void f() ; C Nesneye Dayalı Programlama 37 class L { int next; class A : virtual public L { class B : virtual public L { A L C B class C : public A, public B { Nesneye Dayalı Programlama 38 19

class B { class X : virtual public B { B B class Y : virtual public B { class Z : public B { X AA Y Z class AA : public X, public Y, public Z { Nesneye Dayalı Programlama 39 20