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

Benzer belgeler
BTEP243 Ders 3. class Yazım Kuralı:

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

NESNEYE YÖNELİK PROGRAMLAMA

Göstericiler (Pointers)

C++ Dersi: Nesne Tabanlı Programlama

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

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA

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

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

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

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

NESNE MODELLERİ : SINIFLAR

BİLG Dr. Mustafa T. Babagil 1

C++ Dersi: Nesne Tabanlı Programlama

Sunum İçeriği. Programlamaya Giriş

Pointer Kavramı. Veri Yapıları

Programlama Dilleri 3

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

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

public static int Toplam int x, int y

C++ Dersi: Nesne Tabanlı Programlama

11- FONKSİYONLAR (FUNCTIONS)

YZM 2105 Nesneye Yönelik Programlama

NESNEYE YÖNELİK PROGRAMLAMA

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

BİL-142 Bilgisayar Programlama II

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Pointers (İşaretçiler)

1 PROGRAMLAMAYA GİRİŞ

BİL-141 Bilgisayar Programlama I (Java)

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Kalıtım (Inheritance)

Nesneye Dayalı 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

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

C++ Dersi: Nesne Tabanlı Programlama

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

Nesneye Yönelik Programlama (OOP) 7.Hafta

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

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

C++ Dersi: Nesne Tabanlı Programlama

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

C++ Dersi: Nesne Tabanlı Programlama

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

Bölüm 10. Altprogramların gerçeklenmesi ISBN

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

Ders 8: Metotlar. barisgokce.com

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

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

#ifndef FATURA_H #define FATURA_H

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

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

Operatörlerin Aşırı Yüklenmesi

// hataları işaret eden referans

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

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

Operatörlere İşlev Yükleme

C++ ile Nesneye Dayalı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Kurucu Fonksiyonlar (Constructors)

8. İŞARETCİLER (POINTERS)

10/17/2007 Nesneye Yonelik Programlama 3.1

HSancak Nesne Tabanlı Programlama I Ders Notları

İç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.

Standard Template Library

C++ Dersi: Nesne Tabanlı Programlama

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

#ifndef COMPLEX_H #define COMPLEX_H

ALGORİTMA VE PROGRAMLAMA II

Veri Yapıları Lab Notları 1

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

DERSİN WEB SİTESİ:

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

BMH-303 Nesneye Yönelik Programlama

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Nesne Yönelimli Programlama

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

Dizi ( Array ) ve Dizgi ( String )

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Çok Şekillilik (Polymorphism)

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

const objects & const member functions

Diziler (Arrays) Çok Boyutlu Diziler

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

Transkript:

Statik Veri Üye ve Metotlar Genel olarak bir sınıfa ait nesnelerin verileri bellekte farklı bölgelerde yer alır. Ancak bazı durumlarda, belirli bir üyenin ortak bir alanda tek bir kopyasının bulunması isteyebiliriz. Bu durumda static anahtar sözcüğünden yararlanıyoruz. Static tanımlı üyeler public yada private tanımlı olabilirler. Static tanımlı üyeler o sınıftan hiçbir nesne var olmasa bile bellekte yer alırlar. Statik üyeler, sınıfın herhangi bir nesnesine ait değildirler. Statik üyelerinin tipik kullanımı bir sınıfın tüm nesneleri için ortak veri kayıdı tutmak içindir. Örneğin, belirli nesnelerin sayısını saklamak için bir sayaç olarak statik veri üyesi kullanabilirsiniz. Yeni bir nesne oluşturulduğunda her zaman bu statik veri üyesi toplam nesne sayısını tutmak için arttırılmalıdır. Erişim Operatörü (::) ve sınıf adı kullanılarak statik üyelere erişilebilir. Örnek: class x private: static int x; ; int x :: i = 0; void main( )... cout << x :: i;... Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları Bir fonksiyon elemanı statik olarak tanımlanmışsa, sınıfın herhangi bir nesnesinden bağımsız olarak hareket eder. Bir stati üye fonksiyonu, sınıfın herhangi bir nesnesi bulunmuyorsa dahi erişim operatörü kullanılarak erişilme özelliğine sahiptir. Bir statik veri yalnızca statik fonksiyon tarafından erişilebilir. Örnek 1: //kutu.h class kutu private: static int kutusayac; double uzunluk, genislik, yukseklik; kutu (double u = 2.0, double g = 2.0, double y = 2.0) cout << << endl "Varsayılan yapıcı çalışıyor."; uzunluk = u; genislik = g;

