Bölüm 14 İleri C Konuları

Benzer belgeler
C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

BMT 101 Algoritma ve Programlama I 5. Hafta. Yük. Müh. Köksal Gündoğdu 1

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

Bölüm 2 - C ile Programlamaya Giriş

1 PROGRAMLAMAYA GİRİŞ

BMT 106 Algoritma ve Programlama II Bahar Dönemi

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

Dr. Fatih AY Tel: fatihay@fatihay.net

Eln 1002 Bilgisayar Programlama II

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

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

PROGRAMLAMAYA GİRİŞ DERS 2

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

10/17/2007 Nesneye Yonelik Programlama 3.1

C++ Dersi: Nesne Tabanlı Programlama

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

BÖLÜM 4: DEĞİŞKENLER, SABİTLER VE OPERATÖRLER

Fonksiyonlar -Genel Test- A

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Sınav tarihi : Süre : 60 dak.

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

DOSYA İŞLEMLERİ Programlama dilleri hafta -

C++ Dersi: Nesne Tabanlı Programlama

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

KONU 7: DOSYA İŞLEME ( File Processing )

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

Eln 1001 Bilgisayar Programlama I

Hafta 13 Fonksiyonlar

Algoritma ve Programlama: Karar Yapıları ve Döngüler

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

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

C++ Statements. { ve } arasında ifade edilen bir dizi statement bir compound statement (birleşik ifade) oluşturur.

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

C PROGRAMLAMA D İ L İ

Pointer Kavramı. Veri Yapıları

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Genel Programlama II

Java da İşleçler, Ders #3 (4 Kasım 2009)

ALGORİTMA VE PROGRAMLAMA II

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

C++ Dersi: Nesne Tabanlı Programlama

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

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

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

Ders 2: Veri Tipleri, Değişkenler ve Sabitler

Temel Dosya İşlemleri. Kütük Organizasyonu 1

C Programlama Dilininin Basit Yapıları

Fonksiyonlar (Altprogram)

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

Temel Giriş/Çıkış Fonksiyonları

C Programlama Dilinde Değişkenler

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Programlama Dillerinde Kullanılan Veri Tipleri

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Yrd. Doç. Dr. Caner ÖZCAN

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BİL-142 Bilgisayar Programlama II

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

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

Giris {\} /\ Suhap SAHIN Onur GÖK

Nesne Yönelimli Programlama

Göstericiler (Pointers)

Nesne Tabanlı Programlama

Yrd. Doç. Dr. Caner ÖZCAN

int printf (const char *format [, argument,...]);

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

C PROGRAMLAMA DİLİNE GİRİŞ

Temel Bilgisayar Programlama

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

BTEP243 Ders 3. class Yazım Kuralı:

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

ELN1001 BİLGİSAYAR PROGRAMLAMA I

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

BÖLÜM 11: YAPISAL VERİ TİPLERİ

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

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

NESNEYE YÖNELİK PROGRAMLAMA

Veri Yapıları Lab Notları 1

Transkript:

Bölüm 14 İleri C Konuları Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 1 İçerik 14.1 Giriş 14.2 UNIX ve DOS Sistemlerinde Girdi/Çıktı Yönlendirme 14.3 Değişken Uzunluklu Argüment Listesi 14.4 Komut-Satırı Argümentleri Kullanma 14.5 Çoklu Kaynak Dosyalı Programların Derlenmesi 14.6 exit ve atexit ile Program Sonlandırma 14.7 volatile Tipi Niteleyici 14.8 Integer ve Floating-Point Sabitleri İçin Sonekler 14.9 Dosyalar 14.10 Sinyal Kontrolü 14.11 calloc ve realloc ile Dinamik Bellek Düzenleme 14.12 Koşulsuz Branş: goto

14.1 Giriş Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 2 Bir çok ileri düzey konulardan bahsedilecek Özel olarak işletim sistemleri Genellikle UNIX veya DOS

14.2 UNIX ve DOS Sistemlerinde Girdi/Çıktı (I/O) Yönlendirme Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 3 Standard I/O klavye ve ekran Girdi ve çıktıyı yeniden yönlendir Yönlendirme sembolü(<) İşletim sistemi özelliği, C özelliği değil UNIX ve DOS $ veya % komut satırını temsil eder Örnek: $ Program < girdi Girdi değerlerini yazmak yerine, dosyadan okur ( ) komutu Bir programın çıktısı diğer bir programın girdisi olur $ Program1 Program2 Program1 in çıktısı Program2 ye girdi olarak gider

14.2 UNIX ve DOS Sistemlerinde Girdi/Çıktı (I/O) Yönlendirme Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 4 Yönlendirilmiş Çıktı (>) Bir programın çıktısının nereye gideceğini belirler Örnek: $ Program > dosyam Çıktı dosyam dosyasına gider (önceki içeriği siler) Ekleme Çıktısı (>>) Çıktıyı dosyanın sonuna ekler(önceki içeriği korur) Örnek: $ Program >> dosyam Çıktı dosyam dosyasının sonuna eklenir

14.3 Değişken Uzunluklu Argüment Listesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 5 Argüment sayısı belli olmayan fonksiyonlar <stdarg.h> yükle Parametre listesinin sonuna (...) yaz En az bir tanımlı parametre gereklidir Örnek: double fonksiyon( int i,... ); Noktalar değişken uzunluklu argüment listeli fonksiyonun sadece prototipinde kullanılır printf çoklu argüment alan bu tipten bir fonksiyondur printf prototipi int printf( const char* format,... ); şeklinde tanımlanır

14.3 Değişken Uzunluklu Argüment Listesi Makrolar ve değişken argümentlerin tanımları header (stdarg.h) va_list Tip belirteci, (va_list argümentleri) gereklidir va_start( argümentler, diğer değişkenler) Parametreleri verir, kullanımdan önce gerekli va_arg( argümentler, tip) va_arg her çağrıldığında bir parametre gönderir Otomatik olarak bir sonraki parametreyi işaret eder va_end( argümentler ) Fonksiyonun normal dönmesine yardım eder Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 6

14.3 Değişken Uzunluklu Argüment Listesi 2 Değişken uzunluklu argüment listesi kullanma */ 3 #include <stdio.h> 4 #include <stdarg.h> 5 6 double ortalama( int,... ); 7 8 int main() 9 { 10 double w = 37.5, x = 22.5, y = 1.7, z = 10.2; 11 12 printf( "%s%.1f\n%s%.1f\n%s%.1f\n%s%.1f\n\n", 13 "w = ", w, "x = ", x, "y = ", y, "z = ", z ); 14 printf( "%s%.3f\n%s%.3f\n%s%.3f\n", 15 " w ve x in ortalaması ", 16 ortalama( 2, w, x ), 17 " w, x ve y nin ortalaması ", 18 ortalama( 3, w, x, y ), 19 " w, x,y ve z nin ortalaması ", 20 ortalama( 4, w, x, y, z ) ); 21 22 return 0; 23 } 24 25 double ortalama( int i,... ) 26 { 27 double toplam = 0; 28 int j; 29 va_list ap; 1. Yükle <stdarg.h> 1.1 Fonksiyon prototipi (değişken uzunluklu arg. listeli) 1.2 Değişkenleri belirle 2. Fonksiyon çağır 3. Fonksiyon tanımı 3.1 ap (va_list nesnesi) oluştur 3.2 ap belirle (va_start(ap, i)) İLERİ C KONULARI Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 7

