Ne zaman operator overloading yapilir. Operator Overloading

Benzer belgeler
Inheritance. Inheritance (turetim)

C++ Class larina baslangic. C++ Versus C Object-oriented Language C++ Structure dan Object Create etmek. Structure tanimlama.

Pros and Cons of Pointers. Pointers. Avantajlar. Dezavantajlar

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

const objects & const member functions const objects ve const functions Data Member Initializer List Data Member Initializer List

En kucuk calisabilir birime satetement denir Statements semicolon (;) ile sonlanir Yalniz basina ; null statement i ifade eder

Object-Oriented Programming Lab 4. - Sıcaklık değeri, Kelvin biriminde saklansın. Varsayılan sıcaklık değeri K olsun.

Operatörlere İşlev Yükleme

OPERATÖRLER Alıştırmalar

const objects & const member functions

C++ Statements. { ve } arasında ifade edilen bir dizi statement bir compound statement (birleşik ifade) oluşturur.

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

BTEP243 Ders 3. class Yazım Kuralı:

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

C++ ile Nesneye Dayalı Programlama

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Stack Islemleri. Postfix ve Infix notasyonlari. Stack ozellikleri

Object-Oriented Oriented Design (OOD) Procedure Based Programlama. OOD Ana Ozellikleri

10/17/2007 Nesneye Yonelik Programlama 3.1

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

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++ Dersi: Nesne Tabanlı Programlama

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

NESNEYE YÖNELİK PROGRAMLAMA

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

BMH-303 Nesneye Yönelik Programlama

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

Yordamsal Tabanlı Programlama

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

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

BİLG Dr. Mustafa T. Babagil 1

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

Kurucu Fonksiyonlar (Constructors)

Mantıksal (Logic) Operatörler

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

1 PROGRAMLAMAYA GİRİŞ

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

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

#ifndef COMPLEX_H #define COMPLEX_H

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

C++ Dersi: Nesne Tabanlı Programlama

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

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

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

C ++ Ders 6. Çoklubenzesim

Lambda İfadeleri (Lambda Expressions)

11- FONKSİYONLAR (FUNCTIONS)

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

Java da İşleçler, Ders #3 (4 Kasım 2009)

Aritmetik Operatörleri Hemen her programlama dilinde olduğu gibi java dilinde de aritmetik işlemler yaparken aşağıdaki operatörleri kullanırız:

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Giri. Program yazmaya balamadan önce

KONU 7: DOSYA İŞLEME ( File Processing )

BİLG Dr. Mustafa T. Babagil 1

Nesne Yönelimli Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Object-Oriented Programming Laboratuvar 10

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

Final Sınavı Soruları Bahar 2018

C++ Dersi: Nesne Tabanlı Programlama

BMT 101 Algoritma ve Programlama I 5. Hafta. Yük. Müh. Köksal Gündoğdu 1

Bölüm 10 - Yapılar, Birlikler, Bit İşleme ve Sayma Sabitleri (Enumarations)

Standard Template Library

BM-311 Bilgisayar Mimarisi

Programlamaya Giriş Karar Yapıları, Tekrarlı İfadeler(Döngüler)

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.

BİL-142 Bilgisayar Programlama II

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

VERİ YAPILARI DERS NOTLARI BÖLÜM 4 STACK (YIĞIN, YIĞIT) Yard. Doç. Dr. Deniz KILINÇ

C++ İzmir Ekonomi Üniversitesi Bilgisayar Topluluğu

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

C PROGRAMLAMA DİLİNE GİRİŞ

Java da Program Denetimi ve Operatörler

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Programlama Dilleri 3

Veri Tanımları ve Mantıksal İşlemler

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

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

1 JAVASCRIPT NEDİR? 1

BMT 106 Algoritma ve Programlama II Bahar Dönemi

C++ Hata Düzeneği Güvenliği

C++ Dersi: Nesne Tabanlı Programlama

BİL-142 Bilgisayar Programlama II

Yazılım Kodlama ve İ simlendirme Standartları v1.0

C++ Operatörler (Operators)

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

Göstericiler (Pointers)

Veri Yapıları ve Algoritmalar dönem

