C++, sistem ve uygulama yazılımı geliştirme, oyun geliştirme, sürücüler ve istemci-sunucu uygulamaları için yaygın olarak kullanılan genel amaçlı bir programlama dilidir. Performans, verimlilik ve esneklik odaklı olarak tasarlanmış olup, yüksek performanslı uygulamalar için tercih edilen bir seçimdir. C++, C programlama dilinin bir uzantısıdır ve nesne yönelimli özellikler ile genel programlama yetenekleri sunarken, düşük seviyeli programlamanın verimliliğini korur.
C++, 1980'lerin başında Bjarne Stroustrup tarafından Bell Labs'ta yaratılmıştır. Stroustrup, C dilinin bir uzantısı olarak projeye başlamıştır; bu dil, verimliliği ve sistem kaynakları üzerindeki kontrolü nedeniyle zaten popülerdi. Amaç, nesne yönelimli programlamayı (OOP) destekleyen özellikler ekleyerek daha iyi yazılım yapısı, veri kapsülleme ve kod yeniden kullanımını sağlamaktı.
C++'ın ilk versiyonu, başlangıçta "Sınıflarla C" olarak adlandırılmış ve 1983'te uygulanmıştır. Bu sürüm, sınıflar ve temel kalıtım gibi temel nesne yönelimli kavramları tanıtmıştır. Dil olgunlaştıkça, birkaç revizyon geçirmiş ve C++98 standardının yayımlanmasına yol açmıştır; bu standart dilin resmi hale gelmesini sağlamış ve şablonlar ile Standart Şablon Kütüphanesi (STL) gibi özellikleri içermiştir.
2000'lerde, C98'de bulunan tutarsızlıkları düzeltmek amacıyla C03 standardı ile daha da geliştirilmiştir. 2011'de yayımlanan C11, auto anahtar kelimesi, aralık tabanlı döngüler, lambda ifadeleri ve akıllı işaretçiler gibi önemli özellikler getirmiştir. C14, C17 ve C20 gibi sonraki standartlar, yapılandırılmış bağlamalar, eşzamanlılık desteği ve geliştirilmiş şablon meta programlama gibi daha fazla iyileştirme sunmuştur.
Bugün, C++ oyun geliştirme, gömülü sistemler, yüksek performanslı hesaplama ve büyük ölçekli uygulamalar dahil olmak üzere çeşitli alanlarda popüler bir dil olarak kullanılmaktadır. Topluluğu, standart kütüphane, araçlar ve çerçevelere sürekli katkılarla evrimleşmeye devam etmektedir. Modern C++, performans özelliklerini korurken daha güvenli, daha ifade edici ve daha kolay kullanılabilir bir sözdizimi vurgulamaktadır.
C++, verileri ve davranışları kapsülleyen nesnelerin oluşturulmasına olanak tanıyan nesne yönelimli programlama paradigmalarını destekler. Örneğin:
class Animal {
public:
void speak() {
std::cout << "Hayvan konuşuyor" << std::endl;
}
};
Animal dog;
dog.speak(); // Çıktı: Hayvan konuşuyor
C++ şablonları, fonksiyonların ve sınıfların herhangi bir veri türü ile çalışmasına olanak tanıyan genel programlamayı mümkün kılar:
template <typename T>
T add(T a, T b) {
return a + b;
}
int result = add(5, 10); // Tam sayılarla çalışır
C++, geliştiricilerin kullanıcı tanımlı türlerle operatörlerin nasıl çalıştığını tanımlamasına olanak tanır ve bu da kodun okunabilirliğini artırır:
class Point {
public:
int x, y;
Point operator+(const Point& other) {
return Point{x + other.x, y + other.y};
}
};
Point p1{1, 2}, p2{3, 4};
Point p3 = p1 + p2; // Aşırı yüklenmiş + operatörünü kullanır
C++, geliştiricilerin hataları sorunsuz bir şekilde yönetmelerine olanak tanıyan yerleşik istisna yönetimi desteği sağlar:
try {
throw std::runtime_error("Hata oluştu");
} catch (const std::exception& e) {
std::cout << e.what() << std::endl; // Çıktı: Hata oluştu
}
C++, yararlı veri yapıları ve algoritmalar sağlayan STL'yi içerir:
#include <vector>
#include <algorithm>
std::vector<int> numbers = {1, 2, 3};
std::sort(numbers.begin(), numbers.end()); // Vektörü sıralar
C++, kaynak tahsisini ve serbest bırakılmasını otomatik olarak yöneten RAII'yi kullanır:
class Resource {
public:
Resource() { /* kaynakları tahsis et */ }
~Resource() { /* kaynakları serbest bırak */ }
};
void function() {
Resource res; // res kapsam dışına çıktığında kaynaklar temizlenir
}
constexpr
anahtar kelimesi, ifadelerin derleme zamanında değerlendirilmesine olanak tanır ve performansı artırır:
constexpr int square(int x) {
return x * x;
}
int result = square(5); // Derleme zamanında değerlendirilir
C++11, bellek sızıntılarını azaltarak belleği otomatik olarak yönetmek için akıllı işaretçileri tanıtmıştır:
#include <memory>
std::unique_ptr<int> ptr(new int(42)); // Kapsam dışına çıktığında otomatik olarak silinir
Anonim fonksiyonlar olarak bilinen lambda ifadeleri, kodun kısalığını ve okunabilirliğini artırır:
auto sum = [](int a, int b) { return a + b; };
int result = sum(3, 4); // result 7'dir
C++11, eşzamanlı programlamaya olanak tanıyan çoklu iş parçacığı olanakları sunmuştur:
#include <thread>
void threadFunction() {
std::cout << "İş parçacığı çalışıyor" << std::endl;
}
std::thread t(threadFunction);
t.join(); // İş parçacığının bitmesini bekler
C++ esasen derlenmiş bir dildir. Popüler derleyiciler şunlardır:
C++, çeşitli entegre geliştirme ortamlarında (IDE) geliştirilebilir:
C++ projeleri genellikle Makefile'lar, CMake veya IDE'ler içindeki entegre araçlar gibi yapı sistemleri kullanılarak oluşturulur. Örneğin, CMake ile basit bir CMakeLists.txt şöyle görünebilir:
cmake_minimum_required(VERSION 3.0)
project(MyProject)
add_executable(MyExecutable main.cpp)
C++, geniş bir uygulama yelpazesinde kullanılmaktadır:
C++, birkaç programlama dili ile ilişkiler ve karşılaştırmalar içermektedir:
C++'ı diğer dillere veya tersine çevirmek genellikle bellek yönetimi, istisna yönetimi ve şablonlar gibi özelliklerin dikkatlice değerlendirilmesini gerektirir.
Bu araçlarla çalışırken, çevrilen kodun doğruluğunu, verimliliğini ve orijinal kodun mantığını korumasını sağlamak önemlidir.