14.3 Değişken Uzunluklu Argüment Listesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 8 30 31 va_start( ap, i ); 32 33 for ( j = 1; j <= i; j++ ) 34 toplam += va_arg( ap, double ); 35 36 va_end( ap ); 37 return toplam / i; 38 } 3.3 Argümentlere eriş va_arg(ap, double) 3.4 fonksiyon sonlandır va_end(ap); return toplam/1; w = 37.5 x = 22.5 y = 1.7 z = 10.2 w ve x in ortalaması 30.000 w, x ve y nin ortalaması 20.567 w x, y ve z nin ortalaması 17.975

14.4 Komut-Satırı Argümentleri Kullanma Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 9 DOS veya UNIX de argümentleri main e aktar Main tanımı int main( int argc, char *argv[] ) int argc Aktarılan argüment sayısı char *argv[] String dizisi Argüment adlarına sıralı olarak sahiptir argv[ 0 ] ilk argümenttir Örnek: $ copy input output argc: 3 argv[ 0 ]: "copy" argv[ 1 ]: "input" argv[ 2 ]: "output"

1 /* Fig. 14.3: fig14_03.c 2 Komut satırı argümentleri kullanma */ 3 #include <stdio.h> 4 5 int main( int argc, char *argv[] ) 6 { 7 FILE *girdidosyaptr, *ciktidosyaptr; 8 int c; 9 10 if ( argc!= 3 ) 14.4 Komut-Satırı Argümentleri Kullanma 11 printf( Kullanım: kopya girdidosyası çıktıdosyası\n" ); 12 else argv[2] 3. argümenttir, ve yazılmaktadır 13 if ( ( girdidosyaptr = fopen( argv[ 1 ], "r" ) )!= NULL ) 14 15 if ( ( ciktidosyaptr = fopen( argv[ 2 ], "w" ) )!= NULL ) 16 17 while ( ( c = fgetc( girdidosyaptr ) )!= EOF ) 18 fputc( c, ciktidosyaptr ); 19 20 else 21 printf(" Dosya \"%s\" açılamıyor EOF a \n", kadar döngü. argv[ fgetc 2 ] ); ile infileptr den bir karakter al ve fputc ile outfileptr ye yaz 22 23 else 24 printf( Dosya \"%s\" açılamıyor \n", argv[ 1 ] ); 25 26 return 0; 27 } main deki argc ve argv[] ye dikkat et argv[1] 2. argümenttir ve okunmaktadır. İLERİ C KONULARI Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 10

14.5 Çoklu Kaynak Dosyalı Programların Derlenmesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 11 Çok dosyalı programlar Fonksiyon tanımı tek bir dosyada olmalı (parçalanamaz) Global değişkenler aynı dosyadaki fonksiyonlara erişebilir Global değişkenler kullanıldıkları her dosyada tanımlanmalıdır Örnek: Eğer birglobal tamsayısı bir dosyada tanımlandı ise Bunu bir başka dosyada kullanmak için extern int birglobal; dosyaya eklenmelidir extern Değişkenin bir başka dosyada tanımlandığını belirtir Fonksiyon prototipleri extern olmadan diğer dosyalarda kullanılabilir Fonksiyonu kullanan her dosyada bir prototip bulundur

14.5 Çoklu Kaynak Dosyalı Programların Derlenmesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 12 static anahtar kelimesi Değişkenin sadece tanımlandığı dosyada kullanılacağını belirtir Çoklu dosyalı programlar Bir dosyada küçük bir değişiklik yapıldıysa tümünü yeniden derlemek gereksizdir Sadece değiştirilen dosyalar derlenebilir İşlem sisteme bağlıdır UNIX: make komutu

14.6 exit ve atexit ile Program Sonlandırma exit fonksiyonu Programın sonlanmasını sağlar Parametreler EXIT_SUCCESS veya EXIT_FAILURE sembolik sabitleri Uygulama-tanımlı bir değer gönderir Örnek: exit( EXIT_SUCCESS ); atexit fonksiyonu atexit( çalıştırılacak fonksiyon ); Programın başarı ile sonlanması sonucunda çalıştırılacakfonksiyon u işleme sokmak için kaydeder atexit programı kendisi sonlandırmaz 32 fonksiyona kadar kaydedebilir (çoklu atexit() deyimleri) Fonksiyonlar sondan başa kayıt sırası ile çağrılır Çağrılan fonksiyonlar argüment almaz veya birşey göndermez Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 13