The statement. const Time noon( 12, 0, 0 );

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

Nesne Yönelimli Programlamaya Giriş - 2. Cem Ahmet MERCAN 16/04/2009

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

TEMPLATES. Kalıp-Parametrik Çok Şekillilik Nedir? Fonksiyon Kalıbı Tanımlamak. Örnek

NESNEYE YÖNELİK PROGRAMLAMA

C++ Programming: Program Design Including Data Structures, Third Edition. Bölüm 3: Giriş/Çıkış

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

BİL-142 Bilgisayar Programlama II

Transkript:

Operator Overloading Operator overloading, bir operator e standard anlami haricinde yeni anlamlar vermek Overloaded operator giris olarak aldigi operand (parameter ) larin type ine gore anlam kazanir Ornek: standard matematikte, + ve integers, reals, vectors, complex numbers, matrices, vb icin tanimlanir C++ da, << operator oveload edilmistir 1. Anlam: stream insertion operator 2. anlam: Bitwise left-shift operator 12/10/2004 Nesneye Yonelik Programlama 8.1 Ne zaman operator overloading yapilir Operator overloading function call ve member function call larinin notasyonunu kolaylastirir Ornek: Color3 = mix (Color1, Color2); yerine Color3= Color1 + Color2; yazilabilir burada + color lar icin tanimlanmistir Operator overloading ayni zamanda kullanici tarafindan tanimlanmis yeni typeler le built-in type ler arasindaki analogy i pekistirmek icin kullanilirlar Ornek: << ve >> operatorleri user-defined type lar icn output input islemleri icin tanimlanabilir 12/10/2004 Nesneye Yonelik Programlama 8.2 Overload edilebilen C++ Operator leri Assignment operator ve stream operators =, <<, >> Arithmetic operators +, -, *, /, %, +=, -=, *=, /=, %= Increment and decrement operators ++, -- Logical operators!, &&,, <<, >> Bitwise logical operators ~, ^, &,, ^=, &=, = Relational and equality operators <, >, <=, >=, ==,!= Dynamicmemory allocation operators new, delete, new [ ], delete [ ] Other operators ( ), [ ], ->, the comma operator (, ) 12/10/2004 Nesneye Yonelik Programlama 8.3 Overload edilemeyen operator ler. Dot member access operator.* Dot member access using pointer :: scope resolution operator?: ternary conditional operator sizeof 12/10/2004 Nesneye Yonelik Programlama 8.4

C++ da operator ler nasil overload edilirler Syntax: <return_type> <class_name>::operator# (<parameters>) { <function body that defines operator # > Semantics: Operator # user-defined class (ismi class_name) in objectleri icin yeniden tanimlanir <parameters> tipik olarak <class_name> tipinde bir giris parameter ve <return_type> tipik olarak <class_name> tipinde geri donen degerin tipini gosterir 12/10/2004 Nesneye Yonelik Programlama 8.5 Ornek // Contents of the header file point.h class Point { public: void setpoint (int i, int j, int k); // define a default constructor Point (int i=0, int j=0, int k=0 ) { setpoint (i,j,k); Point operator+ ( Point p) ; Point operator= (Point p); void displaypoint ( Point P ) const; private: int x,y,z; // 3-D coordinates 12/10/2004 Nesneye Yonelik Programlama 8.6 // start of file point.cpp #include <iostream> #include point.h void Point::setPoint (int I, int j, int k) { x = i; y = j; z = k; void Point::displayPoint ( Point p) const { cout << ( << x <<, << y <<, << z << ) ; Point Point::operator+ (Point p) { Point result; result.x = x + p.x; result.y = y + p.y; result.z = z + p.z; return result; 12/10/2004 Nesneye Yonelik Programlama 8.7 12/10/2004 Nesneye Yonelik Programlama 8.8 Point Point::operator= (Point p) { x = p.x; y = p.y; z = p.z; return *this;

