C++ Class larina baslangic Object oriented programming language olarak kullanildiginda, programming in temel birimi class lardir Object lerin create edilmesinde blueprint gorevi gorur Class data (object attributes) ve behavior (member functions = methods) larin nasil birbirleriyle iliskilendirildigini belirler Class lar, object lerin birbirleriyle interface ler araciligiyla nasil etkilesimde bulunabileceklerini tanimlayan information hiding mechanism alarina sahiptir Object ler dunyamizdaki fiziksel varliklari modeller 11/4/2004 Nesneye Yonelik Programlama 6.1 C Programming Langugae Programming action-oriented Programming birimi function Program tanimindaki yuklemler fuction lari tanimlamada kullanilir C++ Versus C Object-oriented Language C++ Programming object-oriented Programming birimi class Program tanimindaki isimler object leri tanimlar ve class lari belirlemede yardimci olur 11/4/2004 Nesneye Yonelik Programlama 6.2 Structure tanimlama structure User-defined data type Bir veya daha fazla member icerir class larin basitlestirilmis sekli struct Time { int hour; // 0-23 int minute; // 0-59 int second; // 0-59 ; 11/4/2004 Nesneye Yonelik Programlama 6.3 Structure dan Object Create etmek struct Time { int hour; // 0-23 int minute; // 0-59 int second; // 0-59 Time *next; // pointer to next Time object ; // ; gerekli Time timeobject1, timeobject2, timeobject3; Time *timeptr; // pointer to time object Time &timeref = timeobject1; // defines a reference (alias) to an existing object timeptr = &timeobject1; timeobject1.next = &timeobject2; timeobject2.next = &timeobject3; timeobject3.next = 0; // uninitialized ptr 11/4/2004 Nesneye Yonelik Programlama 6.4
Member Access Operators Yuksek oncelikli operatorler ( ( ) ve [ ] ile ayni oncelikli, ve & ile * dan daha oncelikli). Dot operator. struct (class) member a erisim icin kullanilir (object name veya object e reference olan isimler icin) cout << timeobject1.hour; cout << timeref.minute; Arrow operator -> struct (class) member a erisim icin kullanilir (object e point eden pointer lar icin) cout << timeptr->hour; cout << (*time).hour; // same cout << *timeptr.hour; // wrong 11/4/2004 Nesneye Yonelik Programlama 6.5 Structure Kullanimin Dezavantajlari struct kullanilarak create edilen yeni bir object icin initialization a gerek yok Object client leri, object lere istedikleri degerleri atamalarinda herhangi bir kisitlama yok (atanan yanlis degerler olsa bile) Eger struct definitioni degistirilmesi gerekirse, struct daki degisikliklere adapte olabilmek icin butun client code un degistirilmesi gerekebilir. C ve C++ struct in objectlerinin kiyaslanmalarini equality ve relational operator ler kullanilarak yapilmasina olanak tanimaz 11/4/2004 Nesneye Yonelik Programlama 6.6 C++ da class lar Class object creation icin gelistirilmis blueprint dir. Class kullanimi structure larin dezavantajlarini giderir Class tanimi, data members (object attributes) ve member functions (object operations = behaviors) lar well define edilmis ve kontrol edilebilen Data members lara deger atanmasi Class initialization code Member function calls Member function cagrimi Conventional function call baska bir object in member function undan cagri 11/4/2004 Nesneye Yonelik Programlama 6.7 ornek class Time { // a member access specifier Time( ); // a constructor function void settime (int,int,int); void printmilitary( ); void printstandard ( ); private: // a member access specifier int hour; int minute; int second; ; // end of class definition 11/4/2004 Nesneye Yonelik Programlama 6.8
Member Access Specifiers sonraki member access specifierine kadar butun data members veya member function lar butun client (user of object of the class) ler tarafindan erisilebilirler private sonraki member access specifierine kadar ki butun data member ve member function lar ancak ayni class in member function lari tarafindan erisilebilirler protected sonraki member access specifierine kadar ki butun data member ve member functionlar ayni class in member function lari ve bu class tan turetilen (inheritance) class larin member larinca erisilebilinir 11/4/2004 Nesneye Yonelik Programlama 6.9 Class Constructors Class constructor function un ismi class la aynidir ornek: Time( ) Bir object create edilirken daima ilgili constructor function cagrilir Constructor function un amaci ilgili object in data member larini initialize etmek (baslangic degerleri atamak) Default initial deger 0 dir Constructor un return type i yoktur Bir class in bir den fazla constructor u olabilir (function overloading) 11/4/2004 Nesneye Yonelik Programlama 6.10 Class Definition larinin kullanimi #include <iostream> using namespace std; Ornek Class definition yeni bir type belirler Object ler variable declaration syntax i kullanarak create edilirler Ornekler: Time sunset; // create a new Time object Time arrayoftimes[5]; // array of objects Time *ptrtotime; // pointer to Time object Time &dinnertime = sunset; // reference to an existing // Time object 11/4/2004 Nesneye Yonelik Programlama 6.11 class Time { Time( ); void settime (int, int, int); void printmilitary ( ); void printstandard ( ); private: int hour; // 0 to 23 int minute; // 0 to 59 int second; // 0 to 59 ; 11/4/2004 Nesneye Yonelik Programlama 6.12
// Time constructor initializes all data members to 0 Time::Time( ) {hour = minute = second = 0; // set a new Time value using military time void Time::setTime ( int h, int m, int s) { hour = ( h >=0 && h< 24)? h : 0; minute = (m >=0 && m<60)? m : 0; second = (s >= 0 && s < 60)? s : 0; // Print the Time in Military format void Time::printMilitary( ) { cout << ( hour < 10? 0 : ) << hour << : << (minute < 10? 0 : ) << minute; 11/4/2004 Nesneye Yonelik Programlama 6.13 // Print the Time in standard format void Time::printStandard ( ) { cout << ( (hour == 0 hour == 12)? 12 : (hour %12)) << : ; << (minute < 10? 0 : ) << minute << : ; << (second < 10? 0 : ) << second << (hour < 12? AM : PM ); 11/4/2004 Nesneye Yonelik Programlama 6.14 int main( ) { Time t; // create object t of class Time cout << The initial military time is ; t.printmilitary( ); cout << \nthe initial standard time is ; t.printstandard( ); t.settime(13, 27, 6 ); cout << \n\nmilitary time is ; t.printmilitary( ); cout << \nstandard time after settime is ; t.printstandard( ); t.settime(99,99,99 ); cout << \n\nafter attempting invalid settings: ; << \nmilitary time: ; t.printmilitary( ); cout << \nstandard time ; t.printstandard( ); cout << endl; return 0; 11/4/2004 Nesneye Yonelik Programlama 6.15 The initial military time is 00:00 The initial standard time is 12:00:00 AM Military time after settime is 13:27 Standard time after settime is 1:27:06 PM After attempting invalid settings: Military time: 00:00 Standard time: 12:00:00 AM 11/4/2004 Nesneye Yonelik Programlama 6.16
Class larda information hiding C++ class lari client lerden information hiding mechanism a sina sahip privatedata member lari client ler tarafindan direct olarak erisilemezler. Object in state i nin implement detaylari client lerden gizlenebilir Client ler ilgili object le ancak public member function lari ile etkilesir 11/4/2004 Nesneye Yonelik Programlama 6.17 Binary Scope Resolution Operator :: Member functon definitions class definition in icinde verilebilir, fakat genelde class definition in disinda vermek daha iyidir Bu is icin binary scope resolution operator (:: ) kullanilir. void Time::printMilitary( ) { cout << (hour < 10? 0 : ) << hour << : << (minute < 10? 0 : ) << minute; 11/4/2004 Nesneye Yonelik Programlama 6.18 Class Member larina erisim Class in member function (public) lari ve public data member (data member lari public olarak tanimlamak tavsiye edilmez) 3 yontemden biriyle erisilebilinir 1. Class name ve dot operator kullanilarak Ornek: t.printmilitary( ); 2. Class a pointer ve arrow operator kullanilarak Ornek: Time t, *timeptr = &t; timeptr->settime(11,50,0); (*timeptr).settime(11,50,0); 3. Class a reference ve dot operator u kullanarak Ornek: Time &timeref = t; timeref.settime(11,50,0); 11/4/2004 Nesneye Yonelik Programlama 6.19 11/4/2004 Nesneye Yonelik Programlama 6.20
Class larla Header File lerin Kullanimi Class interface ini header file e koyarak client lere sunmak ve private member lari ayri file lerde saklamak (gizlemek) yararli olabilir 11/4/2004 Nesneye Yonelik Programlama 6.21 // Header file time1.h // Need to avoid multiple includes of time1.h #ifndef TIME1_H #define TIME1_H class Time { Time( ); void settime ( int, int, int); private: int hour, minute, second; ; #endif 11/4/2004 Nesneye Yonelik Programlama 6.22 // source file time1.cpp #include <iostream> #include time1.h // Define the constructor function // Initialize the data members to safe values Time::Time( ){ hour = minute = second = 0; // Define the settime member function void Time::setTime ( int h, int m, int s) { hour = ( h>=0 && h< 24)? h:0; minute = ( m>=0 && m < 60)? m:0; second = ( s>= 0 && s < 60)? s: 0; 11/4/2004 Nesneye Yonelik Programlama 6.23 Member lara erisim kntrolu Butun data member larini private olarak tut Eger uygunsa, client lere object in internal state inin degistirilmesini saglayan set function larini sun Eger uygunsa, object in state ini temsil eden data member lari get function lari ile client lere sun Diger function lar client lere service sunarlar public member function larini class definition in basinda grupla, ve private data member lari ve function lari class definition in sonunda grupla. (Default olarak, class larin data ve function member lari private dir) 11/4/2004 Nesneye Yonelik Programlama 6.24
Access Functions && Utility Functions Access functions: client lara asagidakileri yapmaya izin veren class member fonksiyonlardir Object data yi okuma ve geri dondurm Ornek: t.gettime Data yi yazma Ornek: t.printmilitary Object in state ini test etme Ornek: t.isam, t.ispm, t.isaftercurfew 11/4/2004 Nesneye Yonelik Programlama 6.25 Utility Functions: public member function lari tarafindan cesitli gorevleri gerceklestirmek icin cagrilan private function lardir 11/4/2004 Nesneye Yonelik Programlama 6.26 Constructors Yeni bir object create edildigi zaman otomatik olarak cagrilan function lardir Class la ayni isimdedir Parametre alabilirler Geriye deger donduremezler Constructor lar data member lara initial degerleri atamak icin kullanilirlar Pointer lara genelde baslangic degeri olarak NULL atanir Constructor lar overload edilebilir. Bunun icin tek kosul bir constructor parameter tiplerinden ve parameter sayilarindan diger constructor lardan ayrit edilebilmeli 11/4/2004 Nesneye Yonelik Programlama 6.27 Overloaded Constructors class Date { int d, m, y; // private by default Date ( int, int, int ); Date (int, int); // assume month & year present Date (int); // assume only only year present Date ( ); // assume today s date Date( const char *); // date as string ; Date:: Date( int dd, int nm, int yy) { d = dd; m = mm; y = yy; // plus four more constructor definitions 11/4/2004 Nesneye Yonelik Programlama 6.28
Constructor larla default argument lerin kullanimi Eger bir constructor argument icermezse, butun default degerler guvenli degerlere set edilir. Bu tip constructor lere default constructor denir. Her bir class in sadece bir default constructor u vardir class Time { Time (int =0, int =0, int =0); void settime (int, int, int); void printmilitary( ); void printstandard ( ); private: int hour; // 0-23 int minute; // 0-59 int second; // 0-59 ; 11/4/2004 Nesneye Yonelik Programlama 6.29 11/4/2004 Nesneye Yonelik Programlama 6.30 // constructor definition. Calls settime to ensure consistency // with settime. As a rule it is best to avoid repeating similar code Time::Time(int hr, int min, int sec) { // Default values from class specification settime (hr, min, sec ); void Time::setTime(int h, int m, int s) { // illegal values ignored, and 0 used instead hour = ( h>=0 && h< 24)? h:0; minute = ( m>=0 && m < 60)? m:0; second = ( s>= 0 && s < 60)? s: 0; 11/4/2004 Nesneye Yonelik Programlama 6.31 int main( ) { Time t1, // use all default values t2(2), // minutes and secs defaulted t3(21, 34), // second defaulted t4(12,25,99), // all values set t5 (27, 74, 99); // bad values set // rest of main return 0; 11/4/2004 Nesneye Yonelik Programlama 6.32
Destructors Destructor function dynamic olarak create edilen object lerin isgal ettigi memory alanlarinin tekrar heap e geri verilmesini saglar Destructor function un ismi tilde ~ ile baslar ve class in ismi ile sonlanir. Ornek: Time class icin destructor: ~Time() Her bir class in en fazla bir destructor u olabilir. Destructor parameter almaz 11/4/2004 Nesneye Yonelik Programlama 6.33 Object Construction & Destruction Object ler scope larina girildiginde automatic olarak create edilirler. Gerekli memory alani create edilme esnasinda ayrilir ve uygun bir class constructor u cagrilir global objects: program calismaya basladiginda auto local objects: block a girildiginde static local objects: block a ilk girildiginde 11/4/2004 Nesneye Yonelik Programlama 6.34 Object Construction & Destruction Object ler scope larindan cikildiginda automatic olarak yok edilirler. Object in destructor u cagrilir ve object in isgal ettigi memory alani geri verilir global objects: program sonlandiginda auto objects: block dan cikildiginda static local objects: program sonlandiginda Assigning & Passing Objects Bir object digerine = operator u kullanilarak atanabilir. Atama islemi her bir data member icin yapilir Eger data member lar dynamic olarak allocate edilen memory isgal ediyorsa bu soruna sebep olabilir. (Sadece pointer lerin degerleri kopyalanir.) Bu problemin cozumunden daha sonra bahsedilecek 11/4/2004 Nesneye Yonelik Programlama 6.35 11/4/2004 Nesneye Yonelik Programlama 6.36
Assigning & Passing Objects Object ler function lara parameter olarak gonderilebilirler ve function lardan return value olarak geri dondurulebilirler (call-byvalue, default olarak) Call-by-value large object lerin icin inefficient Call-by-reference (ya pointer ler ya da reference lar kullanilarak gerceklenebilir). Hata ya yol acmamak icin call-by-const-reference olarak kullanilabilir Classes Summary C++ da OOP nin temel birimleri Data ve fuctionlar arasindaki bagi belirler Information hiding Object scope Object member larina erisim Class_name.member Pointer_to_class->member Class member larina erisim kontrolu Butun data member lar private get functions, set functions, service functions utility functions 11/4/2004 Nesneye Yonelik Programlama 6.37 11/4/2004 Nesneye Yonelik Programlama 6.38 Classes Summary Constructors En az bir tane: automatic olarak cagrilir Data member lara guvenli deger lerin set edilmesi Overloading, default arguments Destructors En fazla bir tane; no arguments Objec lerin kapladiklari memory alanlarinin guvenli olarak geri verilmesi Assigning objects member-wise copy Passing objects by value, by reference 11/4/2004 Nesneye Yonelik Programlama 6.39