C++

C++ ( , telaffuz: si pılas pılas), Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

İlk olarak C With Classes (Sınıflarla C) olarak adlandırılmış, 1983 yılında ismi C++ olarak değiştirilmiştir. Günüzümüzde en çok kullanılan programlama dillerinden biri olmuştur.

C++ tasarlanırken C programlama dili ile olabildiğince uyumlu olması göz önüne bulundurulmuş ve K&R2'deki tüm örnek kodun derleneceği şekilde tasarlanmıştır.

C++, C'nin sağladığı alt seviye sıkı donanım desteğinin yanında farklı veri türleri, sınıf, template, sıradışı durum yönetimi, ad alanı (namespace), işleç fazladan yüklemesi, işlev fazladan yüklemesi, referans, hafıza yönetimi ve pek çok kütüphane imkanı sunar.

Tarihi
1979 senesinde bir Danimarkalı bilgisayar bilimci olan Bjarne Stroustrup, sonradan C++ olarak bilinecek olan " " üzerinde çalışmaya başladı. Onu yeni bir dil geliştirmeye iten şey, doktora tezini geliştirirkenki programlama deneyimiydi. Stroustrup, Simula'nın büyük yazılımlar geliştirmeye yardımcı olan pek çok özelliğe sahip olduğunu, fakat dilin pratikte kullanım için fazla yavaş kaldığını, BCPL'in ise hızlı ancak büyük yazılımlar geliştirmek için fazla alt-seviye olduğunu fark etti. Stroustrup AT&T Bell Labs'ta çalışmaya başladığında UNIX çekirdeğini dağıtık bir sistem olarak incelemeye başladı. Doktora deneyiminden yola çıkarak, C dilini Simula'nın özellikleriyle zenginleştirmek için yola çıktı. C dili seçildi çünkü genel amaçlı, hızlı, taşınabilir ve zaten yaygın olarak kullanılıyordu.

Başlangıçta, Stroustrup'un "C with Classes"ı sınıflar, türetilmiş sınıflar, güçlü türleme (strong typing), varsayılan fonksiyon argümanları (default argument) gibi özelliklerini bir C derleyicisi olan CPre'ye eklenmiştir.

1982'de Stroustrup C with Classes'ı daha da ileri taşıyan, pek çok diğer isimlendirmelerden sonra "C++" (++ C'deki artırma operatörüdür) olarak anılan dili geliştirdi. Sanal fonksiyon, fonksiyon adı ve operatör fazladan yüklenmesi, referanslar, sabit oluşturma (constant), tür-güvenli bellek tahsisi (new ve delete kullanarak), geliştirilmiş tür kontrolü, BCPL'deki gibi iki slash karakteriyle yapılan tek satırlık yorumlar (//) eklenen özellikler arasındaydı. Dahası, Stroustrup, C++ için yeni bir derleyici olan Cfront'u geliştirdi.

1984'te, Stroustrup ilk giriş/çıkış kütüphanesini gerçekledi. Bir isimli fonksiyon yerine çıkış operatörünün ( dönüş_tipi { fonksiyon_gövdesi }

Sıradışı durum yönetimi
Program çalışırken yolunda gitmeyen bir şey oluştuğunda ve programın aniden sonlandırılması arzu edilmiyorsa, sıradışı durum yönetimi (exception handling) kullanılarak ana koddan ayrı olarak yönetim sağlanabilir. Sıradışı durum (exception) oluştuğu yerde bir hata kodu fırlatır ve sıradışı durum yöneticisi (exception handler) tarafından yakalanana kadar kapsam dışana taşar. Eğer hata kodu yakalanmazsa program sonlandırılır.

Standard Kütüphane
C++ standard kütüphanesi, pek çok tutucu tür, algoritma, G/Ç, dosya sistemi, string, regex, multithread, metaprogramlama araçları, hafıza yönetimi, zaman yönetimi, sıradışı durum yönetimi, çeşitli matematik fonksiyonları, rastgele sayı üreteci, C ile geriye dönük uyumluluk başlık dosyaları bulundurur.

C++ Core Guidelines
C++ Core Guidelines (Türkçe, C++ Temel Yönelgeleri), C++ programcılarının daha basit, daha etkili, daha yönetilebilir kod yazmalarını sağlamayı hedefleyen yönelgeleri içeren bir projedir. Projenin editörlüğünü dilin yaratıcısı Bjarne Stroustrup ile ISO C++ Çalışma Grubu başkanı Herb Sutter sürdürür.

Core guidelines pek çok stil, iyi uygulama ve modern C++ tavsiyeleri bulundurur. Statik analiz araçları bu tavsiyeleri gerçekleyerek kod yazılırken programcıları kötü uygulamalardan kaçınmasına yardımcı olur.

Guideline Support Library (GSL), Core Guidelines'ta tavsiye edilen pek çok tür ve fonksiyonu barındıran bir kütüphanedir.

Derleme modeli
C++ çoğunlukla derlenen bir dil olarak gerçeklenmiştir. Kaynak kodun derlenme süreci dört aşamadan oluşur, sırasıyla; önişleme, derleme, assembly ve bağlama. Derleyici kaynak koda uygulandığında bu aşamalar birbiri ardına gerçekleşir.

Önişlemci (preprocessor) #include direktifiyle eklenen dosyaları koda taşır. Ayrıca kodda sözcük değişiklikleri yapabilir, koşullu derleme sağlayabilir, derleyicinin bir takım özelliklerini kontrol edebilir veya kodun derleneceği platform hakkında bilgi alabilir.
Derleyici (compiler veya compiler proper) kodu tarar, parçalara ayırır, sözdizimi ve anlamı analiz eder, hataları bildirir, optimize eder ve işlemcinin sahip olduğu mimarinin assembly koduna derler.
Assembly kodu assembler tarafından yerdeğiştirebilir (relocatable object code) hedef koduna dönüştürülür.
Bağlayıcı (linker) yerdeğiştirebilir hedef kodunu diğer hedef kodlarına (geliştirilen veya önceden derlenmiş sistem kütüphanleri vd.) bağlar ve çalıştırılabilir hedef kodunu oluşturur.

Örnekler
Değişkenler
Değişkenlerin bir programda çalıştırmak için değişkenlerin veri türünü belirtmek gereklidir (örneğin, int, char, double, bool, std::string) ancak C++11'de auto anahtar kelimesi eklendiği için değişkenin veri türünü belirtmek gerek yoktur.

include
include

int main(){
// Değişkenleri oluşturmak
int integer = 32;
double doubleNum = 4.2;
bool want = true;
std::string myString = "Merhaba, dünya!";
char myChar = 'Z';
auto autoVar = 43; // Otomatik değişken türünü algılamak

// Değişkenler yazdırmak
std::cout