C++’A GİRİŞ Yılmaz Kılıçaslan.

Slides:



Advertisements
Benzer bir sunumlar
MAP SINIFI. MAP C + + da Haritalar değer çiftlerini benzersiz anahtar içeren birleşmeli konteyner olarak sıralar. Haritalar onların anahtarlarına göre.
Advertisements

Dizi Kullanan Örnekler
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
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 4 İşlevlerve Modüler Programlama. 1 / 8 İşlev Tanımı /* İşlev açıklama satırı */ ( ) { }
Tanım ANSI C dizgisi (string) bir karakter dizisidir (array of characters) Örnek dizgi tanımları: #define UYARI_DIZGISI “Veri giris hatasi” #define DIZGI_BOYU.
Nesneye Dayalı Programlama
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
C++ STACK SINIFI.
SANAL FONKSİYONLAR VE ÇOK BİÇİMLİLİK
Bölüm 10 Yapılar ve Birleşimler
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
INPUT/OUTPUT FORMATİNG
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
Nesneye Dayalı Programlama
Derleyici Araçları FLEX & BISON
C++ Yapısı Giriş-Çıkış Komutları Döngü Komutları
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Paralel Programlamaya Giriş
Nesne Yönelimli Programlama Dersi
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.
Derleyici Teorisine Giriş
DÖNGÜLER.
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Dizi Elemanlarının Sıralanması
Nesneye Dayalı Programlama
C++’a Giriş Yılmaz Kılıçaslan.
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.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Bölüm 2 - C ile Programlamaya Giriş Başlıklar 2.1Giriş.
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.
SANAL FONKSİYONLAR VE ÇOKBİÇİMLİLİK Yılmaz Kılıçaslan.
BAĞLAMA DUYARLI GRAMERLER
C++ Ders Notları 2.Ders (Dilin Yapısı)
C++ Ders Notları 3.Ders (String İşlemleri)
C++.
Paralel Programlamaya Giriş 2
Paralel Programlamaya Giriş
Bölüm 9 Kütükler (files). 1 Kütükler Metin Kütükleri (text files) –Örneğin bir metin düzenleyici ile oluşturulmuş, –İkincil saklama birimlerine kaydedilen,
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
Sistem Belirli bir ya da daha fazla amaç (goal) için bir araya getirilmiş fiziksel ya da kavramsal bileşenlerden oluşan bir bütündür.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
2. HAFTA 2. Hafta.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
3. HAFTA 3. Hafta.
Kümeleme Algoritmaları
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
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR programlama II
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
Bilgisayar Programlama III C
Hafta2 Rekürsif Algoritmalar
Algoritma ve Programlama
C Programlama Dili Bilgisayar Mühendisliği.
Bölüm 2 - C ile Programlamaya Giriş
C’de Fonsiyonlar Aslı Ergün.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
DİL ÇEVRİMİ Yüksek düzeyli bir dilde yazılmış bir program ancak makine diline çevrilerek bir bilgisayarda çalıştırılabilir.
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
Sunum transkripti:

C++’A GİRİŞ Yılmaz Kılıçaslan

C DİLİNİN BİR ÜST-KÜMESİ OLARAK C++ Genel olarak, C’de mevcut olan her şey C++’da da vardır. Fakat, C++ mevcut özellikler üzerinde yapmış olduğu konvansiyonel nitelikte iyileştirmeler ve eklemiş olduğu yaklaşım değiştirici nitelikte özellikler ile C dilinden daha büyük bir kümeyi kapsar.

INPUT-OUTPUT İÇİN STREAM KULLANILMASI-cout C++ input (giriş) ve output (çıkış) işlemleri için “stream (byte’ların dizisi şeklinde veri transferi)” olarak bilinen mekanizmalar kullanır. Standart output stream’i cout ismiyle adlandırılır: #include <iostream> using namespace std; int main() { cout << “Merhaba!”; return 0;} Örnekte, C’den farklı olarak; stdio.h yerine iostream.h printf yerine cout ve bit-tabanlı sola kaydırma operatörü (<<) kullanılmıştır.

INPUT-OUTPUT İÇİN STREAM KULLANILMASI-cout C++’da çıktı için format string’ine ihtiyacınız yoktur: #include <iostream> using namespace std; int main() { int miktar = 123; cout << miktar; return 0; } C dilinde -> printf(“%d”, miktar); cout stream’i farklı veri tiplerinin ayırdındadır ve onları doğru olarak yorumlayabilir: cout << “Miktar:” << miktar << “.”;

INPUT-OUTPUT İÇİN STREAM KULLANILMASI-manipülatörler C++ çıktılarını da “manipulatörler” aracılılığıyla formatlamak mümkündür. Aşağıdaki program manipülatör kullanarak tamsayılar (integers) için varsayılan formatı nasıl değiştirebileceğimizi örneklemektedir: #include <iostream> using namespace std; int main() { int miktar = 123; cout << “decimal değeri:” << dec << miktar << “\n”; cout << “octal değeri:” << oct << miktar << endl; cout << “hexadecimal değeri:” << hex << miktar << “\n”; return 0; } Program çıktısı nedir?

PROGRAM ÇIKTISI decimal değeri:123 octal değeri:173 hexadecimal değeri:7b

INPUT-OUTPUT İÇİN STREAM KULLANILMASI-cin C++’ın standard input stream’i ise cin olarak adlandırılır. Aşağıdaki program klavyeden bir tamsayının nasıl girdi olarak alınacağını göstermektedir: #include <iostream> using namespace std; int main() { int miktar = 123; cout << “Bir miktar girin...\n”; cin >> miktar; cout << “Girdiğiniz Miktar: “ << miktar; return 0; }

INPUT-OUTPUT İÇİN STREAM KULLANILMASI-cin cin diğer tipte veri girişleri için de kullanılabilir: #include <iostream> using namespace std; int main() { char isim[20]; cout << “Bir isim girin...\n”; cin >> isim; cout << “Girdiğiniz İsim: “ << isim; return 0; }

AÇIKLAMALAR (COMMENTS) C++, C’de çoklu satır açıklamasında kullanılan /* ... */ açıklama formatına ek olarak, tek-satır açıklamaları için // işaretinin kullanımına izin vermektedir. // C++’da Açıklama Yazılması #include <iostream> using namespace std; int main() { char isim[20]; // Karakter katarı bildirimi cout << “Bir isim girin...\n”; //İsim giriş isteği cin >> isim; //İsmin okunması cout << “Girdiğiniz İsim: “ << isim; return 0; }

FONKSİYON PROTOTİPLERİ Fonksiyon prototipi, fonksiyonun ismini, döndüreceği değeri, parametrelerin sayısını ve tipini tanımlar. C++, eğer çağrılmadan önce tanımlanmamışsa, her fonksiyon için prototip bildirimi ister. #include <iostream> using namespace std; void goruntule(char *s); //Fonksiyon prototipi int main() { goruntule(“Merhaba!”); return 0; } void goruntule(char *s) { cout << s; }

VARSAYILAN FONKSİYON ARGÜMANLARI-1 C++’da bir fonksiyon prototipinde bazı parametreler için varsayılan değerler belirlemek mümkündür. Fonksiyon çağrımı yaparken varsayılan değer almış argümanları belirtmezseniz derleyici otomatik olarak bu argümanlar için varsayılan değerleri kullanır. Eğer kendi argümanlarınızı kullanırsanız, derleyici varsayılanlar yerine onları kullanır. Bir argümanı belirtmez iseniz sağındaki diğer argümanları da belirtmemelisiniz: f( , 3.45); // Error

VARSAYILAN FONKSİYON ARGÜMANLARI-1 #include <iostream> using namespace std; void f(int i=5, double d=1.23);//Fonksiyon prototipi int main () { // Fonksiyon Çağrımları f(12, 3.45); f(3); f(); return 0; }

VARSAYILAN FONKSİYON ARGÜMANLARI-2 Aşağıdaki programın çıktılarını belirleyiniz: #include <iostream> using namespace std; void show( int = 5, float = 2.3, long = 4 ); int main() { show(); show(5); show(6,7.8); show(9,10.11,12L); return 0;} void show(int first, float second, long third) { cout << “\nfirst = “ << first; cout << “, second = “ << second; cout << “, third = “ << third; }

PROGRAM ÇIKTISI: first :5, second :2.3, third :4 first :6, second :7.8, third :4 first :9, second :10.11, third :12

DEĞİŞKEN BİLDİRİMLERİNİN YERİ - 1 C’de değişken bildirimlerini blok başında yapmanız beklenir. C++’da ise referansta bulunmadan önce olmak koşuluyla bir değişkenin bildirimini kodun herhangi bir yerinde yapabilirsiniz. int main() { cout << “Bir sayı girin...\n”; int sayı; cin >> sayı; cout << “Girdiğiniz Sayı: “ << sayı; return 0; }

DEĞİŞKEN BİLDİRİMLERİNİN YERİ - 2 Aşağıdaki ifade doğrudur. for (int ctr = 0; ctr < MAXXTR; ctr++) Fakat, aşağıdaki ifadeler hatalıdır: if( int i == 0 ) // Error while( int i == 0 ) // Error

DEĞİŞKEN BİLDİRİMLERİNİN YERİ - 3 Aşağıdaki örnekte bir değişken bildirimi bir blok içinde yapılmıştır: int main() { int satirNo; for( satirNo = 0; satirNo < 3; satirNo++ ) int temp = 22; cout << “\nSatir No:” << satirNo << “–Temp:” << temp; } cout << satirNo; // satirNo erisilebilir // cout << temp; // temp erisilemez return 0; Program çıktısı nedir?

KAPSAM ÇÖZÜMLEYİCİ OPERATÖR C’de yerel bir değişken aynı isimli global bir değişkene göre önceliklidir. Örneğin, hem bir yerel değişken hem de global bir değişken miktar ismiyle adlandırılmışsa ve yerel değişken referans kapsamı içinde ise miktar her kullanıldığında referans yerel değişkene yapılmış olur; yani, global değişken görünmez olmuştur. C++, bu tür durumlarda, global değişkene de erişime izin verir. Değişkenin önüne kapsam çözümleyici operatör olan :: işaretinin konulması halinde kullanılanın yerel değil global değişken olduğu anlaşılır. İç içe gömülmüş kapsam alanlarında :: bir üst kapsam alanındaki değişkenlere değil global değişkenlere erişim sağlar.

KAPSAM ÇÖZÜMLEYİCİ OPERATÖR - örnek #include <iostream> using namespace std; int miktar = 23; // Global Degisken int main() { int miktar = 456; // Yerel Degisken cout << ::miktar; cout << “\n”; cout << miktar; return 0; } Program çıktısı nedir?

INLINE FONKSİYONLAR - 1 C++’da gerçekte çağrılmayan, fakat her çağrı noktasında satır içerisinde genişleyen fonksiyonlar tanımlanabilir. C++’daki inline anahtar sözcüğü beraberinde kullanıldığı fonksiyonun bir kopyasının çağrıldığı her yere eklenmesini sağlar. Eğer, bir inline fonksiyonu programınızda 20 kez çağırıyorsanız, derleyici bu fonksiyonun 20 kopyasını .EXE dosyanıza ekleyecektir. Fonksiyon kopyalarının bu şekilde eklenmesi fonksiyon çağrımından doğan “overhead” zamanını ortadan kaldırarak programınızı hızlandıracaktır. Fakat, bir fonksiyonun birçok kopyasını yaratmak da program kodunuzun büyümesine yol açacaktır. Bu nedenle, inline niteleyicisi yalnızca fonksiyon çok kısa ise yada az sayıda çağrılıyorsa kullanılmalıdır.

INLINE FONKSİYONLAR – 1 - örnek #include <iostream> using namespace std; inline int max(int a, int b) { return a>b ? a : b; } int main() cout << max(10, 20); cout << " " << max(99, 88); return 0;

INLINE FONKSİYONLAR - 2 inline fonksiyonlar #define ile bildirimi yapılmış makrolara benzerler; fakat, makrolar basit bir metin değiştirici ile gerçeklenirken, inline fonksiyonlar derleyici tarafından tanınırlar. Derleyici tarafından tanınmanın avantajı, derleyicinin inline fonksiyonun parametreleri üzerinde tip kontrolü yapabilmesidir. Diğer avantajı ise, inline fonksiyonların sıradan fonksiyonlar gibi davranıp makroların neden olabileceği yan etkileri yaratmamasıdır:

INLINE FONKSİYONLAR - örnek #include <iostream> using namespace std; #define MAX( A, B ) ((A) > (B) ? (A) : (B)) inline int max(int a, int b) { if (a>b) return a; return b; } int main() { int i, x, y; x = 23; y = 45; i = MAX(x++, y++); // buyuk deger iki kez arttırıldı cout << "x = " << x << " y = " << y << "\n"; i = max(x++, y++); return 0;} Program çıktısı nedir?

PROGRAM ÇIKTISI x = 24 y = 47 x = 24 y = 46