yukseklik = y; kutusayac ++; double hacim () return uzunluk * genislik * yukseklik; static int Getkutusayac () return kutusayac; ; //statik üyelere başlangıç değeri atama işlemi mutlaka sınıf sonlandırıldıktan sonra yapılmalıdır. int kutu :: kutusayac = 0; //kutu.cpp #include "kutu.h" void main() cout << "İlk aşamadaki nesne sayısı:" << kutu :: Getkutusayac () << endl; kutu kutu1 (3.3,1.2,1.5); kutu kutu2 (8.5,6.0,2.0); cout << "Kutu1 nesnesinin hacmi:" << kutu1.hacim () << endl; cout << "Kutu2 nesnesinin hacmi:" << kutu2.hacim () << endl; cout << "Son aşamadaki nesne sayısı:" << kutu :: Getkutusayac () << endl; system ( "pause"); Getkutusayac () static int üye işlevi kullanılmadığı taktirde, sınıfın kapsamı dışından erişmek için (public) statik veri üyesi oluşturmanız gerekir. static int kutusayac;... main()... cout << " Son aşamadaki nesne sayısı:" << kutu :: kutusayac << endl;... Örnek 2: Aşağıdaki örnekte değişken "toplamsayi" statik değişken olarak tanımlanır. Bu değişken sınıfa ait tüm nesneler için geçerli olacaktır. Diğer bir deyişle, sınıftaki tüm nesneler için genel bir kullanım alanına sahiptir. Eğer sıradan sayı tamsayı (statik değil) olarak tanımlanırsa her nesne için ayrı ayrı kullanılabilme özelliğine sahip olabilir. Ancak örneğimizde "toplamsayi" statik üyesi, oluşturulacak her nesne için ortak olarak kullanılacaktır.

Çözüm 1 //arabagalerisi.h class arabagalerisi int sayac; string marka; static int toplamaraba; // statik veri üyesi arabagalerisi (string m) marka=m; cout << marka<< marka arabaların sayısını giriniz:"; cin >> sayac; toplamaraba + = sayac; void arabasayigöster () cout<< marka << " marka arabaların sayısı =" << sayac << endl; static int gettoplamsayi () return toplamaraba; void arabaal (int n) sayac+ =n; toplamaraba + = n; cout << "\ n" << n << "" << marka << " marka araba satın alındı."; void arabasat (int n) if (n> sayac) cout << Galeride yeterince << marka << " marka araba bulunmamaktadır..."<<endl; else sayac- = n; toplamaraba - = n; cout << "\ n" << n << "" << marka << " marka araba satılmıştır."; ; int arabagalerisi :: toplamaraba; //varsayılan değer 0 (sıfır) olacaktır. // int arabagalerisi :: toplamaraba = 10; toplam araba sayısı 10 dan başlayacaktır.

//arabagalerisi.cpp #include <string> #include "arabagalerisi.h" void main( ) arabagalerisi mersedes( "Mercedes"), toyota( "Toyota"), bmw( "BMW"); mercedes.arabaal(10); toyota.arabasat(7); bmw.arabaal(15); cout << "\ n ******************************************* <<endl; mercedes.arabasayigoster (); toyota.arabasayigoster (); bmw.arabasayigoster (); cout << "Galerideki toplam araba sayısı:" << arabagaleri::gettoplamsayi ( ) << endl; system ( "pause"); HARİCİ (EXTERNAL) VE STATİK NESNELER Otomatik Nesneler: Ana fonksiyon kapsamı içerisinde oluşturulan nesneledir. Sadece yaratıldıkları fonksiyon içerisinde geçerlidirler, fonksiyon kapması dışında yaşayamazlar Statik Nesneler: Yerel fonksiyon kapsamında oluşturulurlar ancak program sonuna kadar geçerliliklerini sürdürürler. Harici Nesneler: Herhangi bir fonksiyon kapsamının dışında oluşturulan nesnelerdir. Örnek //ornek.h class abc int sayi; abc () value = 0; void sayiekle (int s) sayi + = s; int getsayi () return sayi; ; //harici nesne abc haricinesne; #include"ornek.h" void main( )