#include point.h int main ( ) { Point a (3,2,1), b(13,14,15), c; a.displaypoint ( ); b.pisplaypoint ( ); c = a + b; c.displaypoint ( ); c = a + b + c; c.displaypoint ( ); c = b = a; c.displaypoint ( ); b.displaypoint ( ); Operator Overloading de kisitlamalar Operator overloading le operator lere built-in type lerdeki davranislaridan farkli bir davranis kazandirilamaz Operator e en az bir tane user-defined type veya class i argument olarak almali Operator overloading implicitly olmaz # i overload etmek # = I de overload etmek anlamina gelmez == i overload etmek!= de overload etmek anlamina gelmez Hint: ilgili bir kac operator u overload etmek istersek, her birini ayri ayri overload etmek gerekir (explicitly) Overloading parameter sayisini degistiremez return 0; 12/10/2004 Nesneye Yonelik Programlama 8.9 12/10/2004 Nesneye Yonelik Programlama 8.10 12/10/2004 Nesneye Yonelik Programlama 8.11 12/10/2004 Nesneye Yonelik Programlama 8.12

12/10/2004 Nesneye Yonelik Programlama 8.13 12/10/2004 Nesneye Yonelik Programlama 8.14 C++ << ve >> ye nasil davranir? C++ compiler cout << phone ile karsilastiginda, bunu function cagrimi syntax ina operator<< (ostream &, const PhoneNumber &) donusturur. Sonuc sonraki output argument leri kabul eden ostream dir ( << left associative) C++ compiler cin >>phone ile karsilastiginda, bunu function cagrimi operator>>(istream &, PhoneNumber &) synax ina donusturur. Sonuc daha sonraki input argument lerini kabul eden istream dir ( >> left associative ) 12/10/2004 Nesneye Yonelik Programlama 8.15 12/10/2004 Nesneye Yonelik Programlama 8.16