const NİTELEYİCİSİ - 1 C gibi, C++ da değişkenleri sabitlere dönüştüren const niteleyicisini destekler. C’de const niteleyicisi, ilk değer ataması haricinde, değişkenin salt-okunur olduğunu belirtir. C++, bir adım daha ileri gider ve sabit bir ifade kullanılan her yerde bir const ifadesi kullanmanıza izin verir: #include <iostream> using namespace std; int main() { const int boyut = 5; char cs[boyut]; cout << “ cs dizininin buyuklugu: “ << sizeof cs; return 0;} Fakat, C++’da bile bir const değişkeninin ilk değerini sabit bir ifade haricinde bir şeyle belirleyemezsiniz. Örneğin, boyut değişkeni bir fonksiyon içinde bildirilmiş bile olsa, ilk değerini fonksiyonun bir parametresi üzerinden alamaz.

const NİTELEYİCİSİ - 2 const niteleyicisi işaretçi bildirimlerinde de kullanılabilir. Bu tür bildirimlerde niteleyicinin yeri önemlidir: char *const ptr = buf; // const işaretleyici *ptr = ‘a’; // legal ptr = buf2; // error Aşağıdaki bildirimlerin anlamı ise farklıdır: const char *ptr = buf; // const’a işaretleyici ptr = buf2; // legal *ptr = ‘a’; // error

const NİTELEYİCİSİ - 3 const niteleyicisi bir fonksiyonun parametrelerinden birinin değerini değiştirmesine engel olmak için de kullanılabilir: int salt_okur( const struct Node *nodeptr ); Bu prototip salt_okur fonksiyonunun parametresinin işaret etmiş olduğu Node topluluğunu değiştiremeyeceğini bildirmektedir. Fonksiyon içinde (sıradan) bir işaretçi bildirimi yapılmış bile olsa, parametre güvenceli olarak kalır; çünkü, salt-okur bir işaretçiyi sıradan bir işaretçiye atayamazsınız: int salt_okur( const struct Node *nodeptr ) { struct Node *writeptr; // sıradan işaretçi writeptr = nodeptr; // error }

STRUCTURES, UNIONS, ENUMERATIONS C++’da, structure, union yada enumeration olan bir veri tipinde değişken bildirirken struct, union ve enum anahtar sözcüklerinin kullanılmasını zorunlu değildir: C Formatı: struct addr addr_info; union u_type dönüştürücü; enum renk favori; C++ Formatı: addr addr_info; u_type dönüştürücü; renk favori;

int İÇİN VARSAYILAN DEĞER KULLANIMI C++’a son zamanlarda yapılan bir değişiklik de, veri tipi belirtilmemiş bildirimlerde veri tipinin int olması varsayımına izin verilmemesidir. C’de ve geleneksel C++’da varsayılan-int kuralının en yaygın kullanımını fonksiyonların döndürdükleri değer tiplerinin belirlenmesinde görüyoruz: func(int i) { return i*i; } Standart C++’da yukarıdaki fonksiyonun döndürdüğü değer tipinin int olacağı açıkça belirtilmelidir: int func(int i) Fakat, neredeyse bütün C++ derleyicileri varsayılan-int kuralını halen desteklemektedir.

Bool VERİ TİPİ C++ bool adlı bir boolean veri tipini desteklemektedir. bool tipinde nesneler yalnızca C++’nın anahtar sözcükleri içinde yer alan true ve false değerlerini alabilirler. Gerektiğinde bool değerlerini tamsayılara ve tamsayıları bool değerlerine dönüştüren otomatik dönüşümler uygulanmaktadır: sıfır olmayan değerler true değerine ve sıfır false değerine dönüştürülürken true 1’e ve false 0’a dönüştürülmektedir.

Bool VERİ TİPİ - örnek #include <iostream> using namespace std; bool IsEqual(int x, int y) { return (x == y); } int main() { cout << "Enter a value: "; int x; cin >> x; cout << "Enter another value: "; int y; cin >> y; bool bEqual = IsEqual(x, y); if (bEqual) cout << x << " and " << y << " are equal“ << endl; else cout << x << " and " << y << " are not equal“ << endl; return 0; }

AŞIRI YÜKLENMİŞ FONKSİYONLAR C++ aynı isimle birden fazla fonksiyon yaratılmasına izin verir: int kare(int x){ return x*x; } double kare(double x){ return x*x; } Değer atanmış parametreler bulunduran fonksiyonlarla aynı isimde farklı fonksiyonlar yaratmak bazen sorunlara yol açabilir: int f(int x); float f(int a, int b = 0); … int y = f(5);

AŞIRI YÜKLENMİŞ FONKSİYONLAR-ÖRNEK #include <iostream> using namespace std; void f1(int a); void f1(int a, int b); int main() { f1(10); f1(10,20); } void f1(int a) { cout << "f1 tek parametre\n"; } void f1(int a, int b) { cout << "f1 cift parametre\n"; }