Programlarımızda, iki veya daha fazla seçenekli koşul kontrolü sağlayan bir sistemi oluşturmak için if deyimini kullanabiliriz. Seçeneğin fazla olduğu durumlarda, programın her durumda bütün if satırlarını tek tek kontrol etme zorunluluğundan dolayı, programın çalışmasını daha hızlı ve pratik bir duruma getirmek için if-else-if yapısını kullanabiliriz.
Switch kalıbı
Şimdi, C++’da çok seçenekli bir sistem sağlayan switch kalıbını incelemeye çalışalım. yelim. switch kalıbı bir ifadenin sonucuna bağlı olarak içinde yer alan herhangi bir seçenekteki işlem satırlarını çalıştıran bir kalıptır. Bu kalıbın genel yapısını birlikte inceleyelim:
Devamı...
C++’da karakter dizisi işlemleri için boş bir karakterle (‘\0’) sonlandırılan karakter dizilerinin yanı sıra, string veri türündeki sınıf nesnelerini de kullanabiliriz.
Aslında, string sınıfı, basic_string şablon sınıfını temel almaktadır. 8 bitlik karakter dizilerini destekleyen sınıfın adı string, geniş karakterli dizileri destekleyen sınıfın adı ise wstring’dir.
C++’da, boş bir karakterle (‘\0’) sonlandırılan karakter dizileri ile ilgili işlemler değer atama, kopyalama ve ekleme gibi işlemler cstring (string.h) başlık dosyasında yer alan fonksiyonlarla gerçekleştirilebilmektedir. Ancak, bu tür işlemleri yapmak için işlemciler kullanılamamaktadır. Bu işlemleri gerçekleştirmek için, string sınıfı ile işlemciler rahatlıkla kullanılabilir.
String sınıfını kullanmanın diğer önemli bir avantajı da, boş bir karakterle sonlandırılan karakter dizilerinde yaşanan boyut üzerinde işlem yapma sorunlarının yaşanmamasıdır.
String sınıfı kullanmanın sağladığı avantajlar:
-
Karakter dizileri işlemlerinde işlemciler kullanılabilir.
-
Karakter dizileri işlemlerinde boyut üzerinde işlem yapma sorunu yaşanmaz.
-
Algoritmaları da destekleyen string sınıfını programlarımızda kullanmak için, <string> başlık dosyasını programımıza eklememiz gerekir.
Birçok üye fonksiyon ve constructor fonksiyonu içeren string sınıfında en yaygın olarak kullanılan constructor fonksiyonlarının genel yapısı aşağıda gösterilmektedir:
Devamı...
İşaretçiler, bilgisayar belleğindeki belli bir adresin, genellikle bir değişkene ait, kaydedildiği ve kaydedilen bellek adresine doğrudan erişim sağlayan değişkenlerdir.
İşaretçi bildirimi
İşaretçilerin diğer değişkenlerden tek farkı başka bir değişkenin bellek adresini içeriyor olmasıdır. Aşağıdaki satır işaretçi bildiriminin genel yapısını göstermektedir:
veri-türü *değişken-adı;
Yukarıdaki satırda yer alan veri-türü ifadesi işaretçinin adresini gösterdiği değerin veri türünü, değişken-adı ifadesi ise işaretçinin adını göstermektedir. * işareti işaretçi değişken bildiriminde kullanılmaktadır. Aşağıdaki işlem satırı ip adlı int bir işaretçi değişkeni oluşturmaktadır:
Devamı...
C++’da, iki farklı giriş/çıkış (I/O) sistemi kullanılabilmektedir:
C++ giriş/çıkış sisteminin temel özelliği nesneye yönelik programlamaya uygun olarak çalışabilmesidir.
C tabanlı giriş/çıkış (I/O) sistemi
Bu sistemde, klavyeden girilen verilerin okutulması ve verilerin ekrana yazılması için, aşağıdaki tabloda gösterilen fonksiyonlar kullanılır:
C tabanlı giriş/çıkış sisteminde kullanılan kütüphane fonksiyonları
| Fonksiyon adı |
Amacı |
Başlık dosyası |
| getchar() |
Klavyeden girilen bir karakteri okur. |
cstdio (stdio.h) |
| putchar() |
Bir karakteri ekrana yazar. |
cstdio (stdio.h) |
| getche() |
Klavyeden girilen bir karakteri okur (ENTER tuşuna basmaya gerek yoktur). |
conio.h |
| getch() |
Klavyeden girilen bir karakteri okur (Karakter ekrana yazılmaz). |
conio.h |
| fgets() |
Klavyeden girilen karakter dizilerini okur. |
cstdio (stdio.h) |
| fputs() |
Karakter dizilerini ekrana yazar. |
cstdio (stdio.h) |
| printf() |
İlk parametresindeki kontrol dizisi içindeki format tanımlayıcılarına uygun olarak diğer parametrelerinin değerlerini ekrana yazar. |
cstdio (stdio.h) |
| scanf() |
İlk parametresindeki kontrol dizisi içindeki format tanımlayıcılarına uygun olarak diğer parametrelerinin değerlerini klavyeden okur. |
cstdio (stdio.h) |
C++ tabanlı nesneye yönelik giriş/çıkış (I/O) sistemi
C++ I/O sistemi akışlar aracılığıyla çalışır. Akış, bilgi üreten veya kullanan mantıksal bir aygıt olarak tanımlanabilir. Bir akış, I/O sistemi tarafından fiziksel bir cihaza bağlanır. Bağlı oldukları gerçek fiziksel cihazlar farklı olsa bile tüm akışların çalışma şekli aynıdır. Tüm akışlar aynı şekilde çalıştığından, aynı I/O fonksiyonları hemen hemen her tür fiziksel aygıtta çalışabilir. Örneğin, bir dosyaya veri yazmak için kullandığımız bir fonksiyonu bir yazıcıya veya ekrana yazmak için de kullanabiliriz.
C++ I/O sistemi fonksiyonları ile sınıf bildirimleri <iostream> başlık dosyasında yer alır.
I/O sınıf bildirimleri şablon sınıflarla başlar. Bir şablon sınıf tanımlandıktan sonra, biri 8 bitlik karakterler ve diğeri geniş karakterler olmak üzere iki farklı şablon fonksiyonu için yeniden bildirim yapılır.
En sık çalışılan sınıflar, basic_ios sınıfından türetilmiştir. Bu, akış I/O ile ilgili biçimlendirme, hata kontrolü ve durum bilgileri sağlayan üst düzey bir I/O sınıfıdır. Basic_ios sınıfı, basic_istream, basic_ostream ve basic_iostream gibi türetilmiş sınıfların türetilmesinde ana sınıf olarak kullanılır. Bu sınıflar sırasıyla giriş, çıkış ve giriş/çıkış yapabilen akışlar oluşturmak için kullanılır.
C++ I/O sistemi şablon sınıfları
| Şablon sınıfı |
Türetilen şablon sınıfı |
| basic_streambuf |
streambuf |
| basic_ios |
ios |
| basic_istream |
istream |
| basic_ostream |
ostream |
| basic_iostream |
iostream |
| basic_fstream |
fstream |
| basic_ifstream |
ifstream |
| basic_ofstream |
ofstream |
C tabanlı dosya giriş/çıkış (I/O) sistemi
Dosya sistemi farklı donanım elemanları ile çalışma olanağı sağlar. Bu donanım elemanı bir klavye, ekran, disk sürücü veya bilgisayarda kullanılan bir port olabilir.
Dosya giriş çıkış işlemlerinin temelini, bilgisayarı oluşturan aygıtlar için mantıksal bir arabirim görevi yapan, Akış adı verilen bir kavram oluşturur. Genel bir ifade ile, akış bir dosyaya ulaşmak için kullanabileceğiniz mantıksal bir arabirimdir. Ancak burada kullanılan dosya ifadesi, diske kaydedilebilen bir dosyayı ifade etmekle birlikte, ekran ve klavye gibi donanım elemanlarından birini de ifade edebilir. Dosyaların yapıları veya kapasiteleri farklı olabilir, ancak akışların tamamı aynıdır. Bu özellik, donanım elemanlarını benzer şekilde tanımlama olanağı sağlar. Yani, dosya sistemi bu farklı donanım elemanlarını akış vasıtası ile benzer elemanlar gibi kullanabilir. Böylece, disk üzerindeki bir dosyaya yazı yazmak için kullandığınız fonksiyonları, aynı zamanda ekrana ve yazıcıya yazı yazmak için de kullanabiliriz.
C++ tabanlı nesneye yönelik dosya giriş/çıkış (I/O) sistemi
Dosya giriş/çıkış işlemlerini gerçekleştirmek için programlarımızın başına <fstream> başlık dosyasını eklememiz gerekir. Bu dosyada ifstream, ofstream ve fstream sınıflarının da yer aldığı bazı sınıf bildirimleri yer alır. Bu sınıflar sırasıyla, ios sınıfından türetilen istream, ostream ve iostream sınıflarından türetilmiş olduğundan, ios sınıfı içindeki tüm değişken ve fonksiyonlara erişim sağlayabilirler.
C++ dosya I/O sistemi şablon sınıfları
| Ana sınıf |
Türetilmiş sınıf |
Türetilenden türetilmiş sınıf |
| ios |
istream |
ifstream |
| ostream |
ofstream |
|
| iostream |
fstream |
|
C++’da, fonksiyon bir veya daha fazla işlem satırından oluşan kodların bir kod bloğu şeklinde yapılandırılması ile oluşturulur. Fonksiyonlar oluşturulduktan sonra programın herhangi bir yerinden sadece fonksiyon adı kullanılarak çağrılabilir. Bu sayede, çok fazla sayıda işlem satırı tek bir isim kullanılarak çalıştırılmış olur.
Fonksiyon yapısı
Fonksiyon, eğer varsa, kendisine geçirilen parametreleri de kullanarak kod bloğu içindeki işlem satırları ile bir takım işlemler yaparak bir sonuç elde eder. Elde edilen sonuç, ihtiyaca bağlı olarak, fonksiyon içinde ya da return komutu ile geri döndürüldükten sonra program içinde kullanılır.
Devamı...
Tek bir işlem satırını veya kod bloğunu bir defadan fazla çalıştırmak için tekrar yazmak yerine, daha pratik bir uygulama olan döngü kavramını kullanabiliriz.
Bir veya birden fazla işlem satırını, bir koşula bağlı olarak, belirli sayıda veya bir koşul sağlandığı sürece tekrarlayarak çalıştıran kalıplara döngü adı verilir.
C++’da, for, while ve do while olmak üzere 3 farklı döngü kullanılmaktadır.
for döngüsü
C++’da kullanılan 3 adet döngüden bir tanesi for döngüsüdür. Programların yazılmasında çok büyük kolaylık sağlar. for döngüsü tek bir işlem satırını veya birden fazla işlem satırından oluşan bir kod bloğunu programcının istediği sayıda tekrar etmek için kullanılır. for döngüsünün genel yapısı aşağıda gösterilmektedir:
Devamı...
Diziler aynı veri çeşidinden olan değişkenlerin aynı isim altında tanımlanması olarak ifade edilebilir. Diziler kullanılarak, aynı isimle birden fazla değişkene erişilebilir ve işlem yapılabilir.
Diziler tek ya da çok boyutlu olarak tanımlanabilir ve dizi boyutu ihtiyaca göre ayarlanabilir.
Diziler belirli bir veri türünden tanımlanabileceğinden, dizilerde sadece aynı veri türünden değişken değerleri yer alabilir.
Tek boyutlu diziler
C++’da, aynı veri tipinden olan değişkenleri tek bir isim altında toplayarak tek boyutlu diziler oluşturabiliriz. Programlarda, aynı veri türünden ve farklı isimlere sahip çok fazla sayıda değişken tanımlamak yerine, dizi bildirimi yapmak suretiyle sadece tek isim kullanarak aynı sayıda değişken tanımlamak daha pratik bir sistem ve kolaylık sağlar. Dizi tanımlandığında, dizinin her bir elemanına dizi adı ile birlikte 0’dan başlayarak kullanılan indeks değeri ile erişim sağlanır.
Tek boyutlu dizi bildirimi
Tek boyutlu dizilerin bildirimi için kullanılan genel yapı aşağıda gösterilmektedir:
Devamı...
C++ I/O sistemi akışlar aracılığıyla çalışır. Akış, bilgi üreten veya kullanan mantıksal bir aygıt olarak tanımlanabilir. Bir akış, I/O sistemi tarafından fiziksel bir cihaza bağlanır. Bağlı oldukları gerçek fiziksel cihazlar farklı olsa bile tüm akışların çalışma şekli aynıdır. Tüm akışlar aynı şekilde çalıştığından, aynı I/O fonksiyonları hemen hemen her tür fiziksel aygıtta çalışabilir. Örneğin, bir dosyaya veri yazmak için kullandığımız bir fonksiyonu bir yazıcıya veya ekrana yazmak için de kullanabiliriz.
Akış sınıfları
C++ I/O sistemi fonksiyonları ile sınıf bildirimleri <iostream> başlık dosyasında yer alır.
I/O sınıf bildirimleri şablon sınıflarla başlar. Bir şablon sınıf tanımlandıktan sonra, biri 8 bitlik karakterler ve diğeri geniş karakterler olmak üzere iki farklı şablon fonksiyonu için yeniden bildirim yapılır.
C++ I/O sistemi, birbiriyle ilişkili ancak farklı iki şablon sınıfı hiyerarşisi üzerine kurulmuştur.
Birincisi, basic_streambuf adı verilen düşük seviyeli I/O sınıfından türetilmiştir. Bu sınıf, temel, düşük seviyeli giriş ve çıkış işlemlerini ve tüm C++ I/O sistemi için temel desteği sağlar. Gelişmiş I/O programlama yapmadığımız sürece, doğrudan basic_streambuf kullanmamıza gerek kalmayacaktır.
En sık çalışılan sınıflar ise, basic_ios sınıfından türetilmiştir. Bu, akış I/O ile ilgili biçimlendirme, hata kontrolü ve durum bilgileri sağlayan üst düzey bir I/O sınıfıdır. Basic_ios sınıfı, basic_istream, basic_ostream ve basic_iostream gibi türetilmiş sınıfların türetilmesinde ana sınıf olarak kullanılır. Bu sınıflar sırasıyla giriş, çıkış ve giriş/çıkış yapabilen akışlar oluşturmak için kullanılır.
Aağıdaki listede 8 bit ve geniş karakterler için kullanılan şablon sınıf isimleri yer almaktadır:
| Şablon sınıfı |
8 bit karakter şablon sınıfı |
Geniş karakter şablon sınıfı |
| basic_streambuf |
streambuf |
wstreambuf |
| basic_ios |
ios |
wios |
| basic_istream |
istream |
wistream |
| basic_ostream |
ostream |
wostream |
| basic_iostream |
iostream |
wiostream |
Ön tanımlı akışlar
Bir C++ programı çalışmaya başladığında, dört adet akış otomatik olarak açılır.
C++ tabanlı nesneye yönelik I/O sistemi şablon sınıfları
| Akış |
|
Görevi |
Aygıt |
| 8 bit karakter |
Geniş karakter |
|
|
| cin |
win |
Standart veri girişi |
Klavye |
| cout |
wout |
Standart çıkış |
Ekran |
| cerr |
werr |
Standart hata çıkışı |
Ekran |
| clog |
wlog |
cerr tamponlanmış sürümü |
Ekran |
Normal olarak, standart akışlar klavye ve ekran ile işlem yapar. Ancak, ihtiyaç duyulduğunda, dosya veya diğer aygıtlara yönlendirilebilir.
Yapılandırılmış I/O
C++’da, giriş ve çıkış işlemlerinde verileri, alan genişliklerini ayarlayarak, sayıların hangi sayı sistemine göre gösterileceğini belirleyerek veya ondalık sayılarda noktadan sonra kaç rakam görüntüleneceğini belirleyerek, yapılandırabiliriz.
C++’da, verileri yapılandırmak için iki farklı yöntem izleyebiliriz.
-
ios sınıfının üyelerine doğrudan erişerek, sınıf içindeki üye fonksiyonları ve değişkenleri kullanabiliriz.
-
Manipülatörler adı verilen özel fonksiyonları kullanabiliriz.
ios sınıfı ile veri yapılandırma
Her akış, verinin yapılandırma şeklini kontrol eden bir dizi format işaretiyle ilişkilendirilmiştir. ios sınıfı içinde, aşağıdaki değerlerin tanımlandığı fmtflags adlı bir numaralandırma yer alır.
CodeBlocks 17.12 sürümünde ios_base.h başlık dosyasının içinde _Ios_Fmtflags isimli bir numaralandırma yapılmış ve typedef anahtar kelimesi ile fmtflags adlı bir veri türü tanımlanmıştır. Sonra, _Ios_Fmtflags içinde yer alan her bir değer için fmtflags veri türünden (numaralandırma) statik sabit bir değer oluşturulmuştur.
Bildirim
Devamı...
Konsol işlemleri klavye ve ekran ile gerçekleştirilen işlemleri kapsar. Bu bölümde, C temelli temel giriş çıkış fonksiyonları ele alınacaktır.
getchar() ve putchar() fonksiyonları
Klavyeden girilen bir karakteri okuyarak bellekteki bir değişkene atamak için getchar() fonksiyonu, ekrana tek bir karakter yazdırmak için ise, putchar() fonksiyonu kullanılır. stdio.h başlık dosyasını kullanan bu iki fonksiyonun genel yapısı prototipi aşağıda gösterilmektedir:
Devamı...
Sabitler, adından da anlaşılabileceği gibi, programlarda kullanılan değiştirilemeyen değerlerdir. Sabitler herhangi bir veri türünden tanımlanabilir. Sabitler genellikle programların başında değişkenlere bir ilk değer atama amacı ile veya farklı ifade oluşumlarının içinde kullanılabilir.
Farklı veri türünden yapılan sabit tanımlamaları aşağıda gösterilmektedir:
Devamı...
C++’da işlemci çoklu görev tanımlama işlemi yapılırken de çok biçimlilik özelliği kullanılır. Bir işlemci için çoklu görev tanımlama işlemi yapıldığında, işlemci, sahip olduğu özelliklerin yanı sıra, bir sınıfa bağlı olarak ek işlem yapma özelliği kazanır.
Bir işlemci için çoklu görev tanımlama işlemi yapıldığında yani birden fazla işlem yapma kapasitesi kazandırıldığında, işlemcinin orjinal fonksiyonu ortadan kalkmaz.
İşlemcilere çoklu görev tanımlama işlemi yapmak için işlemci fonksiyonları oluşturulur. Bir işlemci fonksiyonu, çoklu görev tanımlama uygulanan işlemcinin bağlı olduğu sınıfa göre gerçekleştireceği işlemleri tanımlar.
İşlemci fonksiyonu operator anahtar kelimesi kullanılarak oluşturulur. İşlemci fonksiyonları, bir sınıfın üyesi olabilir veya olmayabilir. Üye olmayan işlemci fonksiyonları, sınıf için friend fonksiyon olarak tanımlanır. İşlemci fonksiyonlarının yapısı sınıf üyesi olma ve olmama durumuna göre farklılık gösterir.
Sınıf üyesi olarak tanımlanan işlemci çoklu görev tanımlama fonksiyonları
Sınıf üyesi olarak tanımlanan işlemci fonksiyonunun genel yapısı aşağıda gösterilmektedir:
Devamı...
İfade kavramının işlem yapan parçası olarak ifade edebileceğimiz işlemciler, ifade içinde yer alan değişken ve sabitlere işlem yaparlar. Belli gruplar altında sınıflandırabileceğimiz işlemcileri sıra ile incelemeye çalışalım:
Aritmetik işlemciler
C++ dilinde kullanılan 5 adet aritmetik işlemci aşağıda gösterilmektedir. İşlemciler öncelik sırasına göre sıralanmıştır:
C++ ilişkisel işlemcileri
| İşlemci |
Kullanma amacı |
| + |
Toplama |
| - |
Çıkarma |
| * |
Çarpma |
| / |
Bölme |
| % |
Bölme işleminde kalanı verme |
C++’da, işlemciler arasında öncelik sırası adı verilen bir kural vardır. İşlemci önceliği kavramının matematik derslerinde gördüğümüz konudan hiçbir farkı yoktur. Buna göre, eğer bir işlem satırında birden fazla işlemci kullanırsak, C++ işlemcilere öncelik sırasına göre işlem yapar. Bu şekilde işlem yapılınca, programlar bizim düşündüğünüzden farklı sonuçlar verebilir. Bazı işlemlerin önceliğini normal kuralların dışında belirlemek istediğimizde, işlemi parantez içine almak yeterlidir.
% işlemcisi dışında kalan bütün aritmetik işlemcilerini temel veri türlerinin tamamı ile birlikte kullanabiliiz. % işlemcisi ise bölme işleminin kalanını verdiğinden sadece int veri türü ile kullanılabilir.
- işlemcisini hem çıkarma işlemi, hem de sayıların negatif değerlerini göstermek için kullanabiliriz.
Şimdi, örneklerle öğrendiklerimizi incelemeye çalışalım:
Örnek
Devamı...
C++’da, bazı durumlarda belirli işlem satırlarının istenen koşullar sağlandığında çalışması gerekebilir. Bu koşulları devreye sokmaya yarayan program yapılarına Program Kontrol Terimleri adı verilir.
Belirlediğimiz koşullar sağlandığında çalışmasını istediğimiz işlem satır veya satırlarını programlarımıza ekleyebiliriz. Tanımlanan koşul sağlandığında, koşula bağlı olarak tanımlanan işlem satır veya satırları devreye girecek aksi takdirde, bu satırları işlem yapmadan atlayacaktır. Tanımlanan koşul sağlanmadığında, söz konusu işlem satır veya satırları programda hiç yer almamış gibi işlem görür. Koşula bağlı olarak devreye giren işlem satırları programlarımızda çok büyük kolaylık ve esneklik sağlayacaktır.
If işlem satırı
Koşula bağlı işlem satırı veya satırları çalıştırma olanağı sağlayan deyimlerden bir tanesi ve belki de en sık kullanılanı if deyimidir. Bir if deyiminin genel yapısı aşağıda gösterilmektedir:
Devamı...
İfade (expression) adı verilen yapı içinde, program değişken ve sabitlerden oluşan verilere işlemciler yoluyla bir işlem yapar. Artık, ifadeleri oluşturan veri kavramını incelemeye başlayabiliriz.
Veri türleri
C++’de aşağıda gösterilen 7 temel veri çeşidi vardır:
C++ temel veri türleri
| Anahtar kelime |
Veri türü |
| bool |
İkili |
| char |
Karakter |
| int |
Tamsayı |
| float |
Kayan noktalı sayı |
| double |
Çift duyarlıklı kayan noktalı sayı |
| void |
Değersiz |
| wchar_t |
Geniş karakter |
Veri türü değiştiricileri (modifiers)
Sadece char, int ve double veri türlerinin önüne aşağıda gösterilen değiştiricileri koyarak, veri tiplerinin işaret (+/-) durumunu, byte olarak boyutlarını ve sınırlarını değiştirebiliriz. C++’da kullanılan veri türü değiştiricileri ve uygulandıkları veri türleri aşağıda gösterilmektedir:
C++ veri türü değiştiricileri
| Değiştirici |
Uygulandığı veri türü |
| signed |
char, int |
| unsigned |
char, int |
| long |
int, double |
| short |
int |
Değişken tanımlamalarında signed değiştirici ifadesi kullanıldığında, tanımlanan değişkenin ikili sayı sistem değeri içinde en üst sırada yer alan bit’i işaret bit’i olarak kullanılır. Bu değer 0 olursa sayı pozitif, 1 olursa sayı negatif olur. Ancak, bu durumda bir bit sayının işaretini belirlemek için ayrıldığından tanımlanan değişkene atanacak değer otomatik olarak azalır.
Bilgisayarlarda, bir sayının ikili sayı sisteminde gösteriminde en solda yer alan bit, sayının negatif veya pozitif olduğunu göstermek üzere, işaret bit’i olarak kullanılır.
Pozitif bir sayıyı negatif bir sayıya çevirmek için, sayıdaki bütün bit değerlerinin tersi alınır ve elde edilen sayıya 1 değeri eklenir.
Biri signed diğeri unsigned olan iki adet char ve iki adet short int veri türünden değişken tanımlayalım:
Devamı...
Bir C++ programında, genel olarak aşağıda gösterilen bölümler sırayla yer alır. Başlık dosya bildiriminden sonraki sıralama değiştirilebilir. Programda mutlaka tanımlanması tek bölüm main() fonksiyonudur. Bunun dışındaki bölümlerin tanımlanması tamamen ihtiyaca bağlıdır.
- Başlık dosya bildirimleri
- Ana sınıf bildirimleri
- Ana sınıflardan türetilmiş sınıf bildirimleri
- Ana sınıf üye fonksiyon ana yapıları
- Türetilmiş sınıf üye fonksiyon ana yapıları
- Sınıf üyesi olmayan fonksiyon bildirimleri
- main() fonksiyonu
- Sınıf üyesi olmayan fonksiyon ana yapıları
Bir C++ programının temel yapısı aşağıda gösterilmektedir:
Devamı...
C++ dilinde farklı amaçlarla kullanılmak üzere tahsis edilmiş olan kelimelere anahtar kelimeler denir. ANSI standartlarına göre C++’da kullanılmakta olan toplam 63 adet anahtar kelime vardır. Bu kelimeler değişken ve fonksiyon adı olarak kullanılamaz.
C++ anahtar kelimeleri
| asm |
auto |
bool |
break |
case |
catch |
char |
class |
const |
const_cast |
| continue |
default |
delete |
do |
double |
dynamic_cast |
else |
enum |
explicit |
export |
| extern |
false |
float |
for |
friend |
goto |
if |
inline |
int |
long |
| mutable |
namespace |
new |
operator |
private |
protected |
public |
register |
reinterpret_cast |
return |
| short |
signed |
sizeof |
static |
static_cast |
struct |
switch |
template |
this |
throw |
| true |
try |
typedef |
typeid |
typename |
union |
unsigned |
using |
virtual |
void |
| volatile |
wchar_t |
while |
|
|
|
|
|
|
|
C++’de bütün anahtar kelimeler küçük harfle yazılmalıdır. Aksi takdirde derleyiciler tarafından tanınmazlar.
bool veri türü, sadece doğru ya da yanlış olmak üzere 2 değer alabilen Boolean değerler için kullanılır.
wchar_t veri türü, 255’ten daha fazla karakter içeren diller için kullanılır.
main() fonksiyonu ve diğer fonksiyonlarda yer alan ve noktalı virgül (;) karakteri ile sona eren satırlara işlem satırı adı verilir. Şimdi, işlem satırlarının hangi değerlerden oluşabileceğini incelemeye çalışalım:
İşlem satırı bir değişken bildirimi, değişkene bir değer atama, aritmetik bir ifade, bir fonksiyon çağrısı veya bir döngü içerebilir.
Devamı...
C++ dilinde bilgisayar belleğinin bir kısmına belirli bir isim vererek bu bellek alanını kendimiz için ayırabilir ve bu alana değerler yerleştirebiliriz. Bu değerleri de istediğimiz zaman değiştirebiliriz.
Bu işlemlere değişken bildirimi ve değişkene değer atama işlemleri diyoruz.
Değişken bildirimi
Bir değişken bildirimi yaparak, bilgisayarın belleğinde belirli büyüklükte bir alanı kendimize ayırabiliriz. Bu bellek boyutu değişken veri türüne göre değişecektir. Bu işlemi yaptığımızda belleğin belirli bir bölümü bizim için ayrılmış olur.
Değişken bildirimi aşağıda gösterilen 3 farklı yerde yapılabilir:
- Lokal değişkenler: Fonksiyonların içinde
- Parametre olarak tanımlanan değişkenler: Fonksiyon parametresi olarak
- Global değişkenler: Tüm fonksiyonların dışında
C++ programlama dilinde, bir değişken ifade içinde kullanılmadan önce mutlaka bildirimi yapılmalı ve bir değer atanmalıdır. Bu bildirim işlemi, ister main() ister başka bir fonksiyon içinde olsun fonksiyonun veya kod bloğunun herhangi bir satırında yapılabilir.
Bir değişken bildirimi aşağıdaki şekilde görüldüğü gibi yapılır:
veri-türü değişken-adı;
Değişken bildiriminin bir işlem satırı ile yapıldığından bahsetmiştik. Bu nedenle noktalı virgül (;) ile sona erer. veri-türü ifadesi bildirimi yapılan değişkeninin veri türünü, değişken-adı ifadesi ise değişkenin adını göstermektedir.
Değişken bildiriminde değişken-adı ifadesi yerine kullanılacak değişken adları, sizin verebileceğiniz herhangi bir ad olabilir. Bu ad harflerden, rakamlardan ve (_) işaretinden oluşan bir karakter dizisi olmalıdır. C++, küçük ve büyük harflere farklı işlem yapar. FD ve fd olarak verilen değişken adları birbirinden tamamen farklı olarak kabul edilir.
Aşağıdaki işlem satırlarından birincisi id adlı int, ikincisi fd adlı float ve üçüncüsü dd adlı double bir değişken bildirimi yapar:
Devamı...
Kaynak kodlarının bulunduğu dosyaların içine bazen programın daha kolay anlaşılması için açıklayıcı satırlar eklenebilir. Bu satırlara “Yorum Satırı” adı verilir. Yorum satırlarının yazılan programla herhangi bir ilgisi yoktur. Sadece, programı inceleyenlerin, programı daha kolay bir şekilde anlamalarına yardımcı olur. Ayrıca, geçici olarak iptal etmek istediğiniz işlem satırlarını silmeden devre dışı bırakmak için de yorum satırı kavramını kullanabiliriz. Yorum satırlarına derleyici tarafından kesinlikle herhangi bir işlem yapılmaz ve hiç yokmuş gibi işlem görür.
C++’da 2 farklı şekilde yorum satırı oluşturabiliriz:
/* ve */ işaretleri ile
Yorum satırı veya satırları /* işaretleri ile başlar ve */ işaretleri ile sona erer. Bu tanımlamada birden fazla yorum satırı eklenebilir.
// işareti ile
Yorum satırı // işareti ile başlar. Bu tanımlamada tek satırlık yorum eklenebilir.
Örnek
Devamı...
C++’da, bir veri türünü diğer bir veri türüne dönüştürerek kullanabiliriz. Veri türü dönüşümü adı verilen bu işlem iki farklı şekilde yapılabilir:
-
Üstü kapalı (Implicit) dönüştürme
-
Açık (Explicit) dönüştürme
Açık veri türü dönüştürme geçici veri türü dönüştürme (Type casting) olarak adlandırabiliriz. Çünkü, veri türü değiştirilen değişken değeri, farklı bir değişkene aktarılırken, kendi değeri aynı veri türünde kalmaktadır.
Üstü kapalı (Implicit) veri türü dönüştürme
Otomatik dönüştürme olarak ta bilinen üstü kapalı veri türü dönüştürme işlemi derleyici tarafından otomatik olarak yapılır.
Şimdi, bu özelliği bir örnek üzerinde incelemeye çalışalım:
Örnek
Devamı...