14
NESNELER ve SINIFLAR

Nesneler Ve Siniflar

Embed Size (px)

DESCRIPTION

nesne oluşturma

Citation preview

Page 1: Nesneler Ve Siniflar

NESNELER ve SINIFLAR

Page 2: Nesneler Ve Siniflar

NESNELER ve SINIFLARBu güne kadar öğrendiklerimiz ;

1. Veri unsurlarını gruplamaya yarayan yapıları ,

2. Programların içindeki işlemleri kendi isimleriyle çağırabilen parçalara bölmemizi sağlayan fonksiyonları öğrendik.

Bu bölümde öğreneceklerimiz;

Bu bölümde bütün bu kavramlar kullanarak sınıflar tanımlanacaktır.

Önce, basitten başlayarak çeşitli sınıflar tanımlanacak, daha sonra, daha karmaşık sınıflar ele alınacaktır. Sınıf ve nesnelerin ayrıntıları gözden geçirilecek ve bölümün sonunda da nesne yönelimli programlama yaklaşımının programlamaya getirdiği yeni yaklaşımlar ele alınacaktır.

Page 3: Nesneler Ve Siniflar

NESNELER ve SINIFLAR• Basit Bir Sınıf• Fiziksel Nesneler Olarak C++ Nesneleri• Veri Tipi Olarak C++ Nesneleri• Kurucu Fonksiyonlar• Fonksiyon Argümanları Olarak Nesneler• Varsayılan Kopyalama Kurucu Fonksiyonu• Fonksiyonlardan Nesneler Döndürmek• Yapılar ve Sınıflar• Sınıflar, Nesneler ve Bellek• Statik Sınıf Verisi• Const ve Sınıflar

Page 4: Nesneler Ve Siniflar

BASİT BİR SINIF#include <iostream>using namespace std;class ogrenci{ private: int vize; int final; int ortalama; public: void atama(int v,int f,int o) { vize=v; final=f; ortalama=o; } void goster() { cout<<"vize : "<<vize<<endl; cout<<"finl : "<<final<<endl; cout<<"ort :"<<ortalama<<endl; } };

int main(){ ogrenci ogr1,ogr2; ogr1.atama(40,60,50); ogr2.atama(60,80,70); cout<<"1.ogrenci :"<<endl<<endl; ogr1.goster(); cout<<endl<<"2.ogrenci :"<<endl<<endl; ogr2.goster(); system("PAUSE"); return EXIT_SUCCESS;}

1_sinif.cpp

Page 5: Nesneler Ve Siniflar

SINIFLAR VE NESNELER

Bir nesne ile sınıf arasındaki ilişki bir değişken ile veri tipi arasındaki ilişkiye benzer.

Bir nesne kendi sınıfının bir örneğidir (instance-kopya) .

1_sinıf örneğinde (önceki slayttaki örnek)önce adi ogrenci olan sınıf tanımlanmış ve daha sonra programın ana kısmında, yani main()’de bu sınıftan (ogr1,ogr2) iki örnek tanımlanmıştır.

Bu nesnelerin her birine veri atanmış (ogr1.atama(40,60,50);ogr2.atama(60,80,70);) ve bu veriler daha sonra bu nesnelerin değerleri gösterilmiştir. (ogr1.goster(); ogr2.goster();)

Page 6: Nesneler Ve Siniflar

SINIFI TANIMLAMAK#include <iostream>using namespace std;class ogrenci{ private: int vize; int final; int ortalama; public: void atama(int v,int f,int o) { vize=v; final=f; ortalama=o; } void goster() { cout<<"vize : "<<vize<<endl; cout<<"finl : "<<final<<endl; cout<<"ort :"<<ortalama<<endl; } };

Tanım, class anahtar kelimesi ile başlar, daha sonra sınıfa bir isim verilir. Bu örnekte sınıf ismi ogrenci’dir.

Sınıfın gövdesi küme parantezleri ile ayrılır. Kapanan küme parantezinden sonra noktalı virgül konulmalıdır.

(Yapılar ve sınıf gibi veri yapılarının noktalı virgül ile bittiğini; fonksiyon ve döngü gibi kontrol yapılarının sonunda ise noktalı virgül kullanılmadığını unutmayınız)

Page 7: Nesneler Ve Siniflar

private ve publicNesne yönelimli programlamanın en önemli özelliklerinden biri veri saklamadır.(Data Hiding). Burada kastedilen nokta, veriye kendi sınıfının dışında başka fonksiyonlar tarafından erişilmesinin kastedilmesidir.

Veriyi saklamanın yöntemi , veriyi bir sınıfın içine koyup sonra da verileri private(özel) olarak tanımlamaktır. private olan veri ve fonksiyonlara sadece kendi sınıfları içerisinden erişilebilir.

public (genel) olan veri yada fonksiyonlara ise kendi sınıfları dışından da erişilebilir.

Bir sınıf içindeki veri öğelerine veri üyeleri ya da üye veriler denir.

Bu örnekteki veri üyelerine sadece kendi sınıfı içinden erişilebilir.

Veri kimden saklanıyor ?

SINIF

Page 8: Nesneler Ve Siniflar

Üye Fonksiyonlar (method)Üye Fonksiyonlar bir sınıfın içinde yer alan fonksiyonlardır. 1_sinif örneğinde iki üye fonksiyon vardır. Bu örnekteki üye fonksiyonlar atama ve goster fonksiyonlarıdır.

