Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.

Slides:



Advertisements
Benzer bir sunumlar
Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Advertisements

SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
void medyan(int cevap[]) { int j; siralama(cevap);
Nesneye Dayalı Programlama
Bölüm 2 C Dilinin Temelleri
Bölüm 4 İşlevlerve Modüler Programlama. 1 / 8 İşlev Tanımı /* İşlev açıklama satırı */ ( ) { }
Değişken Bildirimleri
Atama ve Girdi/Çıktı Komutları
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
String Kütüphanesindeki Arama Fonksiyonları
Bölüm 10 Yapılar ve Birleşimler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
Nesneye Dayalı Programlama
DİZİLER.
Program Kontrol İfadeleri
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
Nesneye Yönelik Programlama
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Nesneye Dayalı Programlama
Nesne Yönelimli Programlama Dersi
FONKSİYONLAR.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
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 ++ Nesne.
Önceki Dersi Hatırlama !!
INTERNET TABANLI PROGRAMLAMA
Nesneye Yönelik Programlama (12. Sunu). İsim Uzayları (Namespaces) Sınıfınızda Deniz adında iki öğrenci olduğunu kabul ediniz. Böyle bir durumda bu öğrencileri.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
Kalıtım , Sınıf Asli Ergün.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Nesneye Dayalı Programlama
Diziler (Arrays).
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 ++ Veri.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
KALITIM Yılmaz Kılıçaslan.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
SANAL FONKSİYONLAR VE ÇOKBİÇİMLİLİK Yılmaz Kılıçaslan.
Bölüm 5 Nesneler ve Metotlar
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
JAVA PROGRAMLAMA ORNEKLER
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Veri yapıları Hafta3 Dizi Yapıları.
BİLGİSAYAR programlama II
Bilgisayar Programlama III C
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
Hafta2 Rekürsif Algoritmalar
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Algoritma ve Programlamaya Giriş Ders 5. C Programlama Dili - 2.
Fonksiyonlar ve Diziler
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
Bölüm 2 C Dilinin Temelleri
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
Karakter dizi fonksiyonları
Bölüm 2 C Dilinin Temelleri
Sunum transkripti:

Nesnelerin Özellikleri

- Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar - Ortak genel (global) değişkenler - Nesne göstericileri - Nesne dizileri

4.1 Nesne üyesi nesneler Bir nesnenin üye değişkenleri arasında diğer nesneler de yer alabilir. Kullanıp kullanmama bakımından nesnelerin diğer değişkenlerden bir farkı yoktur. class A {int i; //… public: A(); A(A&); A(int); //… }; class B {A a, b; //… public: B(); B(B&); A(int, int); //… };

İkinci sınıfın koıdlamasında ne olabılır? •B::B() {…} //A için otomatikman çalışır •B::B() // tasarımcı ‘by default’ : a(32), b(21) // her değişken için // ayrı bir (sabit) tasarımcı {…} •B::B(int u, int v) // ‘normal’ tasarımcı : a(u), b(v) // ilk değerlerde bir fark olabilir {…}

// nokta.cpp -- Demonstrates a simple class (I) #include class Nokta { float X, Y, Z; //access rights?? public: Nokta (float=0, float=0, float=0); //tasarımcı tipi? Nokta (Nokta&); // --- "" ---? int Tasi (float, float, float); // member function int Yaz (); // member function float Uzaklik (Nokta&); // member function };

Class implementation (I) Nokta:: Nokta (float x, float y, float z) { X=x; Y=y; Z=z; } Nokta:: Nokta ( Nokta& N) {X=N.x; Y=N.y; Z=N.z; } int Nokta:: Yaz () { printf("%f, %f, %f", X, Y, Z); } #define DIFSQR (p) ((p-Ikinci*##p)*(p-Ikinci*##p) float Nokta:: Uzaklik (Nokta& Ikinci) return sqrt(DIFSQR(X)+ DIFSQR(Y) + DIFSQR(Z)) #undef DIFSQR

İkinci sınıf (Ia) class Dogru { Nokta Baslangıc, Bitis; public: Dogru (Nokta&, Nokta&); Dogru (Dogru&); float Uzunluk (); int Yaz (); };

Class implementation (Ia) Dogru:: Dogru (Nokta&, Nokta&) : Baslangıc(A), Bitis(B) {} Dogru:: Dogru ( Dogru& D ) : Baslangıc(D.Baslangıc), Bitis(D.Bitis) {} float Dogru: Uzunluk () { return Baslangıc.Uzaklık(Bitis); } int Dogru:: Yaz () { printf ("["); Baslangıc.Yaz(); Printf ("-"); Bitis.Yaz(); printf ("]"); return 0; }

Main() program I #include void main() { Nokta A; Nokta B(30, 40, 50); clrscr; A.Yaz(); printf ("/n"); B.Yaz(); printf("/niki nokta arasindaki mesafe=%f\n", A.Uzaklik(B)); B.Tasi(10, -10, 60); Dogru D( Nokta (10, 20, 30), B); D.Yaz(); printf("/dogrunun uzakligi=%f\n", D.Uzunluk()); return 0; }

4.2 Friend (Arkadaş) Bilertici #include class Nokta { float X, Y, Z; public: Nokta (float=0, float=0, float=0); Nokta (Nokta&); int Tasi (float, float, float); friend int Yaz (Nokta&); friend float Uzaklik (Nokta&, Nokta&); };

Class ımplementatıon (II) Fonksıyonlarda bir değişiklik : int Yaz () { printf("%f, %f, %f", N.X, N.Y, N.Z); } float Uzaklik (Nokta& Birinci, Nokta & İkinci) { return sqrt( (Birinci.X – İkinci.X)*(Birinci.X – İkinci.X) + (Birinci.Y – İkinci.Y)*(Birinci.Y – İkinci.Y)+ (Birinci.Z – İkinci.Z)*(Birinci.Z – İkinci.Z) ); }

Sınıf (IIa) class Dogru { Nokta Baslangic, Bitis; public: Dogru (Nokta&, Nokta&); Dogru (Dogru&); float Uzunluk (); friend int Yaz (); };

Class Implementatıon (IIa) Aynı, hariç: int Yaz (Dogru& D) { printf ("["); Yaz(D.Baslangıc); printf ("-"); Yaz(D.Bitis); printf ("]"); return 0; }

Main() program (II) #include void main() { Nokta A; Nokta B(30, 40, 50); clrscr; Yaz(A); printf ("/n"); Yaz(B); printf("/niki nokta arasındaki mesafe=%f\n", Uzaklik(A,B)); B.Tasi(10, -10, 60); Dogru D( Nokta (10, 20, 30), B); Yaz(D); printf("/dogrunun uzaklığı=%f\n", D.Uzunluk()); return 0; }

class A { friend class B; // friend için: private, public, protected – önemi yok! // data members and member functions }; class B { // A sınıfın tüm dataları (private, protected bile) kullanabilir ! //... } Arkadaş-sınıf

4.3 Nesnelerin Operatörlere Yüklenmesi class Vector {public: float X, Y, Z; Vector ( float=0, float=0, float=0 ); Vector (Vector&); } Vector:: Vector (float a, float b, float c) {X=a; Y=b; Z=c; } Vector:: Vector (Vector & v) { X=v.X; Y=v.Y; Z=v.Z; }

Operatörler: Vector& operator + (Vector& A, Vector& B) {return Vector(A.X+B.X, A.Y+B.Y, A.Z+B.Z); } Vector & operator – (Vector & A, Vector & B) {return Vector (A.X-B.X, A.Y-B.Y, A.Z-B.Z); } //bu tanımlamalardan sonra...

Vector A(3, 4); Vector B(8, 6.513, 1); Vector C = A + B; Vector D = A - B; float f = 67; Vector E = A - Vector (16, 1, -10)+ Vector (f, f*3,f/4); //yazmak mümkün olacaktır. Fakat * operasyon için // (Vector*float) 2 fonksiyon yazmak gerekiyor! Neden?

4.4 this Yerel Değişkeni void Nokta::Rapor() { printf(“Bu nokta ”); Yaz(*this); printf(“konumundadir\n”); } Nokta::Nokta (float X, float Y, float Z ) { this->X=X; this->Y=Y; this->Z=Z; }

4.5 Genel Ortak Değişkenler Her nesne sahip olduğunu bilgileri dığer tüm nesnelere karşi korur. Eğer bazı bilgilerin sahipsizce tüm programlama öğeleri tarafından kullanılması istenirse, bu değişkenler global olarak tanımlanırlar. Eğer bir değişkeni sadece belli bir sınıfa mensup nesnelerin kullanması istenirse, bu istek sınıf tanımlaması içinde bildirilir. Bu bildiri değişken tanımlamasının başina static kelimesi ilave edilerek yapılır.

#include //static1.cpp #include class Test { int a; static int b; public: Test(int a, int x) {this->a=a; b+=x;} int SayA() {return a;} int SayB() {return b;} }; int Test::b; main() { Test A(5, 10); cout<<"A a = "<<A.SayA()<<" A b = "<<A.SayB()<<endl; Test B(8, 15); cout<<"B a = "<<B.SayA()<<" B b = "<<B.SayB()<<endl; cout<<"A a = "<<A.SayA()<<" A b = "<<A.SayB()<<endl; return 0; } // static nesneler de olabilir: static Nokta(8, 7, -12);

4.6 Durağan ( static ) fonksiyonlar //STATIC.CPP //////// #include class Static_Test { int X; static int Y; public: Static_Test(int); int X_Value(); void Auto_Display(); static void Static_Display(); static void Static_Message(); };

int Static_Test::Y=300; Static_Test::Static_Test(int x) {X=x;} int Static_Test::X_Value(){return X;} //automatic function definition void Static_Test::Auto_Display() { printf("x= %d\t", X); printf("** %d **\n", X_Value()); printf("y= %d\n", Y); Static_Message(); //static function call }

//static function definition void Static_Test::Static_Display() { /* printf("x= %d\t", X); // Error! No object! printf("** %d **\n", X_Value()); // Error! Use. or -> to call Static_Test::X_Value with an object! */ printf("y= %d\n", Y); Static_Message(); }

void Static_Test::Static_Message() { printf("Static_Test, Static_Message function\n"); } ///////////////////////////////////////////////////// main() { Static_Test A(8); A.Auto_Display(); // Static_Test::Auto_Display(); - Error ! A.Static_Display(); printf("\n"); Static_Test::Static_Display(); return 0; }

4.7 const Fonksiyonlar Tamamlasının sonunda const (sabıt) kelimesi bulunan fonksiyonlar bilgi fonksiyonu olarak adlandırılırlar. Bu fonksionlar üye değişkenlerin değerlerini değişteremiyecekleri gibi fonksiyonu olmayan diğer fonksiyonları da çağıramazlar. class sınıf_adı {…int const_fonksiyon(…) const ;…} int sınıf_adı:: const_fonksiyon(…) const {… return değer;}