Complex class i icin extraction operator (>>) unun overload oldugunu varsayalim. istream &operator>> (istream &input, Complex &cnum) { input >> cnum.real >> cnum.imag; return input; Overloaded operator su sekilde kullanilabilir Complex c_obj; cin >> c_obj; Ikinci statement cin >> c_obj; asagidaki statement a esit operator>> (cin, c_obj ); ve evaluate edildiginde ise cin >> c_obj.real >> c_obj.imag; e esittir 12/10/2004 Nesneye Yonelik Programlama 8.17 Her iki parameter da reference ile gecirilir System stream lar hakkinda bir takim bilgileri update ettiginden dolayi, stream object leri daima reference ile function a gecirilir Ikinci objec (Complex object) in data member lari update edildiginden function a reference ile gecirilir Stream reference olarak geri dondurulur. Boylece input (output) u cascade edebiliriz Complex c1_obj, c2_obj; cin >> c1_obj >> c2_obj; 12/10/2004 Nesneye Yonelik Programlama 8.18 Single call (tekli cagrim) olarak kullanildiginda: cin >> c_obj; Dondurulen deger kullanilmaz. Ikinci argument c_obj birinci argument e gore degistirilir. Cascade (chain) olarak cagrim yapildiginda: cin >> c1_obj >> c2_obj; Ikinci argument c1_obj birinci argument cin e gore degistirilir ve dondurulen deger ikinci function cagrimi icin ilk argument gorevini gorur operator >> (input, c2_obj ); Buradaki input c1_obj nin degerini iceren istream object idir 12/10/2004 Nesneye Yonelik Programlama 8.19 Unary Operator Overloading Unary operatorlerin overloading in iki yolu Argumentsiz non-static member fonksiyonu kullanarak (object argument olarak davranir) Ornek: class String { public: bool operator!() const;. ; Bir argumentli non-member function kullanarak (argument object veya object e reference olmali) Ornek: class String { friend bool operator! (const String &). 12/10/2004 ; Nesneye Yonelik Programlama 8.20

Binary Operator Overloading Binary operatorlerin overloading in iki yontemi Bir argument li non-static member function kullanarak (object ikinci argument olarak davranir) class String { public: const String &operator+= ( const String & );. ; Iki argumentli bir non-member function kullanarak (argumentlerden birtanesi object veya object e ref olmali) class String { friend const String &operator+= (String &, const String &). ; 12/10/2004 Nesneye Yonelik Programlama 8.21 Copy Constructors & Assignment Operators Default olarak, bir object assign edildiginde veya object in kopyasi gerektiginde, memberwise copy kullanilarak kopyalama islemi gerceklestirilir Eger object ler dynamic olarak allocate edilen bellek alanlarina sahipse problemlere yol acar Bir kopyayi yok etmek allocate edilen memory nin delete edilmesi anlamina gelir ve diger object tarafindan point edilen memory alaninin da yok edilmesi anlamina gelir Cozum: dynamic olarak allocate edilen object lerinin kopyasini olusturmak icin bir copy constructor ve bir overloaded assignment operator tanimla 12/10/2004 Nesneye Yonelik Programlama 8.22 12/10/2004 Nesneye Yonelik Programlama 8.23 12/10/2004 Nesneye Yonelik Programlama 8.24

Copy Constructors Class declaration da, sunu ilave et <class_name> (const <class_name> &) Yeni member fonksiyonun definitioni (1) dynamic olarak create edilen butun subobject ler icin gerekli memory allocate edilmeli (2) verilen object in sub-objectlerinin icerigi copy object e verilmeli Copy Constructor class icin copy constructor tanimlandiginda, copy constructor automatic olarak asagidaki durumlarda cagrilir Bir object fonksiyona call-by-value ile gecirildiginde Bir fonksiyondan bir object donduruldugunde Var olan bir object in kopyasi olarak yeni bir object initialize edildiginde 12/10/2004 Nesneye Yonelik Programlama 8.25 12/10/2004 Nesneye Yonelik Programlama 8.26 Assignment Operator Overloading class declaration da sunu ilave et const <class> &operator= (const <class> &); Diger binary overator lerin overloading inde oldugu gibi, compiler su kod ornegini object = object2; asagidaki function call ile yer degistirir object1.operator= (object2); Assignment operator function taniminda Self-assignment a izin verilmemeli Cascaded assignment lara izin vermek icin object e bir pointer geri dondur ( return *this) (ornek: object1 = object2 = object3; ) 12/10/2004 Nesneye Yonelik Programlama 8.27 built-in type lar arasinda donusum C++ compiler operator ler farkli type sahip argumentlere uygulandiginda guvenli type cevrimleri icin automatic olarak code yerlestirir (promotion veya implicit conversion) Ornek: int + double double sonuc uretir Bazen programci explicit (acik) type conversion a ihtiyac duyar Ornek: avg = static_cast<float>(sum) / num; Syntax: static_cast < <typename> > ( <argument>) 12/10/2004 Nesneye Yonelik Programlama 8.28

user-defined type lar arasinda donusum Cast Operator Functions Bazen user-defined type ler arasinda cevrime ihtiyac duyabiliriz. Bu is icin programci conversion function(s) lari tanimlamali Conversion constructors: Tek argument alan ve argument tipini (built-in type veya user-defined type) ini object type ine ceviren constructor Conversion ( cast ) operators: Non-static member function kullanarak bir class a ait object i Cast operator decleration syntax i: <old_class>::operator<new_class> const; Semantics: Input parameter i <old_class> type inden <new_class> in bir object ine donusturur return type gerekmez cast operator soyle cagrilir (newclass ) objectname ; baska bir class in object ine cevir 12/10/2004 buit-in type object Nesneye e cevir Yonelik Programlama 8.29 12/10/2004 Nesneye Yonelik Programlama 8.30 overloaded cast operator functions Iki veya daha fazla cast operator ler overload edilmek suretiyle class in object I iki veya daha fazla user-defined (buil-in defined) class larin object lerine donusturulur class A { public: operator int( ) const; operator double ( ) const; operator B ( ) const; private: 12/10/2004 Nesneye Yonelik Programlama 8.31 ; cast operator lerini kullanarak implicit conversions Bir dizi cast function lari tanimlandigi zaman compiler bunlari kullanarak implicit type conversion yapar Ornek: kullanici tarafindan bir cast operator u tanjimlandigini ve bunun class A nin objec lerini char * ya cevirdigini varsayalim compiler operator char * automatic olarak cagirmak suretiyle asagidaki code un dogru sonuc uretmesini saglayacak cout << objectname; // objectname class A nin object i 12/10/2004 Nesneye Yonelik Programlama 8.32

Overloading ++ and -- Prefix operators (preincrement ve predecrement) diger prefix unary operator ler gibi implement overload edilebilirler Postfix operators (postincrement ve postdecrement) operatorlere 0 degerli bir dummy input parameter verilmek suretiyle prefix versiyonlarindan ayirt edilirler 12/10/2004 Nesneye Yonelik Programlama 8.33 overloading preincrement operator Method 1: member function kullanarak s nin class A nin objetct i oldugunu varsayalim Compiler ++s yi gordugunde s.operator++( ) yi uretir Dolayisiyle class A, A &operator++( ) member function a sahip olmali Function definition A &A::operator++ ( ) Method 2: non-member friend function kullanarak friend A &operator++ (A &) // decleration A &operator++ (A &) // definition 12/10/2004 Nesneye Yonelik Programlama 8.34 overloading postincrement operator Method 1: member function kullanarak s nin class A nin objetct i oldugunu varsayalim Compiler s++ yi gordugunde s.operator++(0 ) yi uretir Dolayisiyle class A, A &operator++(int ) member function a sahip olmali Function definition A &A::operator++ (int ) Method 2: non-member friend function kullanarak friend A &operator++ (A &, int) // decleration A &operator++ (A &, int) // definition 12/10/2004 Nesneye Yonelik Programlama 8.35 #include <iostream.h> #include <stdlib.h> struct CELL{ int element; struct CELL *next; ; class List{ public: List( ); List(const List &); ~List( ); void Add_element(int); void Remove_element(int); void print( ); const List& operator=(const List &); const List& operator++(); const List operator++(int); void sort( ); private: struct CELL *list_header; struct CELL* create_element(int); struct CELL* insert_sorted_list(struct CELL*,struct CELL*); ; 12/10/2004 Nesneye Yonelik Programlama 8.36

struct CELL* List::create_element(int i) { struct CELL *ptr; ptr = (struct CELL *) malloc(sizeof(struct CELL)); ptr->element = i; return ptr; List::List( ) { cout<<"birinci List constructor cagrildi\n"; list_header = 0; List::List(const List &list) { struct CELL *temp1, *temp2; cout<<"ikinci List constructor cagrildi\n"; list_header = 0; if(list.list_header == 0) return; temp2=list.list_header; temp1 = list_header = create_element(temp2->element); temp2 = temp2->next; while(temp2) { temp1->next = create_element(temp2->element); temp2 = temp2->next; temp1 = temp1->next; temp1->next = 0; List::~List( ) { struct CELL *temp; cout << List destructor cagrildi\n"; temp= list_header; while(temp) { list_header = list_header->next; delete temp; temp=list_header; 12/10/2004 Nesneye Yonelik Programlama 8.37 12/10/2004 Nesneye Yonelik Programlama 8.38 const List& List::operator=(const List & input_list) { struct CELL *header1 = list_header; struct CELL *header2 = input_list.list_header, *temp = 0; if(header2==0) list_header = 0; while (header1 && header2) { temp = header1; header1->element = header2->element; header1 = header1->next; header2 = header2->next; // while if(header2 == 0) { if (temp) temp->next = 0; temp = header1; while (temp) { header1 = header1->next; delete temp; temp = header1; // while // if (header == 0) else { if(header2 &&!list_header) { list_header = temp = create_element(header2->element); header2=header2->next; while(header2) { temp->next = create_element(header2->element); temp = temp->next; header2 = header2->next; // while if(temp) temp->next = 0; // else return *this; 12/10/2004 Nesneye Yonelik Programlama 8.39 const List& List::operator ++() { struct CELL *temp = list_header; while(temp) { temp->element++; temp = temp->next; return *this; const List List::operator ++(int) { struct CELL *temp_header = list_header; List temp = *this; while(temp_header) { temp_header->element++; temp_header = temp_header->next; return temp; 12/10/2004 Nesneye Yonelik Programlama 8.40

void List::Add_element(int i) { struct CELL *new_element_ptr = create_element(i); new_element_ptr->next = list_header; list_header = new_element_ptr; void List::Remove_element(int i) { struct CELL *temp1,*temp2; temp1=temp2=list_header; while(temp2) { if(temp2->element == i) { if(temp1==temp2) list_header = temp2->next; else temp1->next=temp2->next; void List::print( ) { struct CELL *temp_ptr = list_header; cout<<endl; while(temp_ptr) { cout << temp_ptr->element << ; temp_ptr=temp_ptr->next; cout <<endl; free(temp2); break; temp1=temp2; temp2=temp2->next; 12/10/2004 Nesneye Yonelik Programlama 8.41 12/10/2004 Nesneye Yonelik Programlama 8.42 struct CELL* List::insert_sorted_list(struct CELL* header, struct CELL* cell) { if(!header) { cell->next = 0; return cell; else if(cell->element <= header->element) { cell->next = header; return cell; else { header->next = insert_sorted_list(header->next,cell); return header; void List::sort( ) { struct CELL *temp1,*temp2; temp1 = list_header; list_header = 0; while (temp1) { temp2=temp1->next; list_header = insert_sorted_list(list_header,temp1); temp1 = temp2; 12/10/2004 Nesneye Yonelik Programlama 8.43 class Stack{ public: Stack( ); // default constructor Stack(Stack &); // copy constructor ~Stack( ); // destructor void push(int); bool pop(int &); void print( ); operator List( ) const; // overloading cost operator operator List*( ) const; // overloading cost operator private: struct CELL *stack_ptr; ; 12/10/2004 Nesneye Yonelik Programlama 8.44

Stack::Stack( ) { cout << "birinci Stack constructor cagrildi\n"; stack_ptr = 0; Stack::Stack(Stack & stack) { CELL *temp = stack.stack_ptr; CELL *cell; cout << ikinci Stack constructor cagrildi\n"; stack_ptr = 0; if (!temp) return; stack_ptr = cell = (struct CELL *) malloc(sizeof(struct CELL)); cell->element = temp->element; temp = temp->next; while(temp) { cell->next = (struct CELL *) malloc(sizeof(struct CELL)); cell->next->element = temp->element; cell = cell->next; temp = temp->next; cell->next = 0; Stack::~Stack( ) { CELL *temp; cout <<"Stack destructor cagrildi\n"; while(stack_ptr) { temp = stack_ptr->next; free(stack_ptr); stack_ptr = temp; 12/10/2004 Nesneye Yonelik Programlama 8.45 void Stack::push(int element) { CELL *cell = (struct CELL *) malloc(sizeof(struct CELL)); cell->element = element; cell->next = stack_ptr; stack_ptr = cell; bool Stack::pop(int &element) { if(!stack_ptr) return false; else { CELL *cell = stack_ptr->next; element = stack_ptr->element; free(stack_ptr); stack_ptr = cell; return true; void Stack::print( ) { CELL *cell = stack_ptr; cout << endl; while(cell) { cout << cell->element <<" "; cell = cell->next; cout << endl; 12/10/2004 Nesneye Yonelik Programlama 8.46 Stack::operator List( ) const { List list; CELL *cell = stack_ptr; while(cell) { list.add_element(cell->element); cell = cell->next; return list; Stack::operator List*( ) const { List *list = new List; CELL *cell = stack_ptr; while(cell) { list->add_element(cell->element); cell = cell->next; return list; 12/10/2004 Nesneye Yonelik Programlama 8.47 int main( ) { class List list1; // 1 list1.add_element(10); // 2 list1.add_element(20); // 3 list1.add_element(40); list1.print(); // 4 class List list2; // 5 list2 = list1++; // 6 list1.print(); // 7 list2.print(); // 8 class Stack stack1; // 9 stack1.push(3000); stack1.push(5000); // 10 stack1.push(1000); stack1.push(4000); // 11 stack1.print( ); // 12 class Stack stack2 = stack1; // 13 int element; // 14 if (stack2.pop(element)) // 15 cout << element <<endl; // 16 stack2.print( ); // 17 list1 = (List) stack2; // 18 cout <<"------\n"; // 19 list1.print( ); // 20 class List *list_ptr; // 21 list_ptr = (List*)stack1; // 22 list_ptr->print( ); // 23 delete list_ptr; // 24 return 12/10/2004 0; Nesneye // Yonelik 25 Programlama 8.48