Atama ve goster fonksiyonlarından önce public anahtar kelimesi yer aldığı için bu fonksiyonlara sınıf dışından da erişilebilir.

Sınıf tanımının söz dizimi yanda gösterilmiştir.

FONKSİYONLAR

PULIC

VERİLER

PRIVATE

Page 9: Nesneler Ve Siniflar

Sınıfın Kullanımı(Nesnelerin Tanımlanması)

Main() ‘deki ilk ifade aşağıdaki gibidir:

ogrenci ogr1,ogr2;

Yukarıda ogrenci sınıfından ogr1 ve ogr2 adlı iki nesne tanımlanmıştır.

Nesne tanımlamak, herhangi bir veri tipinden değişken tanımlamaya benzer: Bellekte bunun için yer ayrılır.

Nesnelerin tanımlanması nesnelerin oluşturulmasını sağlar. Bu işleme örnek oluşturmak(instantiating) da denir. Çünkü, bu şekilde sınıfın bir örneği(instance) oluşturulur.

Nesnelere bazen örnek değişkenler(instance variables) adı verilir.

Page 10: Nesneler Ve Siniflar

Sınıfın Kullanımı(Üye Fonksiyonların Çağırılması)

1_sinif.cpp örneğinde:

ogr1.atama(40,60,50);ogr2.atama(60,80,70);

Yukarıdaki fonksiyon çağrıları normal fonksiyon çağrılarından farklıdır. Burada ogr1, ogr2 gibi nesne isimleri, fonksiyon isimlerine nokta ile birleştiriliyor.

Bu yaklaşım belli bir nene ile ilişkili olan bir üye fonksiyonu çağırmak için kullanılır.

atama ve goster sınıfın bir üye fonksiyonu olduğu için her zaman bu sınıfın bir nesnesi ile bağlantılı olarak çağırılmalıdır.

Bir üye fonksiyon belli bir nesnenin üzerinde işlem yapmak için çağırılır.

Bir sınıfın üye fonksiyonuna sadece o sınıfın nesnesi tarafından erişilebilir.

Bir üye fonksiyonu kullanmak için, nokta operatörü, nesne ismi ile üye fonksiyonu birbiriyle ilişkilendirir.

Nokta operatörüne sınıf üyesi erişim operatörü ‘de denir.

ogr1.atama(40,60,50); çalıştığındaOgr1 nesnesinin atama fonksiyonu çalışır.

Ogr1 nesnesindeki vize, final, ortalama değişkenlerinin değerleri sırasıyla 40,60,50 ye eşit olur.

İkinci çağrı yapıldığında;ogr2.atama(60,80,70);Bu değerler sırasıyla 60,80,70 olur.

Page 11: Nesneler Ve Siniflar

Sınıfın Kullanımı(Ogrenci Sınıfından İki Nesne)

Page 12: Nesneler Ve Siniflar

NESNE OLARAK ARABA PARÇALARI#include <iostream>using namespace std;class parca{ private: int modelNo; int parcaNo; float ucret; public: void fiyat(int mN,int pN,float u) { modelNo=mN; parcaNo=pN; ucret=u; } void goster() { cout<<modelNo<<" "<<parcaNo <<" "<<ucret<<endl; } };

int main(){ parca p1; int mNo,pNo; float uc; cout<<"Model No Gir :"; cin>>mNo; cout<<"Parca No Gir :"; cin>>pNo; cout<<"Parca Ucreti :"; cin>>uc; cout<<endl<<endl; p1.fiyat(mNo,pNo,uc); p1.goster(); system("PAUSE"); return EXIT_SUCCESS;}

Page 13: Nesneler Ve Siniflar

VERİ TİPİ OLARAK C++ NESNELERİ#include <iostream> using namespace std; class mesafe //yapi tanimla

{ private: int metre; float cm; public:void degerata(int met, float sant) {

metre=met; cm=sant; }

void degeral (){

cout<<"metre gir : ";cin>>metre; cout<<"cm gir :

";cin>>cm; }

void goster(){

cout<< metre << " metre " << cm << " cm dir"; }

};

int main(){

//iki obje tanımlamesafe m1,m2;

// m1 objesine değer atam1.degerata(5, 20);

// m2 objesine değer alm2.degeral();

// m1 objesinin değerlerini göstercout<<"\n m1 degeri "; m1.goster(); // m2 objesinin degerlerini göstercout<<"\n m2 değeri "; m2.goster();cout<<endl;

system("pause");return 0;}

Page 14: Nesneler Ve Siniflar

KURUCU FONKSİYONLAR#include <iostream> using namespace std; class sayac

{ private:

unsigned int sayici;

public:

sayac():sayici(0){ /* bos gövde */}

void artir_sayici(){sayici++;}

int al_sayici(){return sayici;}

};

int main(){

sayac s1,s2;cout<<"\n s1 değeri "<< s1.al_sayici(); cout<<"\n s2 değeri "<<s2.al_sayici();

s1.artir_sayici();s2.artir_sayici();s2.artir_sayici();

cout<<"\n s1 degeri "<< s1.al_sayici(); cout<<"\n s2 degeri "<< s2.al_sayici(); cout<<endl;return 0;

}