haricinesne. sayiekle (5); for(int i; i <3 i ++) // OTOMATİK NESNE abc otonesne; otonesne.sayiekle (10); // STATİK NESNE static abc statnesne; statobj. sayiekle (15); cout << "\n \notomatik nesne değeri =" << otonesne.getsayi (); cout << "\n \nstatik nesne değeri= "<< statnesne.getsayi () ; cout << "\n\nharici nesne değeri="<< haricinesne.getsayi (); system( "pause"); Örnek2 - Çözüm 2 //arabagalerisi2.h class arabagalerisi int sayac; string marka; static int toplamaraba; // statik veri üyesi arabagalerisi (string m) marka=m; cout << marka<< marka arabaların sayısını giriniz:"; cin >> sayac; toplamaraba + = sayac; void arabasayigöster () cout<< marka << " marka arabaların sayısı =" << sayac << endl; static int gettoplamsayi () return toplamaraba; void arabaal (int n) sayac+ =n; toplamaraba + = n; cout << "\ n" << n << "" << marka << " marka araba satın alındı."; void arabasat (int n) if (n> sayac) cout << Galeride yeterince << marka << " marka araba bulunmamaktadır..."<<endl; else

; sayac- = n; toplamaraba - = n; cout << "\ n" << n << "" << marka << " marka araba satılmıştır."; int arabagalerisi :: toplamaraba; // arabagalerisi için harici nesneler arabagalerisi mercedes ( "Mercedes"), toyota ( "Toyota"), bmw ( "BMW"); //cargallery2.cpp #include <string> #include "arabagalerisi2.h" void stok( ); void main( ) mercedes.arabaal (10); toyota.arabasat (7); bmw.arabaal (15); stok(); system( "pause"); void stok( ) cout << "\ n ************************************* \notomobillerin Sayisi: "; mercedes. arabasayigöster (); toyota. arabasayigöster (); bmw. arabasayigöster (); cout << " \ ntoplam araba sayısı:" << arabagalerisi :: gettoplamsayi () << endl; // Çözüm 3 - Parametreli yapıcıyı çalıştıracak bir dizi nesnesi oluşturmak #include <string> #include "arabagalerisi.h" void main arabagalerisi galeri [3] = "Honda", "Hyundai", "Fiat"; galeri[0].arabaal (5); galeri[2].arabasat(4); cout << "\ n *************************************** \notomobillerin Sayisi: "; for (int i = 0; i<3 ; i ++) galeri [i].arabasayigöster (); cout << " \ ntoplam araba sayısı:" << arabagalerisi :: gettoplamsayi () << endl; system( "pause");

this İşaretçisi (this pointer) this işaretçisi, statik eleman fonksiyonlar hariç bütün eleman fonksiyonların erişebildiği özel bir işaretçidir. this işaretçisi, eleman fonksiyonu çağıran nesneyi işaret eder. Yani, bir eleman fonksiyonunu bir nesne için çağırdığımız zaman, derleyicimiz önce oluşturduğumuz nesnenin adresini this göstergesine aktarır ve ardından fonksiyonu çağırır. this işaretçisinin diğer bir kullanımı ise, eleman fonksiyonu çağıran nesne ile bu fonksiyona parametre olarak gönderilen nesnenin aynı olup olmadığını kontrol eder. Örnek: #include <string> class Film string film_adi, oyuncu_adi; Film(string f, string o) this->film_adi=f; this->oyuncu_adi=o; string yaz() return this->film_adi+this->oyuncu_adi; void goster() string a; a=this->yaz(); //a=yaz(); cout<<a; ; void main() Film nesne("titanic"," Leonardo Di Caprio"); nesne.goster(); system("pause");

SABİT (const) ÜYE FONKSİYONLARI const, değiştirilemez nesneler tanımlamak için kullanılır. Const ile tanımlı bir nesnenin herhangi bir üyesini değiştirmeye çalıştırmak hata oluşturacaktır. Bazen bir sınıfın belirli bazı üyelerinin değiştirilmesini önlemek isteriz. Bu durumda ilgili üye fonksiyonun sonuna const belirteci konur. Örnek 1: class constornek int x; constornek (int a) x = a; void setx (int); const int getx (); ; int constornek:: getx () const return x; void constornek::setx (int x) this->x=x; void main() const constornek test1; constornek test2; test1.setx (5); // nesne const, ancak fonksiyon const olmaığından HATA oluşur!!! cout << test1. getx () << endl; // nesne ve fonksiyon const olduğundan herhangi bir hata oluşmaz. test2. setx (5); // nesne ve fonksiyon const olmadığından herhangi bir hata oluşmaz cout << test2. getx () << endl; //const fonksiyonlar const olmayan nesneler tarafından ulaşılabilir. system ( "pause");