1 /* Fig. 14.4: fig14_04.c 14.6 exit ve atexit ile Program Sonlandırma 2 exit ve atexit fonksiyonları kullanımı*/ 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 void yaz( void ); 7 8 int main() 9 { 10 int cevap; 11 12 atexit( yaz ); /* yaz fonksiyonunu kaydet */ 13 printf("exit fonksiyonu ile programı kapatmak için 1 gir" 14 "\n Programı normal sonlandırmak için 2 gir\n" ); 15 scanf( "%d", &cevap ); 16 17 if ( cevap == 1 ) { 18 printf( "\n Programı " 19 "exit ile sonlandırıyor\n" ); 20 exit( EXIT_SUCCESS ); 21 } 22 23 printf( "\nprogramı main sonuna" 24 " ulaşarak sonlandırıyor \n" ); 25 return 0; 26 } 27 28 void yaz( void ) 29 { 30 printf(" Program sonunda yaz fonksiyonunu " 31 çalıştırıyor\nprogram sonlandı.\n" ); 1. Register fonksiyonu yaz; atexit kullanarak 2. Kullanıcı girdisi 3. Çıktı 3.1 fonksiyon tanımı İLERİ C KONULARI Nuri 32 ÖZALP } (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 14

14.6 exit ve atexit ile Program Sonlandırma Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 15 exit fonksiyonu ile programı kapatmak için 1 gir Programı normal sonlandırmak için 2 gir : 1 Programı exit ile sonlandırıyor Program sonunda yaz fonksiyonunu çalıştırıyor Program sonlandı exit fonksiyonu ile programı kapatmak için 1 gir Programı normal sonlandırmak için 2 gir : 2 Programı main sonuna ulaşarak sonlandırıyor Program sonunda yaz fonksiyonunu çalıştırıyor Program sonlandı

14.7 volatile Tipi Niteleyici Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 16 volatile (Değişken tip) niteleyicisi Değişken program dışında değiştirilebilir Değişken programın kontrolünde değildir Değişken optimize edilemez Const tipinin zıttı

14.8 Integer ve Floating-Point Sabitleri İçin Sonekler Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 17 C sabitler için sonekler sağlar unsigned integer u veya U long integer l veya L unsigned long integer ul veya UL float f veya F long double l veya L Örnekler: 174u 467L 3451ul Eğer integer sabitte ek yok ise, tipi o değeri yükleyebilecek ilk tiple belirlenir(sırası: int, long int, unsigned long int) Eğer floating point de ek yok ise tipi otomatik olarak double dır

14.9 Dosyalar (Ekstra) C binary (ikili) dosyaları işleyebilir Her sistem binary dosyayı desteklemez Binary mod desteklenmiyorsa dosyalar tekst dosyası olarak açılır Hız bellek yeri ve uyumluluk koşulları gerektiriyorsa binary dosya kullanılmalıdır Diğer durumlarda tekst dosyası tercih edilir Doğal taşınabilirliği, veri incelemesi için satandart araçları olduğundan tmpfile fonksiyonu "wb+" modunda geçici bir dosya açar Bazı sistemler geçici dosyaları tekst dosyası olarak işlerler Geçici dosyalar fclose ile kapatılmadıkça veya program kapanmadıkça var olur rewind fonksiyonu Dosya pointer-ını dosyanın başına getirir Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 18

14.9 Dosyalar (Ekstra) Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 19 Dosya açma modları: Mod rb wb ab rb+ wb+ ab+ Açıklama Okumak için binary dosya aç. Yazmak için binary dosya oluştur. Dosya mevcut ise, içeriğini yok eder. Ekle; sonuna yazmak için bir binary dosya aç veya oluştur. Yenilemek için binary dosya aç (okuma ve yazma). Yenilemek için bir binary dosya oluştur. Dosya mevcut ise, içeriğini yok eder. Ekle; yenilemek için binary dosya aç veya oluştur; yazım dosya sonuna yapılır

14.10 Sinyal Kontrolü Sinyal Beklenmeyen olay, programı durdurur müdahale (<ctrl> c), illegal komut, kesimleme ihlali, sonlanma sırası, floating-point durumları (sıfıra bölme, çok büyük reel sayıları çarpma) signal fonksiyonu Beklenmedik olayları yakalar Header <signal.h> İki argüment alır; bir sinyal numarası ve sinyal kontrol fonksiyonuna bir pointer raise fonksiyonu Bir tamsayı sinyal numarası alır ve sinyal oluşturur Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 20

14.10 Sinyal Kontrolü Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 21 signal.h de tanımlı sinyaller Sinyal SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM Açıklama Beklenmedik program sonlanması (abort a bir çağrım gibi). Sıfıra bölme gibi, hatalı bir aritmetik işlem. Bir illegal komutun yakalanması. Bir interaktif dikkat sinyali alınması. Belleğe geçersiz bir erişim. Programa gönderilen bir durdurma istemi.

1 /* Fig. 14.8: fig14_08.c 2 Sinyal kontrol kullanımı */ 3 #include <stdio.h> 4 #include <signal.h> 5 #include <stdlib.h> 6 #include <time.h> 7 8 void sinyal_kontrol( int ); 9 10 int main() 11 { 12 int i, x; 13 14 signal( SIGINT, sinyal_kontrol ); 15 srand( clock() ); 16 17 for ( i = 1; i <= 100; i++ ) { 18 x = 1 + rand() % 50; 19 20 if ( x == 25 ) 21 raise( SIGINT ); 22 23 printf( "%4d", i ); 24 25 if ( i % 10 == 0 ) 26 printf( "\n" ); 27 } 28 29 return 0; 30 } 31 14.10 Sinyal Kontrolü SIGINT sinyal tipi oluştuğunda signal, sinyal_kontrol fonksiyonunu çağırır 1. Fonksiyon prototipi 2. random sayı seç 2.1 x == 25 ise sinyali yükselt 3. Fonksiyon tanımı İLERİ C KONULARI Nuri 32 ÖZALP void (ANKARA sinyal_kontrol( ÜNİVERSİTESİ) İLERİ PROGRAMLAMA int sinyaldegeri ) 22

14.10 Sinyal Kontrolü Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 23 33 { 34 int cevap; 35 36 printf( "%s%d%s\n%s", 37 "\n Kesme sinyali ( ", sinyaldeğeri, " ) alındı.", 38 Devam etmek istermisiniz ( 1 = evet veya 2 = hayır )? " ); 39 40 scanf( "%d", &cevap ); Programı sonlandırmak için kullanıcı seçimi 41 42 while ( cevap!= 1 && cevap!= 2 ) { 43 printf( "( 1 = evet veya 2 = hayır )? " ); Sinyal kontrol signal i tekrar çağırarak yenilenir 44 scanf( "%d", &cevap ); 45 } 46 47 if ( cevap == 1 ) 48 signal( SIGINT, sinyal_kontrol ); 49 else 50 exit( EXIT_SUCCESS ); 51 } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

14.10 Sinyal Kontrolü Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 24 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 Kesme sinyali ( 2 ) alındı. Devam etmek istermisiniz ( 1 = evet veya 2 = hayır )? 1 94 95 96 Kesme sinyali ( 2 ) alındı. Devam etmek istermisiniz ( 1 = evet veya 2 = hayır )? 1 97 98 99 100

14.11 calloc ve realloc ile Dinamik Bellek Düzenleme Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 25 Dinamik Bellek Düzenleme Dinamik diziler oluşturabilir calloc( üyesay, boyut ) üyesay üye sayısı boyut her bir üyenin boyutu Dinamik bir diziye pointer gönderir realloc( nesneyepointer, yeniboyut) nesneyepointer düzenlenecek nesneye pointer yeniboyut nesnenin yeni boyutu Düzenlenmiş belleğe pointer gönderir Yeri düzenleyemezse NULL gönderir Eğer yeniboyut 0 ise işaretlenen nesne serbest bırakılır Eğer nesneyepointer 0 ise malloc gibi davranır

14.12 Koşulsuz Branş: goto Yapısallaşmamış programlama Zorunlu ise kullan Döngüden çıkmak için false oluşmasını beklemek yerine break ile çık goto deyimi Akış kontrolünü belirtilen etiketten başlatır Etiket bir belirleyicidir (örneğin basla:) İçiçe döngülerden hızla çıkmak için goto basla; Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 26

14.12 Koşulsuz Branş: goto 1 /* Fig. 14.9: fig14_09.c 2 goto kullanımı*/ 3 #include <stdio.h> 4 5 int main() 6 { 7 int say = 1; 8 9 basla: /* etiket */ 10 if ( say > 10 ) 11 goto son; 12 13 printf( "%d ", say ); 14 ++say; 15 goto basla; 16 17 son: /* etiket */ 18 putchar( '\n' ); 19 20 return 0; 21 } 1 2 3 4 5 6 7 8 9 10 Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA İLERİ C KONULARI 27

Bölüm 15 - C++ " Daha İyi Bir C " Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 1 İçerik 15.1 Giriş 15.2 C++ 15.3 Bir Basit Program: İki Tamsayıyı Toplama 15.4 C++ Standard Kütüphanesi 15.5 Header Dosyaları 15.6 Satıriçi (Inline) Fonksiyonları 15.7 Referanslar ve Referans Parametreleri 15.8 Default Argumentler ve Boş Parametre Listesi 15.9 Tek Operandlı(Unary) Hedef Karar Operatörü 15.10 Fonksiyon Yüklemeleri 15.11 Fonksiyon Şablonları

15.1 Giriş Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 2 İlk 14 bölüm Yordamsal programlama C ile yukarıdan-aşağı programlama dizaynı Bölüm 15-23 C++ Nesne tabanlı programlama (sınıflar, nesneler, gruplama) Nesne tabanlı programlama (kalıt, polimorfism) Genel programlama (sınıf (class) ve fonksiyon şablonları)

15.2 C++ C++ Bir çok C özelliğini geliştirdi Nesne tabanlı kapasiteye sahip Yazılım kalitesini ve tekrar kullanılabilirliğini artırır Bell Labs de Bjarne Stroustrup geliştirdi "sınıflı C " olarak adlandırılır C++ (artırma operatörü) - C nin gelişmiş sürümü C den çok üstün C++ derleyicisi C programlarını da derleyebilir C programlarını adım adım C++ a genişletir ANSI C++ Son sürümü http://www.ansi.org/ http://www.cygnus.com/misc/wp/ de bedava Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 3

15.3 Bir Basit Program: İki Tamsayıyı Toplama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 4 Dosya uzantısı C dosyası:.c C++ dosyası:.cpp (kullandığımız),.cxx,.c (büyük harf) Farkları C++ da " açıklamlar için" // kullan Örneğin: // açıklama yazısı <iostream> - girdi çıktı (input/output) akışı header dosyası Gönderme tipleri tüm fonksiyonlar gönderme tipini belirtmelidir C de gerek yok, fakat C++ da gerekli C++ değişkenler hemen hemen her yerde deklare edilebilir C de herhangi bir işletilebilir deyimden önce blok olarak verilir

15.3 Bir Basit Program: İki Tamsayıyı Toplama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 5 C++ da Input/Output Karakter akışları(streams) ile gerçeklenir Akışlar input/output nesnesine gönderilir Output std::cout - standard çıktı akışı (ekrana bağlanır) << stream ekleme operatörü std::cout << merhaba"; merhaba" kelimesini std::cout a ekler yani yazar Input std::cin - standard input nesnesi (klavyeye bağlanır) >> stream alma operatörü std::cin >> değişken; Klavyeden akışı alır ve değişken e aktarır

15.3 Bir Basit Program: İki Tamsayıyı Toplama std::endl satır sonu" Akış düzenleyici yeni satır yazar ve çıktı desteğini temizler Bazı sistemler yazılacak yeterli tekst olana kadar çıktıyı görüntülemez std::endl tekstin görünmesini sağlar using deyimleri std:: önek in kaldırılmasına izin verir Sonra tartışılacak Taşırma Çoklu << veya >> operatörleri tek bir deyimde std::cout << Merhaba " << sınıf" << std::endl; Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 6

15.3 Bir Basit Program: İki Tamsayıyı Toplama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 7 1 // Fig. 15.1: fig15_01.cpp 2 // Toplama programı 3 #include <iostream> 4 5 int main() 6 { 7 int tam1, tam2, toplam; // deklarasyon 8 9 std::cout << İlk tamsayıyı gir\n"; // uyarı 10 std::cin >> tam1; // tamsayı oku 11 std::cout << İkinci tamsayıyı gir"; // uyarı 12 std::cin >> tam2; // tamsayı oku 13 toplam = tam1 + tam2; // toplama atama 14 std::cout << Toplam= " << toplam << std::endl; // yaz 15 16 return 0; // program sonu 17 } İlk tamsayıyı gir 45 İkinci tamsayıyı gir 72 Toplam= 117

15.4 C++ Standard Kütüphanesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 8 C++ programları Fonksiyonlar ve Sınıflar dan oluşur Çoğu programcı kütüphane fonksiyonları kullanır C++ öğrenmenin iki kısmı Dili öğren Kütüphane fonksiyonlarını öğren Kendi fonksiyonlarını yaratma Avantaj: nasıl çalıştığını biliyorsunuzdur Dezavantaj: zaman alıcı, etkinliğini korumak ve iyi dizayn etmek zordur

15.5 Header Dosyaları Header dosyaları Her standard kütüphane header dosyalarına sahiptir Fonksiyon prototipleri, veri tipi tanımlamaları, ve sabitler içerir.h ile bitenler eski-tip" header-lardır Okuyucu tanımlı header dosyaları Kendi header dosyanı oluştur.h uzantılı olsun Diğer dosyalarda kullanmak için o dosyaya #include dosyam.h" ekle Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 9

15.6 Satıriçi (Inline) Fonksiyonları Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 10 Çağrılan fonksiyonlar Derleme zamanını uzatır Fonksiyonun önündeki inline belirteci fonksiyonun o yere kopyalanmasını sağlar Çağrılan fonksiyon yerine o fonksiyonun bir kopyasını koyar Hızı artırır fakat dosya boyutunu büyültür Derleyici inline belirtecini gözardı edebilir En küçük fonksiyonlar hariç diğerlerini gözardı eder inline double kup( const double s ) {returns * s * s;} Using deyimleri using std::cout; yazarak programda std::cout yerine cout yazabiliriz std::cin ve std::endl için de uygulanabilir

15.6 Satıriçi (Inline) Fonksiyonları bool Boolean yeni veri tipi, ya true ya da false olur C++ Anahtar kelimeleri C ve C++ dillerindeki ortak anahtar kelimeler auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Sadece C++ asm bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 11

15.7 Referanslar ve Referans Parametreleri Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 12 Değer ile Çağırma Fonksiyona geçen verinin kopyası Kopyayı değiştirebilir fakat orjinali değil Referans ile Çağırma Fonksiyon veriye doğrudan erişim sağlayabilir Değişiklikler orjinali etkiler Argümentler için referans parametreleri & kullan void degistir(int &degisken) { degisken += 3; } Orjinal girdi değişkenine 3 ekler int y = &x y yi değiştirmekle x de değişir

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 13 15.7 Referanslar ve Referans Parametreleri Sallantı referansları Referansları değişkenlere atadığınızdan emin olunuz Eğer fonksiyon bir değişkene referans gönderirse, değişkenin static olduğundan emin olunuz Aksi halde, otomatik olup fonksiyon bittiğinde yok olur Çoklu referanslar Pointer gibi her referansda & gerekli int &a, &b, &c;

1 // Fig. 15.5: fig15_05.cpp 2 // Referanslarla 15.7 Referanslar ve Referans Parametreleri 3 // değer ile çagğırma ve referans ile çağırma karşılaştırılması 4 #include <iostream> 5 6 using std::cout; 7 using std::endl; 8 9 int degerilekare( int ); 10 void refilekare( int & ); 11 12 int main() 13 { 14 int x = 2, z = 4; 15 16 cout << "x = " << x << " degerilekare den önce\n" 17 << " degerilekare nin gönderdiği değer: " 18 << degerilekare( x ) << endl 19 << "x = " << x << " degerilekareden sonra\n" << endl; 20 21 cout << "z = " << z << " refilekare den önce " << endl; 22 refilekare( z ); 23 cout << "z = " << z << " refilekare den sonra " << endl; 24 25 return 0; 26 } 27 28 int degerilekare( int a ) 29 { 30 return a *= a; // çağırıcı argümenti değişmez 31 } C++ " Daha İyi Bir C " Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 14

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 15 15.7 Referanslar ve Referans Parametreleri 32 33 void refilekare( int &cref ) 34 { 35 cref *= cref; // çağirıcı argümenti değişti 36 } x = 2 degerilekare den önce degerilekare nin gönderdiği değer: 4 x = 2 degerilekare den sonra z = 4 refilekare den önce z = 16 refilekare den sonra

15.8 Default Argumentler ve Boş Parametre Listesi Fonksiyon parametresi yazılmaz ise, default değeri alır sabit, global değişken, veya fonksiyon çağrımı olabilir Yeterince parametre belirtilmemişse, en sağdakiler default larını alır Fonksiyon parametresinde default-ları kurma int fonksiyonum( int x = 1, int y = 2, int z = 3 ); Boş parametre listesi C de, boş parametre listesinin anlamı fonksiyonun herhangi bir argümenti almasıdır C++ ise fonksiyonun hiçbir argüment almamasıdır Fonksiyonun hiç bir parametre almayacağını deklare etmek için: Parantez içine void yaz veya boş bırak Prototipler: void fonk1( void ); void fonk2(); Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 16

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 17 1 // Fig. 15.8: fig15_08.cpp 2 // default argümentler kullanma 15.8 Default Argumentler ve Boş Parametre Listesi 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int kubhacim( int uzunluk= 1, int genislik= 1, int yukseklik= 1 ); 9 10 int main() 11 { 12 cout << "default küb hacmi: " << kuphacim() 13 << "\n\n uzunluğu 10, genişliği 1 ve yüksekliği 1 \n" 14 << olan kübün hacmi: " << kubhacim( 10 ) 15 << "\n\n uzunluğu 10, genişliği 5 ve yüksekliği 1 \n" 16 << olan kübün hacmi: " << kubhacim( 10, 5 ) 17 << "\n\n uzunluğu 10, genişliği 5 ve yüksekliği 2\n" 18 << olan kübün hacmi: " << kubhacim( 10, 5, 2 ) 19 << endl; 20 21 return 0; 22 } 23 24 // Hacmi hesapla 25 int kubhacim( int uzunluk, int genislik, int yukseklik ) 26 { 27 return uzunluk * genislik * yukseklik; 28 }

15.8 Default Argumentler ve Boş Parametre Listesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 18 default küb hacmi: 1 uzunluğu 10, genişliği 1 ve yüksekliği 1 olan kübün hacmi: 10 uzunluğu 10, genişliği 5 ve yüksekliği 1 olan kübün hacmi: 50 uzunluğu 10, genişliği 5 ve yüksekliği 2 olan kübün hacmi: 100

15.9 Tek Operandlı(Unary) Hedef Karar Operatörü Unary hedef karar operatörü (::) Yerel değişken aynı ada sahipse global değişkene erişim sağla degisken yerine ::degisken kullan static_cast<yenitip> (degisken) yenitip tipindeki degişken nin kopyasını oluşturur Int-leri float-lara, vs çevirir. Akış düzenleyicileri Çıktı formatını değiştirir setprecision float-lar için duyarlılığı kurar (default 6 rakam) setiosflags çıktıyı formatlar setwidth alan genişliğini kurar Bölüm 21-e bakınız Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 19

15.9 Tek Operandlı(Unary) Hedef Karar Operatörü 1 // Fig. 15.9: fig15_09.cpp 2 // tek operandlı hedef karar operatörü 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 using std::ios; 8 9 #include <iomanip> 10 11 using std::setprecision; 12 using std::setiosflags; 13 using std::setw; 14 15 const double PI = 3.14159265358979; 16 17 int main() 18 { 19 const float PI = static_cast< float >( ::PI ); 20 21 cout << setprecision( 20 ) 22 << " PI nin yerel float değeri = " << PI 23 << "\n PI nin global double değeri = " << ::PI << endl; 24 25 cout << setw( 28 ) << PI nin yerel float değeri = " 26 << setiosflags( ios::fixed ios::showpoint ) 27 << setprecision( 10 ) << PI << endl; 28 return 0; 29 } Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 20

15.9 Tek Operandlı(Unary) Hedef Karar Operatörü Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 21 PI nin yerel float değeri = 3.141592741012573242 PI nin global double değeri = 3.141592653589790007 PI nin yerel float değeri = = 3.1415927410

15.10 Fonksiyon Yüklemeleri Fonksiyon yüklemeleri: Aynı adlı farklı parametreli fonksiyonlar Yüklenmiş fonksiyonlar benzer görevleri yapmalıdırlar Tamsayıların karesini alan veya reel sayıların karesini alan fonksiyonlar gibi int kare( int x) {return x * x;} float square(float x) { return x * x; } Program fonksiyonu imzası ile çağırır İmza, fonksiyon adı ve parametre tipi ile belirlenir Tip emniyetli bağlantı uygun yüklenmiş fonksiyonu çağırmayı garanti eder Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 22

15.10 Fonksiyon Yüklemeleri Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 23 1 // Fig. 15.10: fig15_10.cpp 2 // Yüklenmiş fonksiyon kullanımı 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int kare( int x ) { return x * x; } 9 10 double kare( double y ) { return y * y; } 11 12 int main() 13 { 14 cout << 7 tamsayısının karesi " << kare( 7 ) 15 << "\n 7.5 reel (double)sayısının karesi " << kare( 7.5 ) 16 << endl; 17 18 return 0; 19 } 7 tamsayısının karesi 49 7.5 reel (double)sayısının karesi 56.25

15.11 Fonksiyon Şablonları Fonksiyon Şablonları Yüklenmiş fonksiyonlar oluşturmanın kompakt yolu Anahtar kelime template Her formal tip parametreden önce anahtar kelime class veya tipadı template < class T > // veya template< tipadı T > T kare( T deger1) { return deger1 * deger1; } T çağrılan fonksiyondaki tip parametresi ile yer değiştirecek int x; int y = kare(x); Eğer int parametre ise, tüm T ler int olur float, double, long... kullanılabilir Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 24

1 // Fig. 15.11: fig15_11.cpp 2 // fonksiyon şablonu kullanımı 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 template < class T > 10 T maximum( T deger1, T deger2, T deger3 ) 11 { 12 T max = deger1; 13 14 if ( deger2 > max ) 15 max = deger2; 16 17 if ( deger3 > max ) 18 max = deger3; 19 20 return max; 21 } 22 23 int main() 24 { 25 int int1, int2, int3; 26 27 cout << Üç tamsayı gir: "; 28 cin >> int1 >> int2 >> int3; 29 cout << maksimum: " 15.11 Fonksiyon Şablonları 30 << maximum( int1, int2, int3 ); // int versiyon C++ " Daha İyi Bir C " Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 25

15.11 Fonksiyon Şablonları Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 26 31 32 double double1, double2, double3; 33 34 cout << "\n Üç double değer gir: "; 35 cin >> double1 >> double2 >> double3; 36 cout << maksimum: " 37 << maximum( double1, double2, double3 ); // double versiyonu 38 39 char char1, char2, char3; 40 41 cout << "\n Üç karakter gir: "; 42 cin >> char1 >> char2 >> char3; 43 cout << maksimumn: " 44 << maximum( char1, char2, char3 ) // char versiyonu 45 << endl; 46 47 return 0; 48 } Üç tamsayı gir: 1 2 3 maksimum: 3 Üç double sayı gir : 3.3 2.2 1.1 maksimum: 3.3 Üç karakter gir: A C B maksimum: C

Bölüm 15 - C++ " Daha İyi Bir C " Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 1 İçerik 15.1 Giriş 15.2 C++ 15.3 Bir Basit Program: İki Tamsayıyı Toplama 15.4 C++ Standard Kütüphanesi 15.5 Header Dosyaları 15.6 Satıriçi (Inline) Fonksiyonları 15.7 Referanslar ve Referans Parametreleri 15.8 Default Argumentler ve Boş Parametre Listesi 15.9 Tek Operandlı(Unary) Hedef Karar Operatörü 15.10 Fonksiyon Yüklemeleri 15.11 Fonksiyon Şablonları

15.1 Giriş Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 2 İlk 14 bölüm Yordamsal programlama C ile yukarıdan-aşağı programlama dizaynı Bölüm 15-23 C++ Nesne tabanlı programlama (sınıflar, nesneler, gruplama) Nesne tabanlı programlama (kalıt, polimorfism) Genel programlama (sınıf (class) ve fonksiyon şablonları)

15.2 C++ C++ Bir çok C özelliğini geliştirdi Nesne tabanlı kapasiteye sahip Yazılım kalitesini ve tekrar kullanılabilirliğini artırır Bell Labs de Bjarne Stroustrup geliştirdi "sınıflı C " olarak adlandırılır C++ (artırma operatörü) - C nin gelişmiş sürümü C den çok üstün C++ derleyicisi C programlarını da derleyebilir C programlarını adım adım C++ a genişletir ANSI C++ Son sürümü http://www.ansi.org/ http://www.cygnus.com/misc/wp/ de bedava Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 3

15.3 Bir Basit Program: İki Tamsayıyı Toplama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 4 Dosya uzantısı C dosyası:.c C++ dosyası:.cpp (kullandığımız),.cxx,.c (büyük harf) Farkları C++ da " açıklamlar için" // kullan Örneğin: // açıklama yazısı <iostream> - girdi çıktı (input/output) akışı header dosyası Gönderme tipleri tüm fonksiyonlar gönderme tipini belirtmelidir C de gerek yok, fakat C++ da gerekli C++ değişkenler hemen hemen her yerde deklare edilebilir C de herhangi bir işletilebilir deyimden önce blok olarak verilir

15.3 Bir Basit Program: İki Tamsayıyı Toplama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 5 C++ da Input/Output Karakter akışları(streams) ile gerçeklenir Akışlar input/output nesnesine gönderilir Output std::cout - standard çıktı akışı (ekrana bağlanır) << stream ekleme operatörü std::cout << merhaba"; merhaba" kelimesini std::cout a ekler yani yazar Input std::cin - standard input nesnesi (klavyeye bağlanır) >> stream alma operatörü std::cin >> değişken; Klavyeden akışı alır ve değişken e aktarır

15.3 Bir Basit Program: İki Tamsayıyı Toplama std::endl satır sonu" Akış düzenleyici yeni satır yazar ve çıktı desteğini temizler Bazı sistemler yazılacak yeterli tekst olana kadar çıktıyı görüntülemez std::endl tekstin görünmesini sağlar using deyimleri std:: önek in kaldırılmasına izin verir Sonra tartışılacak Taşırma Çoklu << veya >> operatörleri tek bir deyimde std::cout << Merhaba " << sınıf" << std::endl; Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 6

15.3 Bir Basit Program: İki Tamsayıyı Toplama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 7 1 // Fig. 15.1: fig15_01.cpp 2 // Toplama programı 3 #include <iostream> 4 5 int main() 6 { 7 int tam1, tam2, toplam; // deklarasyon 8 9 std::cout << İlk tamsayıyı gir\n"; // uyarı 10 std::cin >> tam1; // tamsayı oku 11 std::cout << İkinci tamsayıyı gir"; // uyarı 12 std::cin >> tam2; // tamsayı oku 13 toplam = tam1 + tam2; // toplama atama 14 std::cout << Toplam= " << toplam << std::endl; // yaz 15 16 return 0; // program sonu 17 } İlk tamsayıyı gir 45 İkinci tamsayıyı gir 72 Toplam= 117

15.4 C++ Standard Kütüphanesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 8 C++ programları Fonksiyonlar ve Sınıflar dan oluşur Çoğu programcı kütüphane fonksiyonları kullanır C++ öğrenmenin iki kısmı Dili öğren Kütüphane fonksiyonlarını öğren Kendi fonksiyonlarını yaratma Avantaj: nasıl çalıştığını biliyorsunuzdur Dezavantaj: zaman alıcı, etkinliğini korumak ve iyi dizayn etmek zordur

15.5 Header Dosyaları Header dosyaları Her standard kütüphane header dosyalarına sahiptir Fonksiyon prototipleri, veri tipi tanımlamaları, ve sabitler içerir.h ile bitenler eski-tip" header-lardır Okuyucu tanımlı header dosyaları Kendi header dosyanı oluştur.h uzantılı olsun Diğer dosyalarda kullanmak için o dosyaya #include dosyam.h" ekle Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 9

15.6 Satıriçi (Inline) Fonksiyonları Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 10 Çağrılan fonksiyonlar Derleme zamanını uzatır Fonksiyonun önündeki inline belirteci fonksiyonun o yere kopyalanmasını sağlar Çağrılan fonksiyon yerine o fonksiyonun bir kopyasını koyar Hızı artırır fakat dosya boyutunu büyültür Derleyici inline belirtecini gözardı edebilir En küçük fonksiyonlar hariç diğerlerini gözardı eder inline double kup( const double s ) {returns * s * s;} Using deyimleri using std::cout; yazarak programda std::cout yerine cout yazabiliriz std::cin ve std::endl için de uygulanabilir

15.6 Satıriçi (Inline) Fonksiyonları bool Boolean yeni veri tipi, ya true ya da false olur C++ Anahtar kelimeleri C ve C++ dillerindeki ortak anahtar kelimeler auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Sadece C++ asm bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 11

15.7 Referanslar ve Referans Parametreleri Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 12 Değer ile Çağırma Fonksiyona geçen verinin kopyası Kopyayı değiştirebilir fakat orjinali değil Referans ile Çağırma Fonksiyon veriye doğrudan erişim sağlayabilir Değişiklikler orjinali etkiler Argümentler için referans parametreleri & kullan void degistir(int &degisken) { degisken += 3; } Orjinal girdi değişkenine 3 ekler int y = &x y yi değiştirmekle x de değişir

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 13 15.7 Referanslar ve Referans Parametreleri Sallantı referansları Referansları değişkenlere atadığınızdan emin olunuz Eğer fonksiyon bir değişkene referans gönderirse, değişkenin static olduğundan emin olunuz Aksi halde, otomatik olup fonksiyon bittiğinde yok olur Çoklu referanslar Pointer gibi her referansda & gerekli int &a, &b, &c;

1 // Fig. 15.5: fig15_05.cpp 2 // Referanslarla 15.7 Referanslar ve Referans Parametreleri 3 // değer ile çagğırma ve referans ile çağırma karşılaştırılması 4 #include <iostream> 5 6 using std::cout; 7 using std::endl; 8 9 int degerilekare( int ); 10 void refilekare( int & ); 11 12 int main() 13 { 14 int x = 2, z = 4; 15 16 cout << "x = " << x << " degerilekare den önce\n" 17 << " degerilekare nin gönderdiği değer: " 18 << degerilekare( x ) << endl 19 << "x = " << x << " degerilekareden sonra\n" << endl; 20 21 cout << "z = " << z << " refilekare den önce " << endl; 22 refilekare( z ); 23 cout << "z = " << z << " refilekare den sonra " << endl; 24 25 return 0; 26 } 27 28 int degerilekare( int a ) 29 { 30 return a *= a; // çağırıcı argümenti değişmez 31 } C++ " Daha İyi Bir C " Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 14

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 15 15.7 Referanslar ve Referans Parametreleri 32 33 void refilekare( int &cref ) 34 { 35 cref *= cref; // çağirıcı argümenti değişti 36 } x = 2 degerilekare den önce degerilekare nin gönderdiği değer: 4 x = 2 degerilekare den sonra z = 4 refilekare den önce z = 16 refilekare den sonra

15.8 Default Argumentler ve Boş Parametre Listesi Fonksiyon parametresi yazılmaz ise, default değeri alır sabit, global değişken, veya fonksiyon çağrımı olabilir Yeterince parametre belirtilmemişse, en sağdakiler default larını alır Fonksiyon parametresinde default-ları kurma int fonksiyonum( int x = 1, int y = 2, int z = 3 ); Boş parametre listesi C de, boş parametre listesinin anlamı fonksiyonun herhangi bir argümenti almasıdır C++ ise fonksiyonun hiçbir argüment almamasıdır Fonksiyonun hiç bir parametre almayacağını deklare etmek için: Parantez içine void yaz veya boş bırak Prototipler: void fonk1( void ); void fonk2(); Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 16

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 17 1 // Fig. 15.8: fig15_08.cpp 2 // default argümentler kullanma 15.8 Default Argumentler ve Boş Parametre Listesi 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int kubhacim( int uzunluk= 1, int genislik= 1, int yukseklik= 1 ); 9 10 int main() 11 { 12 cout << "default küb hacmi: " << kuphacim() 13 << "\n\n uzunluğu 10, genişliği 1 ve yüksekliği 1 \n" 14 << olan kübün hacmi: " << kubhacim( 10 ) 15 << "\n\n uzunluğu 10, genişliği 5 ve yüksekliği 1 \n" 16 << olan kübün hacmi: " << kubhacim( 10, 5 ) 17 << "\n\n uzunluğu 10, genişliği 5 ve yüksekliği 2\n" 18 << olan kübün hacmi: " << kubhacim( 10, 5, 2 ) 19 << endl; 20 21 return 0; 22 } 23 24 // Hacmi hesapla 25 int kubhacim( int uzunluk, int genislik, int yukseklik ) 26 { 27 return uzunluk * genislik * yukseklik; 28 }

15.8 Default Argumentler ve Boş Parametre Listesi Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 18 default küb hacmi: 1 uzunluğu 10, genişliği 1 ve yüksekliği 1 olan kübün hacmi: 10 uzunluğu 10, genişliği 5 ve yüksekliği 1 olan kübün hacmi: 50 uzunluğu 10, genişliği 5 ve yüksekliği 2 olan kübün hacmi: 100

15.9 Tek Operandlı(Unary) Hedef Karar Operatörü Unary hedef karar operatörü (::) Yerel değişken aynı ada sahipse global değişkene erişim sağla degisken yerine ::degisken kullan static_cast<yenitip> (degisken) yenitip tipindeki degişken nin kopyasını oluşturur Int-leri float-lara, vs çevirir. Akış düzenleyicileri Çıktı formatını değiştirir setprecision float-lar için duyarlılığı kurar (default 6 rakam) setiosflags çıktıyı formatlar setwidth alan genişliğini kurar Bölüm 21-e bakınız Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 19

15.9 Tek Operandlı(Unary) Hedef Karar Operatörü 1 // Fig. 15.9: fig15_09.cpp 2 // tek operandlı hedef karar operatörü 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 using std::ios; 8 9 #include <iomanip> 10 11 using std::setprecision; 12 using std::setiosflags; 13 using std::setw; 14 15 const double PI = 3.14159265358979; 16 17 int main() 18 { 19 const float PI = static_cast< float >( ::PI ); 20 21 cout << setprecision( 20 ) 22 << " PI nin yerel float değeri = " << PI 23 << "\n PI nin global double değeri = " << ::PI << endl; 24 25 cout << setw( 28 ) << PI nin yerel float değeri = " 26 << setiosflags( ios::fixed ios::showpoint ) 27 << setprecision( 10 ) << PI << endl; 28 return 0; 29 } Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 20

15.9 Tek Operandlı(Unary) Hedef Karar Operatörü Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 21 PI nin yerel float değeri = 3.141592741012573242 PI nin global double değeri = 3.141592653589790007 PI nin yerel float değeri = = 3.1415927410

15.10 Fonksiyon Yüklemeleri Fonksiyon yüklemeleri: Aynı adlı farklı parametreli fonksiyonlar Yüklenmiş fonksiyonlar benzer görevleri yapmalıdırlar Tamsayıların karesini alan veya reel sayıların karesini alan fonksiyonlar gibi int kare( int x) {return x * x;} float square(float x) { return x * x; } Program fonksiyonu imzası ile çağırır İmza, fonksiyon adı ve parametre tipi ile belirlenir Tip emniyetli bağlantı uygun yüklenmiş fonksiyonu çağırmayı garanti eder Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 22

15.10 Fonksiyon Yüklemeleri Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 23 1 // Fig. 15.10: fig15_10.cpp 2 // Yüklenmiş fonksiyon kullanımı 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int kare( int x ) { return x * x; } 9 10 double kare( double y ) { return y * y; } 11 12 int main() 13 { 14 cout << 7 tamsayısının karesi " << kare( 7 ) 15 << "\n 7.5 reel (double)sayısının karesi " << kare( 7.5 ) 16 << endl; 17 18 return 0; 19 } 7 tamsayısının karesi 49 7.5 reel (double)sayısının karesi 56.25

15.11 Fonksiyon Şablonları Fonksiyon Şablonları Yüklenmiş fonksiyonlar oluşturmanın kompakt yolu Anahtar kelime template Her formal tip parametreden önce anahtar kelime class veya tipadı template < class T > // veya template< tipadı T > T kare( T deger1) { return deger1 * deger1; } T çağrılan fonksiyondaki tip parametresi ile yer değiştirecek int x; int y = kare(x); Eğer int parametre ise, tüm T ler int olur float, double, long... kullanılabilir Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 24

1 // Fig. 15.11: fig15_11.cpp 2 // fonksiyon şablonu kullanımı 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 template < class T > 10 T maximum( T deger1, T deger2, T deger3 ) 11 { 12 T max = deger1; 13 14 if ( deger2 > max ) 15 max = deger2; 16 17 if ( deger3 > max ) 18 max = deger3; 19 20 return max; 21 } 22 23 int main() 24 { 25 int int1, int2, int3; 26 27 cout << Üç tamsayı gir: "; 28 cin >> int1 >> int2 >> int3; 29 cout << maksimum: " 15.11 Fonksiyon Şablonları 30 << maximum( int1, int2, int3 ); // int versiyon C++ " Daha İyi Bir C " Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 25

15.11 Fonksiyon Şablonları Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA C++ " Daha İyi Bir C " 26 31 32 double double1, double2, double3; 33 34 cout << "\n Üç double değer gir: "; 35 cin >> double1 >> double2 >> double3; 36 cout << maksimum: " 37 << maximum( double1, double2, double3 ); // double versiyonu 38 39 char char1, char2, char3; 40 41 cout << "\n Üç karakter gir: "; 42 cin >> char1 >> char2 >> char3; 43 cout << maksimumn: " 44 << maximum( char1, char2, char3 ) // char versiyonu 45 << endl; 46 47 return 0; 48 } Üç tamsayı gir: 1 2 3 maksimum: 3 Üç double sayı gir : 3.3 2.2 1.1 maksimum: 3.3 Üç karakter gir: A C B maksimum: C

Bölüm 16 - Sınıflar (Class) ve Veri Soyutlaması Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 1 Ġçerik 16.1 Giriş 16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama 16.3 Class Alanı ve Class Üyelerine Erişim 16.4 Bütünlemeden Arayüzü Ayırma 16.5 Üyelere Erişim Kontrolü 16.6 Erişim ve Yarar Fonksiyonları 16.7 Class Nesnelerini Belirleme: Oluşturucular (Constructors) 16.8 Oluşturucularla Default Argümentlerin Kullanımı 16.9 Yokedicilerin (Destructors) Kullanımı 16.10 Oluşturucular ve Yokediciler Çağrıldığında 16.11 Veri Üyelerini ve Üye Fonksiyonlarını Kullanma 16.12 Bir Ġnce Tuzak: Özel (private) bir Veri Üyesine bir Referans Gönderme 16.13 Default Üyebazlı Kopyayla Atama 16.14 Yazılım Kullanılabilirliği

16.1 Giriş Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 2 Nesne -Tabanlı programlama (OOP) Verileri (nesne) ve fonksiyonları (davranış) class adı verilen paketlere yükleme Veri ve fonksiyonlar yakın ilişkiye sahiptir Bilgi gizleme Uygulama detayları class-ların içinde gizlidir C++ programlama birimi: class class bir mavi kopya (plan) gibidir tekrar kullanılabilirdir Nesneler class-lardan oluşturulur Örneğin, bir ev mavi kopya class dan oluşturulur C programcıları fonksiyonlara konsantre olurlar

16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 3 Class Niteliklere (veri üyeleri) ve davranışlara (üye fonksiyonları) sahip olan model nesneleri class anahtar kelimesi ile tanımlanır 1 class Zaman { 2 public: 3 Zaman(); 4 void kurzaman( int, int, int ); 5 void yazaskeri(); 6 void yazstandard(); 7 private: 8 int saat; // 0-23 9 int dakika; // 0-59 10 int saniye; // 0-59 11 }; Public: ve Private: üye erişim belirteçleridir kurzaman, yazaskeri, ve yazstandard üye fonksiyonlardır. Zaman oluşturucudur. saat, dakika, ve saniye veri üyeleridir.

16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 4 Format Gövde küme parantezleri ({ ve }) içinde yazılır Class tanımı noktalıvirgül ile biter Üye fonksiyonlar ve veriler Public - Programın Zaman class nesnesine her erişitiğinde erişilebilirdir Private sadece class-ın üye fonksiyonlarına erişilebilirdir Protected sonra tartışılacak

16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 5 Oluşturucu Bir class nesnesinin veri üyelerini belirten özel üye fonksiyondur Değer göndermez class ile aynı ada sahiptir Deklarasyonlar class tanımlandıktan sonra bir veri tipi olarak kullanılabilirdir Zaman aksam, zamandizisi[ 5 ], *zamanapointer, &yemekzamanı= aksam; Not: class adı yeni tip bir belirteç oldu. // Zaman tipi nesne // Zaman nesnesinin dizisi // nesneye pointer // bir Zaman nesnesine referans

16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 6 Binary hedef karar operatörü (::) Üye fonksiyona hangi class-ın sahip olduğunu belirtir Farklı class-ların üye fonksiyonlar aynı ada sahip olabilir Tanım class-ı üye fonksiyonları için format Return_Tipi ClassAdı::ÜyeFonksiyonAdı( ){ }

16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Eğer üye fonksiyon class-ın içinde tanımlanmış ise Hedef karar operatörü ve class adına gerek yoktur Bir fonksiyonu class dışında tanımlamak public veya private olmasını değiştirmez Class-lar yazılımın tekrar kullanımını teşvik eder Kalıtsallık özelliği yeni class-ların eskilerinden üretilmesine izin verir Aşağıdaki programda Zaman oluşturucusu veri üyelerini sıfırlar Oluşum aşamasında nesnenin kararlı konumda olmasına emin olunuz Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 7

1 // Fig. 16.2: fig16_02.cpp 2 // Zaman class-ı. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 // zaman soyut veri tipi tanımı 9 class Zaman { 10 public: 11 Zaman(); // oluşturucu 12 void kurzaman( int, int, int ); // saat dakika ve saniyeyi kur 13 void yazaskeri(); // askeri zaman formatında yaz 14 void yazstandard(); // standard zaman formatında yaz 15 private: 16 int saat; // 0 23 17 int dakika; // 0 59 18 int saniye; // 0 59 19 }; 20 21 // Zaman oluşturucu her bir veri üyesini sıfır alır. 22 // tüm Zaman nesnelerinin kararlı durumda olduğuna garantile. 23 Zaman::Zaman() { saat = dakika = saniye = 0; } 24 25 // Askeri zamanı kullanarak yeni bir zaman değeri gir. Ğeçerliliğini kontrol et 26 // Geçersiz değerleri sıfır yap 27 void Zaman::kurZaman( int s, int d, int sn ) 28 { 29 saat = ( s >= 0 && s < 24 )? s : 0; 30 dakika = ( d >= 0 && d < 60 )? d : 0; 31 saniye= ( sn >= 0 && sn < 60 )? sn : 0; 32 } SINIFLAR VE VERİ SOYUTLAMASI 16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA 8

Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 9 33 34 // Askeri formatta zamanı taz 16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama 35 void Zaman::yazAskeri() 36 { 37 cout << ( saat < 10? "0" : "" ) << saat << ":" 38 << ( dakika < 10? "0" : "" ) << dakika; 39 } 40 41 // Standart formatta zamanı yaz 42 void Zaman::yazStandard() 43 { 44 cout << ( ( saat == 0 saat == 12 )? 12 : saat % 12 ) 45 << ":" << ( dakika < 10? "0" : "" ) << dakika 46 << ":" << ( saniye < 10? "0" : "" ) << saniye 47 << ( saat < 12? " AM" : " PM" ); 48 } 49 50 // Test et 51 int main() 52 { 53 Zaman t; // Zaman sınıfının t nesnesini belirle 54 55 cout << Ġlk askeri zaman: "; 56 t.yazaskeri(); 57 cout << "\n Ġlk standart zaman: "; 58 t.yazstandard(); 59

16.2 Bir Zaman Soyut Veri Tipini bir Class ile Uygulama Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 10 60 t.kurzaman( 13, 27, 6 ); 61 cout << "\n\n kurzaman dan sonra askeri zaman: "; 62 t.yazaskeri(); 63 cout << "\n kurzaman dan sonra standart zaman: "; 64 t.yazstandard(); 65 66 t.kurzaman( 99, 99, 99 ); // yanlış girdi dene 67 cout << "\n\n Yanlış girdiden sonra:" 68 << "\naskeri zaman: "; 69 t.yazaskeri(); 70 cout << "\nstandart zaman: "; 71 t.yazstandard(); 72 cout << endl; 73 return 0; 74 } Ġlk askeri zaman: 00:00 Ġlk standart zaman: 12:00:00 AM KurZaman dan sonra askeri zaman: 13:27 KurZaman dan sonra standart zaman: 1:27:06 PM Yanlış girdiden sonra: Askeri zaman: 00:00 Standard zaman: 12:00:00 AM

16.3 Class Alanı(Hedefi) ve Class Üyelerine Erişim Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 11 Class alanı Veri üyeleri ve Veri Fonksiyonlarına Erişim Dosya Alanı Üye olmayan fonksiyonlar Fonksiyon Alanı Üye fonksiyonlarda tanımlanan değişkenler, fonksiyon işi bitince yokedilirler Alan İçi Tüm üye fonksiyonlarca erişilebilinen üyeler İsim ile refere edilirler

16.3 Class Alanı(Hedefi) ve Class Üyelerine Erişim Alan dışı Bir kulp kullan Bir nesne adı, nesneye pointer veya nesneye referans Class üyelerine erişim struct daki gibidir Nesneler için nokta (.) veya pointer-lar için ok (->) Örnek: t.saat, t nin saat elemanıdır zamanptr->saat saat elemanıdır Nuri ÖZALP (ANKARA ÜNİVERSİTESİ) İLERİ PROGRAMLAMA SINIFLAR VE VERİ SOYUTLAMASI 12