C++ Nedir?

C++ Bjarne Stroustrup tarafından bell laboratuarlarında geliştirilen bir programlama dilidir.

C’nin gelişmiş hali olduğunu simgelemek için C’nin arttırma operatörünü (++) içerir.

C++’ın C’den en büyük farkı nesne yönelimli olmasıdır.

Nesne yönelimli programlama yazılım üretkenliğini, kalitesini ve tekrar kullanılabilirliğini arttırmaya imkan tanır.

İlk Örnek

Aşağıda C++ ile örnek bir uygulama gösterilmiştir. Uygulama kullanıcıdan aldığı iki sayıyı toplamakta sonucu ise ekrana yazdırmaktadır.

C dosyaları .c uzantısına sahiptirler. C++ dosyaları ise bir çok farklı uzantıya sahip olabilir. (.cpp, .cxx ve .C gibi.)

#include <iostream> standart kütüphaneden öncü dosya eklemek için kullanılan standart C++ tarzında yazılmıştır.

C++ önişlemcisi bu komutla giriş/çıkış stream öncü dosyası iostream’in içeriğini ekler.

Bu dosya , C++ tarzı akış giriş/çıkış’ını kullanarak ekrana veri gönderen veya klavyeden veri girişi alan her program için eklenmelidir.

int main() ile main’in bir tamsayı döndüreceği belirtilmektedir.

C++’da programcının geri dönüş veri tipini belirtmesi gerekir yoksa derleyici hata verir.

C++ Standart Kütüphanesi

  •  C++ programları iki temel yapı bloğu ile inşa edilirler:
    • Fonksiyonlar
    • Sınıflar (Verilen kullanıcı tarafından tanımlanmış veri tipleri)

 

  • C++’ı öğrenmek iki kısım içerir:
    •  Birincisi, C++ dilinin kendisini öğrenmek.
    • İkincisi, C++ standart kütüphanesindeki sınıf ve fonksiyonların kullanımını öğrenmek.

Header Dosyaları

Her standart kütüphane, kendi fonksiyonlarının prototiplerini ve bu fonksiyonların ihtiyaç duyduğu çeşitli veri tipleri ve sabit değerleri içeren bir öncü dosyaya sahiptir.

Programcı tarafından tanımlanmış öncü dosyalar .h ile sonlandırılmalıdır. #include önişlemci komutuyla eklenebilirler.

Örneğin square.h öncü dosyasını programımıza eklemek için:

Yukarıdaki komutu programımızın başına yazmamız gerekmektedir.

Inline İfadesi

C’deki programları fonksiyonlardan oluşmuş kümeler olarak yazmak faydalıdır. Fakat, fonksiyon çağrıları, çalışma zamanında fazladan yük getirir.

C++da fonksiyon çağrılarının getireceği yükü azaltmak için (özellikle küçük programlar için) satır içi fonksiyonlar kullanılır.

inline belirtecini fonksiyonun tanımlamasındaki geri dönüş tipinin önüne yerleştirilirse derleyiciye, o fonksiyonun bir kopyasını, fonksiyonun kullanıldığı yerde yaratması tavsiye edilmiş olur.

Derleyici o fonksiyonu bulur yerine yapıştırır bu şekilde gerçek bir fonksiyon çağrısından kaçınılmış olur.

Buradaki tercih, fonksiyona yapılan çağrıda kontrolü fonksiyonun tek bir kopyasına geçirmek yerine, fonksiyon kodunun bir çok kopyasını programın içine yerleştirecektir

Ve dolayısıyla programı daha fazla yer kaplar haline getirmektir.

Derleyici, inline belirtecini ihmal edebilir ve genellikle küçük fonksiyonlar haricindeki büyük fonksiyonlarda böyle yapar.

k değişkeninin for döngüsü içerisinde bildirildiğine dikkat edin. C++, programcıya bu imkanı veriyor.

C’de böyle bir imkanımız yoktu.

Referanslar ve Referans Parametreleri

Bir çok programlama dilinde fonksiyonlar ya değere göre ya da referansa göre çağrılırlar.

Bir argüman değere göre çağırma ile geçirildiği zaman, argümanın değerinin bir kopyası üretilir ve çağırıcı fonksiyona gönderilir.

Kopya üzerinde yapılan değişiklikler orijinal değişkenin çağırıcı içerisindeki değerini değiştirmez.

Bu istenmeyen yan etkileri önler. Daha önceki programlarda tüm argümanlar değere göre çağırma yöntemiyle gerçekleştirilmişti.

Referansa göre çağırma tekniğinde ise çağırıcı, çağrılan fonksiyona çağırıcının verisine doğrudan ulaşım imkanı sağlar.

İsterse, çağrılan fonksiyon orijinal değeri değiştirebilir.

Bir fonksiyon parametresinin referans ile geçirildiğini belirtmek için fonksiyon prototipinde parametrenin tipinden sonra & konur.

Aynı yöntem, fonksiyonun başlığında parametreleri yazarken de kullanılır.

Fonksiyon çağrısında değişkenin ismini kullanmak, onun referansa göre geçirilmesini sağlar.

Değişkeni çağrılan fonksiyonun gövdesinde parametre ismiyle kullanmak, aslında çağrılan fonksiyondaki orijinal değişkenden bahseder ve çağrılan fonksiyon tarafından orijinal değişken doğrudan değiştirilebilir. Her zaman olduğu gibi fonksiyonun prototip ve başlığı aynı olmak zorundadır.

degerIleKare ve referansIleKare fonksiyonlarına yapılan çağrılardaki argümanların benzer şekilde çağırıldıklarını görüyoruz.

Fonksiyon prototiplerini veya fonksiyon tanımlarmalarını incelemeden fonksiyonun kendi argümanını değiştirip değiştirmediğini sadece çağrıya bakarak söylemek mümkün değildir.

Çıktıdan görebileceğimiz üzere degerIleKare x’in değerini değiştirmezken, referansIleKare z’nin değerini değiştirdi.

Referanslar ayrıca bir fonksiyon içindeki diğer değişkenlere takma ad olarak da kullanılabilirler. Örneğin;

* Bir kez takma ad referans olarak tanımlandıktan sonra, takma ad üzerinde yapılan tüm işlemler aslında orjinal değişken üzerinde yapılır.

* Ne referansın adresini almak ne de referansları karşılaştırmak yazım hatasına yol açmaz.

* Dahası her işlem asında o takma adın referans olduğu değişken üzerinde yapılır.

* Fonksiyonlar referans döndürebilirler ama bu tehlikeli olabilir.

* Çağrılan fonksiyonda bildirilmiş bir değişkene referans geri döndürülürken, değişken o fonksiyon içinde static olarak bildirilmelidir.

* Yoksa, fonksiyon sona erdiğinde silinecek olan bir değişkene referans gösterilmiş olur.

* Böyle durumdaki değişlenlere tanımlanmamış denir ve programın davranışı tahmin edilemez.
(Bazı derleyiciler böyle durumlarda uyarı verirler).

* Tanımlanmamış değişkenleri gösteren referanslara, sallantılı referans (dangling referans) denir.

* Yukarıdaki program içerisinde int x = 3,&y; gibi bir bildirim yapsaydık şöyle bir hata alacaktık: