Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz Algoritmalar ve Programlama II Ders 7: C++ programlama dilinde Nesne ve sınıf SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
2
#include <iostream>
using namespace std; Class basitnesne //sınıf tanımla { private: int veri; //sınıf verisi public: void degerata(int d) //değer atamak için üye fonksiyon { veri = d; } void goster() //veriyi görüntüleyen üye fonksiyon { cout << “değer = ” << veri << endl; } }; int main() basitnesne b1, b2; //basitnesne sınıfından iki obje tanımla b1.degerata(1066); //değer atamak için üye fonksiyon çağırma b2.degerata(1776); b1.goster(); //veriyi göstermek için üye fonksiyon çağır b2.goster(); return 0; }
3
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Örnekte, basitnesne sınıfında bir veri öğesi, ikide üye fonksiyon vardır.Üye fonksiyonlar sınıfın dışından veri öğelerine ulaşmanın tek yolunu oluştururlar. İlk üye fonksiyon, veri öğesine bir değer atar. İkinci üye fonksiyonda bu değeri göstermeye yarar. Veri ve fonksiyonları tek bir bütün haline getirmek nesne yönelimli programlamanın temel yaklaşımıdır. sınıf veriler data1 data2 data3 fonksiyonlar fonk1() fonk2() fonk3() SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
4
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Sınıf ve nesneler Bir nesne ile sınıf arasındaki ilişki tıpkı bir değişken ile veri tipi arasındaki ilişki gibidir. Bir nesne kendi sınıfının bir örneğidir. Örnek programda sınıf (basitnesne)önce tanımlanmış, main() fonksiyonu içerisinde sınıfa ait iki nesne(b1,b2) üretilmiştir. Sınıf oluşturma class anahtar kelimesi ile başlar, ardından sınıfın adı gelir. Yapı tanımlamasında olduğu gibi sınıfın gövdesi küme parantezleri ile ayrılır ve sonuna (;) konur. Private(özel): private olarak tanımlanan veri ve fonksiyonlara sadece, tanımlı oldukları sınıf içerisinden erişilebilir. Public(genel): public olan veri ve fonksiyonlara tanımlı oldukları sınıfların dışındanda erişmek mümkündür. Genellikle bir sınıfdaki fonksiyonlar public, veriler private tır. Veriler üzerlerinde kazara oynanmasın diye private olarak tanımlanırlar. Üzerinde işlem yapılan fonksiyonlar ise sınıfın dışından erişilebilsin diye public olarak tanımlanırlar. Bu bir kural değildir. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
5
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Anahtar kelime Sınıfın adı class basitnesne { private: int veri; public: void degerata(int d) { veri = d; } void goster() { cout << “değer = ” << veri << endl; } } ; Private anahtar kelimesi ve iki nokta Private fonksiyonlar ve veriler Public anahtar kelimesi ve iki nokta Küme parantezleri Public fonksiyonlar ve veri Noktalı virgül SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
6
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Sınıfın kullanımı Sınıf tanımlandıktan sonra, main() fonksiyonu içerisinde nesneler nasıl tanımlanmakta ve nesne üye fonksiyonlarına nasıl erişilmektedir. basitnesne b1, b2; //basitnesne sınıfından iki obje tanımla Basit nesne sınıfından b1 ve b2 isimli iki adet nesne tanımlanır. Nesneler tanımlandığında hafızada yer kaplarlar. Yani nesne tanımlamak her hangi bir veri tipinde değişken tanımlamaya benzer. Üye fonksiyonları çağırmak için ise nesne ismi (.) fonksiyon ismi şeklinde ifade yazılır. b1.degerata(1066); //değer atamak için üye fonksiyon çağırma b2.degerata(1776); Görüldüğü gibi normal fonksiyon çağırmaya benzememektedir. Yani Degerata(1066) ; // yazmak anlamsızdır. Çünkü bir üye fonksiyon her zaman belli bir nesnenin üzerinden işlem yapmak için çağrılır. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
7
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Yeni örneğimiz biraz daha karmaşık olsun #include <iostream> using namespace std; class part //sınıfı tanımla { private: int modelnumber; //model numarası int partnumber; //parca numarası float cost; //parcanın fiyatı public: void setpart(int mn, int pn, float c) //deger atama fonsiyonu modelnumber = mn; partnumber = pn; cost = c; } void showpart() //veriyi görüntüleyen fonksiyon cout << “Model ” << modelnumber; cout << “, part ” << partnumber; cout << “, costs $” << cost << endl; }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
8
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
int main() { part part1; //part sınıfına ait nesneyi tanımla part1.setpart(6244, 373, F); //üye foksiyonu çağır part1.showpart(); //üye foksiyonu çağır return 0; } Part sınıfında üç tane veri parçası vardır ; modelnumber, partnumber ve cost. Aetpart üye fonksiyonu üç veri parçasına veri ataması sağlar. Showpart üye fonsiyonu ise objenin verilerini ekrana yazdırır. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
9
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
#include <iostream> using namespace std; class mesafe //sınıf tanımla { private: int metre; float cm; public: void degerata(int met, float sant) {metre=met; cm=sant; } void degeral () {cout <<“\n metre gir “;cin>>metre; cout<<“ cm gir “;cin>>cm; } void goster() {cout<< metre << “ metre ” << cm << “ cm dir”;} }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
10
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
int main() { mesafe m1,m2; //iki obje tanımla m1.degerata(5, 20); // m1 objesine değer ata m2.degeral(); // m2 objesine değeral cout<<“\n m1 değeri “; m1.goster(); // m1 objesinin değerlerini göster cout<<“\n m2 değeri “; m2.goster(); // m2 objesinin değerlerini göster return 0; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
11
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Kurucu fonksiyonlar C++’ da nesnenin otomatik olarak ilk kullanıma hazırlama işlemi kurucu(constructor) fonksiyon olarak adlandırılır. Ne zaman bir nesne oluşturulursa kurucu fonksiyon otomatik olarak çalıştırılır. Program içerisinde kullanılmak üzere bir sayac sınıfı oluşturalım. Sayacların ilk oluşturulduklarında sıfır değerini almasını isteriz. Bunu sağlamak için sayaca ilk değeri atayan bir üye fonksiyon yazabiliriz ve sayac nesnesi tanımlandığında bu üye fonksiyonu çağırarak sıfır değeri atayabiliriz. Ancak her nesne oluşturulduğunda bu üye fonksiyon çalıştırılmalıdır. Sayac s1; S1.degerata(0) ; veya s1.sifirla_sayac(); Görüldüğü üzere bu hataya açık bir durumdur. Her nesne oluşturulduğunda, kendisini ilk kullanıma hazırlaması daha uygun ve güvenilirdir. sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
12
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Kurucu fonksiyonlar üyesi olduğu sınıfın ismi ile aynı isme sahiptir. Böylece derleyici bu fonksiyonun kurucu bir fonksiyon olduğunu anlar. Kurucu fonksiyon için dönüş tipi kullanılmaz. Çünkü sistem tarafından otomatik olarak çağrıldıklarından , bir değer döndürmeleri gereken bir program yoktur. Bu da derleyiciye bu fonksiyonların bir kurucu fonksiyon olduğunu tanıtır. Kurucu fonksiyonun en genel görevi ilk değerleri atamaktır. Sayac() {sayici=0;} Şeklinde kullanımı akla gele bilir ama tercih edilen sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} İlk değer atama işlemi üye fonksiyonun beyan edilmesinden hemen sonra, fakat fonksiyon gövdesinden önce yer alır. Atanacak değerden önce (:) gelir. Eğer birden fazla üyeye değer atanacaksa, bu değerler virgül ile ayrılır. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
13
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Kurucu fonksiyonlar Örnek #include <iostream> using namespace std; class sayac //yapı tanımla { private: unsigned int sayici; public: sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} void artir_sayici() // sayacı bir artır {sayici++;} void al_sayici() //sayac değerini göster {return sayici;} }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
14
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
int main() { sayac s1,s2; //iki obje tanımla cout<<“\n s1 değeri “<< s1.al_sayici(); // s1 objesine değerini göster cout<<“\n s2 değeri “<<s2.al_sayici(); // s2 objesine değerini göster s1.artir_sayici(); s2.artir_sayici(); cout<<endl; return 0; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
15
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Programda kurucu fonksiyonu aşağıdaki şekilde değiştirip çalıştırınız Çıktı ne şekilde değişecektir. sayac():sayici(0) // kurucu fonsiyon { cout<< “kurucu fonksiyon çalıştı\n”;} SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
16
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Yok edici fonksiyonlar Bir nesne oluşturulduğunda, ilk değer atamak üzere bir kurucu fonksiyon çalıştırılmakta idi. Benzer şekilde nesne ortadan kaldırıldığındada yok edici(destructor) fonksiyonu çalıştırılır. Bu fonksiyon kurucu fonksiyonla aynı isme sahip ancak önünde (~) işareti yer almaktadır. sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} ~sayac() // yok edici fonsiyon SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
17
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Fonksiyon argümanı olarak nesneler #include <cstdlib> #include <iostream> using namespace std; class mesafe //yapı tanımla { private: int metre; float cm; public: mesafe():metre(0),cm(0.0) { } mesafe(int met, float sant): metre(met), cm(sant) void degeral () cout <<"\n metre gir ";cin>>metre; cout<<" cm gir ";cin>>cm; } void goster() {cout<< metre << " metre " << cm << " cm dir";} void toplauzun(mesafe,mesafe); //deklerasyon }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
18
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
void mesafe::toplauzun(mesafe m2,mesafe m3) { cm=m2.cm +m3.cm; metre=0 ; if(cm>=100.0) cm-=100.0; metre++; } metre+=m2.metre+m3.metre; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
19
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
int main(int argc, char *argv[]) { mesafe mesafe1,mesafe3; mesafe mesafe2(5,4.3); mesafe1.degeral(); mesafe3.toplauzun(mesafe1,mesafe2); cout<<" \n mesafe1= ";mesafe1.goster(); cout<< "\n mesafe2= "; mesafe2.goster(); cout<< "\n mesafe3= "; mesafe3.goster(); cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
20
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Program mesafe1,mesafe2 ve mesafe3 nesnelerini oluşturmakta, mesafe1 nesnesi degeral() üye fonksiyonunu çağırarak değer atamakta, mesafe2 ise kurucu fonksiyon ile ilk değer atanmakta. Mesafe üç ise toplauzun() üye fonksiyonu ile yapılan işlem sonucunda değer almaktadır. mesafe() fonksiyonu aşırı yüklenmiş bir fonksiyondur. mesafe():metre(0),cm(0.0) { } mesafe(int met, float sant): metre(met), cm(sant) SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
21
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
…. mesafe mesafe1,mesafe3; mesafe mesafe2(5,4.3); mesafe1.degeral(); cout<< "\n mesafe3= "; mesafe3.goster(); mesafe3.toplauzun(mesafe1,mesafe2); cout<<" \n mesafe1= ";mesafe1.goster(); cout<< "\n mesafe2= "; mesafe2.goster(); cout<<endl; cout<< "\n mesafe3= "; mesafe3.goster(); Fonksiyonunu görüldüğü şekilde eklediğimizde kurucu fonksiyonunun çalıştırılıp değişken değerlerini sıfırladığı görülecektir SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
22
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Sınıfın dışında üye tanımlama Sınıfın dışındada üye fonksiyon tanımlana bilir. Örnekteki toplauzun() sınıfın dışında tanımlanmış üye fonksiyondur. void mesafe::toplauzun(mesafe m2,mesafe m3) { cm=m2.cm +m3.cm; metre=0 ; if(cm>=100.0) cm-=100.0; metre++; } metre+=m2.metre+m3.metre; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
23
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
void mesafe::toplauzun(mesafe m2,mesafe m3) Fonksiyon argümanları Fonksiyon adı Kapsam çözünürlük operatörü Fonksiyonun üyesi olduğu sınıf Dönüş tipi SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.