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.
C++ Standard Komitesi'nin onayladığı logo | |
Paradigması | Çok paradigmalı: yordamsal, işlevsel, fonksiyonel, nesne yönelimli, jenerik, modüler, |
---|---|
İlk çıkışı | 1985 | )
Tasarımcı | Bjarne Stroustrup |
Geliştirici | Bjarne Stroustrup Bell Labs ISO/IEC JTC1/SC22/WG21 |
Kararlı sürüm | C++20 ISO/IEC 14882:2020 / (15 Aralık 2020 | ) )
Önizleme sürümü | / (19 Mart 2023) |
, , , , | |
GCC, LLVM Clang, , , , , | |
| |
Etkilendikleri | C, Simula, Ada 83, ALGOL 68, , ML |
Etkiledikleri | Perl, , Lua, , Ada 95, Java, PHP, D, , C#, |
İşletim sistemi | Çapraz platform |
Olağan dosya uzantıları | .C .cc cpp .cxx .c++ .H .hh .hpp .hxx .h++ .h .cppm .ixx |
Web sitesi | isocpp.org |
Ailesi | C |
İ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 '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, şablon, sıradışı durum yönetimi, isim 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.
Standardizasyon
Bir programlama dilini oluşturan gramer, anlam ve standard kütüphane yapıları muğlak olmayacak bir biçimde belgelenir (spec veya specification) ve yayınlanır. Derleyici sağlayıcıları (vendor) bu belgeyi kullanarak dili gerçekleyen derleyiciyi oluşturur.
C++ dilinin özelliklerini belirleyen bu belge (buradan sonrasında, standard) ISO / IEC Ortak Teknik Komitesi 1 (İng: Joint Technical Committee 1, JTC1) / Altkomite 22 (Subcommittee 22, SC22) Çalışma Grubu 21 (Working Group 21, WG21) (ISO/IEC JTC1/SC22/WG21) tarafından geliştirilir.
İlk standard 1998'de ISO/IEC 14882:1998 adıyla yayınlandı. Sonrasında C++03, C++11, C++14, C++17 ve mevcut standard olan yayınlandı. 2012 sonrası üçer senelik periyotlarla yayınlanmaya başlanmıştır.
Dil
Şablonlar
Şablonlar (template) tipten bağımsız olarak derleme zamanında parameterize değişken, fonksiyon veya sınıf yazılmasına izin verir ve jenerik programlamayı, şablon meta programlamayı, kod optimizasyonunu mümkün kılar. Şablon mekanizması Turing-tam'dır, böylece herhangi bir hesaplamanın bir şekilde derleme zamanında programlanarak ifade edilebilmesini sağlar.
Nesneler
C++, nesne tanımlamada RAII(Resource Acquisition Is Initialization) tekniğini kullanır. Nesne için gerekli olan kaynak ayrımı (Resource Acquisition), tanımlandığı anda yapılır (Initialization) ve gerektiğinde deterministik olarak serbest bırakılır. Böylece kaynaklar init()/destroy(), allocate()/free(), open()/close() gibi fonksiyon çiftleriyle manuel olarak yönetilmek zorunda kalmaz.
Kapsamlama
Kapsamlama (encapsulation), veri yapısının geliştirici tarafından doğru bir şekilde kullanılacağından emin olmak için nesneye ait bilgilerin bir kısmını erişilemez yapmaktır. C++, sınıf yapısında üyelerin public, protected veya private tanımlanmasına izin verir. private üyeler yalnızca sınıfın üyeleri tarafından erişilebilir, böylece sınıfın kendisini ilgilendiren bazı üye değişken veya fonksiyonlar kullanıcıdan (client) saklanır. Ayrıca bu yolla nesnenin yaşamı süresince değişmemesi gereken durumlar (class invariant) korunabilir.
Kalıtlama
Kalıtlama (inheritence) var olan bir türün özelliklerini taşıyan yeni bir tür oluşturmayı sağlar. Temel sınıftan kalıtım, "public", "protected" ve "private" olarak ilan edilebilir. Diğer iki kalıtım türü arayüzün anlaşılmasını zorlaştırdığından çoğu zaman yalnızca public kalıtım kullanılır. Geçiş belirteci belirtilmezse, class private, struct public olarak kalıtılır.
Temel sınıftan kalıtım sanal (virtual) olarak ilan edilebilir, buna sanal kalıtım (virtual inheritence) denir. Sanal kalıtım çoklu kalıtımın problemlerinden sıyrılarak temel sınıfın yalnızca bir örneğinin kalıtım grafiğinde olmasını sağlar.
İşleçlerin ve işlevlerin fazladan yüklenmesi
C++ dilinde işleçlerin (operator) çoğu fazladan yükleme yoluyla genelleştirilebilir. Örneğin + işleci sayılar için anlamlıyken, std::string sınıfı için de fazladan yüklenmiş, böylece türün temsil ettiği veriye + işleciyle birleştirilme yeteneği kazandırılmıştır. Benzer şekilde iki std::string sınıfı nesnesinin eşitliği == işleciyle kontrol edilebilir. Kullanıcı tanımlı herhangi bir tür (sınıf), işleçleri fazladan yükleyebilir.
Aynı isme sahip işlevler (function) farklı tür veya sayıda parametre alarak fazladan yüklenebilir. Örneğin std::to_string fonksiyonu int, float ve double türleri için fazladan yüklenmiştir.
Çokbiçimlilik
Çokbiçimlilik (polymorphism) kullanılarak farklı türler aynı arayüz üzerinden erişilebilir. Çokbiçimli bir tür kendisini oluşturan diğer türler gibi davranabilir. C++, dinamik (çalışma zamanında) ve statik (derleme zamanında) çokbiçimlilik çeşitlerine izin verir.
Dinamik çokbiçimlilik
Kalıtlama kullanılarak
Üst sınıfa işaret eden bir pointer veya ona ait bir referans, alt sınıfları da gösterebilir. Bu durumda üst sınıf bir çokbiçimli türdür (polymorphic type). Eğer üst sınıf bir fonksiyona referans veya pointer şeklinde parametre olarak geçilirse, ondan türetilmiş sınıflar da geçilebilir. Üst sınıf üzerinden alt sınıfların üyeleri kullanılabilir. Alt sınıflardan hangisinin geçildiği dynamic_cast kullanılarak belirlenebilir.
Sanal üye fonksiyonlar kullanarak
Türetilmiş sınıf, üst sınıfta sanal (virtual) olarak işaretlenmiş bir üye fonksiyonun içeriğini değiştirerek tekrar gerçekleyebilir (override). Bu durumda çokbiçimli tür, tekrar gerçeklenen üye fonksiyonu çağıracaktır.
Statik çokbiçimlilik
Şablon yapısı farklı türler için parçalı veya tam özelleştirilerek parametrik çokbiçimlilik sağlanabilir.
İşlevlerin fazladan yüklenmesi de statik çokbiçimlilik olarak düşünülebilir. Aynı isme sahip fonksiyonlar, parametre türü veya sayısına göre farklı fonksiyonları çağırır.
Lambda ifadeleri
C++ lambda ifadeleriyle anonim fonksiyon yazımını destekler.
[kapma](parametreler) -> dönüş_tipi { fonksiyon_gövdesi };
dönüş_tipi düşürülebilir, bu durumda dönüş tipi gövdeden çıkarımsanır:
[kapma](parametreler) { fonksiyon_gövdesi };
Lambda parametre almıyorsa, () yapısı düşürülebilir:
[kapma]{ fonksiyon_gövdesi };
Lambda değişkene atanarak isim alabilir ve tekrar kullanılabilir:
auto func = [kapma](parametreler) { fonksiyon_gövdesi }; func(argumanlar); func(argumanlar);
Lambda tanımlandığı anda çalıştırılıp hesaplama sonucuna erişilebilir:
auto result = [kapma](parametreler) { fonksiyon_gövdesi }(argumanlar);
C++20 ile şablon (template) lambda ifadeleri yazılabilir:
[kapma] <template_parametreler> (parametreler) -> 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
Yorum Satırları
Yorum satırları derleyici tarafından çalıştırılmaz. Bunlar kodun anlaşılmasını kolaylaştırmak için eklenir.
// Tek satirdan olusan bir yorum /* Birden fazla satirdan olusan yorum */
Merhaba Dünya
Bu program uçbirim ekranına "Merhaba, dunya!" yazacaktır.
#include <iostream> int main() { std::cout << "Merhaba, dunya!\n"; }
İşleçlerinin fazladan yüklenmesi
#include <iostream> struct Complex { double real{}; double imaginary{}; Complex& operator+=(const Complex& other) { real += other.real, imaginary += other.imaginary; return *this; } Complex& operator-=(const Complex& other) { real -= other.real, imaginary -= other.imaginary; return *this; } friend std::istream& operator>>(std::istream& is, Complex& c) { return is >> c.real >> c.imaginary; } friend std::ostream& operator<<(std::ostream& os, const Complex& c) { return os << c.real << '+' << c.imaginary << 'i' << '\n'; } }; Complex operator+(const Complex& l, const Complex& r) { return Complex{l.real + r.real, l.imaginary + r.imaginary}; } Complex operator-(const Complex& l, const Complex& r) { return Complex{l.real - r.real, l.imaginary - r.imaginary}; } int main() { Complex c; std::cout << c; // 0+0i Complex first{1, 0}; std::cout << first; // 1+0i Complex second{0, 1}; std::cout << second; // 0+1i first += second; std::cout << first; // 1+1i Complex result = first + second; std::cout << result; // 1+2i }
Lambda ifadeleri
#include <vector> #include <iostream> #include <range/v3/all.hpp> int main() { using namespace ranges; // .-- boş kapma auto // | .-- parametre harmonic_sum = views::iota(1)// v v v-- dönüş tipi | views::transform([](int n) -> double { return 1.0 / n; }) | views::partial_sum // lambda gövdesi-^-----------------^ | views::take(10) | to<std::vector<double>>; for(auto [n, hn] : harmonic_sum | views::enumerate) std::cout << n << ' ' << hn << '\n'; } // 0 1 // 1 1.5 // 2 1.83333 // 3 2.08333 // ...
Sıradışı durum yönetimi
#include <exception> #include <filesystem> #include <cstdio> // kullanicilar std::exception'i kalitlayarak // kendi siradisi durum tipini tanimlar struct appUsageError : std::exception { [[nodiscard]] const char *what() const noexcept override { return "Usage: mkdir directory"; } }; int main(int argc, const char *const argv[]) { try { if (argc != 2) throw appUsageError{}; // noexcept degil, filesystem_error hatasi firlatabilir // https://en.cppreference.com/w/cpp/filesystem/create_directory std::filesystem::create_directory(argv[1]); } catch (const appUsageError &e) { puts(e.what()); } catch (const std::filesystem::filesystem_error &e) { puts(e.what()); } catch (const std::exception &e) { puts(e.what()); } } // c++ -std=c++17 main.cpp -o mkdir // ./mkdir // Usage: mkdir directory // ./mkdir /usr/local/Folder // filesystem error: cannot create directory: Permission denied [/usr/local/Folder] // ./mkdir Folder // # Folder adinda bir dizin hatasiz olusturuldu
Ayrıca bakınız
Dipnotlar
- ^ ++ sonek işleci C programlama dilinde sayısal bir değişkenin değerini bir artırmak anlamındadır.
Kaynakça
- ^ "ISO/IEC 14882:1998". ISO. 15 Ocak 2017 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "ISO/IEC 14882:2003". ISO. 13 Ocak 2017 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "ISO/IEC 14882:2011". ISO. 30 Ocak 2017 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "ISO/IEC 14882:2014". ISO. 29 Nisan 2016 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "ISO/IEC 14882:2017". ISO. 29 Ocak 2013 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "ISO/IEC 14882:2020". ISO. 16 Aralık 2020 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "ISO/IEC PRF 14882". ISO. 28 Ocak 2024 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
- ^ "History of C++" (İngilizce). 28 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 22 Şubat 2024.
- ^ "From the archives: "C++: as close as possible to C -- but no closer" -- A. Koenig and B. Stroustrup : Standard C++". isocpp.org. 15 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 15 Şubat 2024.
- ^ Stroustrup, Bjarne (29 Mart 1994). Design and Evolution of C++. Addison-Wesley Professional. s. 101. ISBN . 4 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 28 Şubat 2024.
- ^ . 27 Şubat 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Şubat 2024.
- ^ "Şablonlar". 24 Mayıs 2022 tarihinde kaynağından . Erişim tarihi: 30 Ocak 2024.
- ^ (İngilizce). 21 Mart 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 21 Mart 2024.
- ^ TylerMSFT (16 Haziran 2023). . learn.microsoft.com. 25 Ağustos 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Ağustos 2023.
- ^ "Lambda". 21 Ocak 2024 tarihinde kaynağından . Erişim tarihi: 29 Ocak 2024.
- ^ "Standard Kütüphane". 3 Aralık 2023 tarihinde kaynağından . Erişim tarihi: 30 Ocak 2024.
- ^ "C++ Core Guidelines" (İngilizce). 29 Şubat 2024. 29 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 29 Şubat 2024.
- ^ "Guideline Support Library" (İngilizce). 29 Şubat 2024. 29 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 29 Şubat 2024.
- ^ "How does the compilation linking process work?". 10 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 9 Şubat 2024.
- ^ TylerMSFT (16 Haziran 2023). . learn.microsoft.com. 25 Ağustos 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Ağustos 2023.
- ^ "Yorum satırı". 28 Kasım 2023 tarihinde kaynağından . Erişim tarihi: 30 Ocak 2024.
Dış bağlantılar
- Standart C++'ı Yeni Bir Dil Olarak Öğrenmek8 Nisan 2014 tarihinde Wayback Machine sitesinde .—Bjarne Stroustrup'un yazısının çevirisi
- C++ reference 1 Mart 2024 tarihinde Wayback Machine sitesinde . (İngilizce)
- Cplusplus.com1 Mart 2024 tarihinde Wayback Machine sitesinde . (İngilizce)
- C++ Super-FAQ1 Mart 2024 tarihinde Wayback Machine sitesinde . (İngilizce)
- C++ Language Reference 1 Mart 2024 tarihinde Wayback Machine sitesinde . (İngilizce)
- Hacking C++ — Çağdaş C++ Öğrenin 15 Şubat 2024 tarihinde Wayback Machine sitesinde . (İngilizce)
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
C ˈ s iː p l ʌ s p l ʌ s telaffuz si pilas pilas Bjarne Stroustrup tarafindan 1979 yilinda Bell Laboratuvarlari nda gelistirilmeye baslanmis C yi kapsayan ve cok paradigmali yaygin olarak kullanilan genel amacli bir programlama dilidir C C Standard Komitesi nin onayladigi logoParadigmasiCok paradigmali yordamsal islevsel fonksiyonel nesne yonelimli jenerik moduler Ilk cikisi1985 39 yil once 1985 TasarimciBjarne StroustrupGelistiriciBjarne Stroustrup Bell Labs ISO IEC JTC1 SC22 WG21Kararli surumC 20 ISO IEC 14882 2020 15 Aralik 2020 3 yil once 2020 12 15 Onizleme surumu 19 Mart 2023 GCC LLVM Clang Microsoft Visual C Embarcadero C Builder Intel C Compiler ISO IEC C 2020 Devam edenEtkilendikleriC Simula Ada 83 ALGOL 68 MLEtkiledikleriPerl Lua Ada 95 Java PHP D C Isletim sistemiCapraz platformOlagan dosya uzantilari C cc cpp cxx c H hh hpp hxx h h cppm ixxWeb sitesiisocpp orgAilesiC Ilk olarak C With Classes Siniflarla C olarak adlandirilmis 1983 yilinda ismi C olarak degistirilmistir Gunuzumuzde en cok kullanilan programlama dillerinden biri olmustur C tasarlanirken C programlama dili ile olabildigince uyumlu olmasi goz onune bulundurulmus ve deki tum ornek kodun derlenecegi sekilde tasarlanmistir C C nin sagladigi alt seviye siki donanim desteginin yaninda farkli veri turleri sinif sablon siradisi durum yonetimi isim alani namespace islec fazladan yuklemesi islev fazladan yuklemesi referans hafiza yonetimi ve pek cok kutuphane imkani sunar Standardizasyon Bir programlama dilini olusturan gramer anlam ve standard kutuphane yapilari muglak olmayacak bir bicimde belgelenir spec veya specification ve yayinlanir Derleyici saglayicilari vendor bu belgeyi kullanarak dili gercekleyen derleyiciyi olusturur C dilinin ozelliklerini belirleyen bu belge buradan sonrasinda standard ISO IEC Ortak Teknik Komitesi 1 Ing Joint Technical Committee 1 JTC1 Altkomite 22 Subcommittee 22 SC22 Calisma Grubu 21 Working Group 21 WG21 ISO IEC JTC1 SC22 WG21 tarafindan gelistirilir Ilk standard 1998 de ISO IEC 14882 1998 adiyla yayinlandi Sonrasinda C 03 C 11 C 14 C 17 ve mevcut standard olan C 20 yayinlandi 2012 sonrasi ucer senelik periyotlarla yayinlanmaya baslanmistir DilSablonlar Sablonlar template tipten bagimsiz olarak derleme zamaninda parameterize degisken fonksiyon veya sinif yazilmasina izin verir ve jenerik programlamayi sablon meta programlamayi kod optimizasyonunu mumkun kilar Sablon mekanizmasi Turing tam dir boylece herhangi bir hesaplamanin bir sekilde derleme zamaninda programlanarak ifade edilebilmesini saglar Nesneler C nesne tanimlamada RAII Resource Acquisition Is Initialization teknigini kullanir Nesne icin gerekli olan kaynak ayrimi Resource Acquisition tanimlandigi anda yapilir Initialization ve gerektiginde deterministik olarak serbest birakilir Boylece kaynaklar init destroy allocate free open close gibi fonksiyon ciftleriyle manuel olarak yonetilmek zorunda kalmaz Kapsamlama Kapsamlama encapsulation veri yapisinin gelistirici tarafindan dogru bir sekilde kullanilacagindan emin olmak icin nesneye ait bilgilerin bir kismini erisilemez yapmaktir C sinif yapisinda uyelerin public protected veya private tanimlanmasina izin verir private uyeler yalnizca sinifin uyeleri tarafindan erisilebilir boylece sinifin kendisini ilgilendiren bazi uye degisken veya fonksiyonlar kullanicidan client saklanir Ayrica bu yolla nesnenin yasami suresince degismemesi gereken durumlar class invariant korunabilir Kalitlama Kalitlama inheritence var olan bir turun ozelliklerini tasiyan yeni bir tur olusturmayi saglar Temel siniftan kalitim public protected ve private olarak ilan edilebilir Diger iki kalitim turu arayuzun anlasilmasini zorlastirdigindan cogu zaman yalnizca public kalitim kullanilir Gecis belirteci belirtilmezse class private struct public olarak kalitilir Temel siniftan kalitim sanal virtual olarak ilan edilebilir buna sanal kalitim virtual inheritence denir Sanal kalitim coklu kalitimin problemlerinden siyrilarak temel sinifin yalnizca bir orneginin kalitim grafiginde olmasini saglar Isleclerin ve islevlerin fazladan yuklenmesi C dilinde isleclerin operator cogu fazladan yukleme yoluyla genellestirilebilir Ornegin isleci sayilar icin anlamliyken std string sinifi icin de fazladan yuklenmis boylece turun temsil ettigi veriye isleciyle birlestirilme yetenegi kazandirilmistir Benzer sekilde iki std string sinifi nesnesinin esitligi isleciyle kontrol edilebilir Kullanici tanimli herhangi bir tur sinif islecleri fazladan yukleyebilir Ayni isme sahip islevler function farkli tur veya sayida parametre alarak fazladan yuklenebilir Ornegin std to string fonksiyonu int float ve double turleri icin fazladan yuklenmistir Cokbicimlilik Cokbicimlilik polymorphism kullanilarak farkli turler ayni arayuz uzerinden erisilebilir Cokbicimli bir tur kendisini olusturan diger turler gibi davranabilir C dinamik calisma zamaninda ve statik derleme zamaninda cokbicimlilik cesitlerine izin verir Dinamik cokbicimlilik Kalitlama kullanilarak Ust sinifa isaret eden bir pointer veya ona ait bir referans alt siniflari da gosterebilir Bu durumda ust sinif bir cokbicimli turdur polymorphic type Eger ust sinif bir fonksiyona referans veya pointer seklinde parametre olarak gecilirse ondan turetilmis siniflar da gecilebilir Ust sinif uzerinden alt siniflarin uyeleri kullanilabilir Alt siniflardan hangisinin gecildigi dynamic cast kullanilarak belirlenebilir Sanal uye fonksiyonlar kullanarak Turetilmis sinif ust sinifta sanal virtual olarak isaretlenmis bir uye fonksiyonun icerigini degistirerek tekrar gercekleyebilir override Bu durumda cokbicimli tur tekrar gerceklenen uye fonksiyonu cagiracaktir Statik cokbicimlilik Sablon yapisi farkli turler icin parcali veya tam ozellestirilerek parametrik cokbicimlilik saglanabilir Islevlerin fazladan yuklenmesi de statik cokbicimlilik olarak dusunulebilir Ayni isme sahip fonksiyonlar parametre turu veya sayisina gore farkli fonksiyonlari cagirir Lambda ifadeleri C lambda ifadeleriyle anonim fonksiyon yazimini destekler kapma parametreler gt donus tipi fonksiyon govdesi donus tipi dusurulebilir bu durumda donus tipi govdeden cikarimsanir kapma parametreler fonksiyon govdesi Lambda parametre almiyorsa yapisi dusurulebilir kapma fonksiyon govdesi Lambda degiskene atanarak isim alabilir ve tekrar kullanilabilir auto func kapma parametreler fonksiyon govdesi func argumanlar func argumanlar Lambda tanimlandigi anda calistirilip hesaplama sonucuna erisilebilir auto result kapma parametreler fonksiyon govdesi argumanlar C 20 ile sablon template lambda ifadeleri yazilabilir kapma lt template parametreler gt parametreler gt donus tipi fonksiyon govdesi Siradisi durum yonetimi Program calisirken yolunda gitmeyen bir sey olustugunda ve programin aniden sonlandirilmasi arzu edilmiyorsa siradisi durum yonetimi exception handling kullanilarak ana koddan ayri olarak yonetim saglanabilir Siradisi durum exception olustugu yerde bir hata kodu firlatir ve siradisi durum yoneticisi exception handler tarafindan yakalanana kadar kapsam disana tasar Eger hata kodu yakalanmazsa program sonlandirilir Standard KutuphaneC standard kutuphanesi pek cok tutucu tur algoritma G C dosya sistemi string regex multithread metaprogramlama araclari hafiza yonetimi zaman yonetimi siradisi durum yonetimi cesitli matematik fonksiyonlari rastgele sayi ureteci C ile geriye donuk uyumluluk baslik dosyalari bulundurur C Core GuidelinesC Core Guidelines Turkce C Temel Yonelgeleri C programcilarinin daha basit daha etkili daha yonetilebilir kod yazmalarini saglamayi hedefleyen yonelgeleri iceren bir projedir Projenin editorlugunu dilin yaraticisi Bjarne Stroustrup ile ISO C Calisma Grubu baskani Herb Sutter surdurur Core guidelines pek cok stil iyi uygulama ve modern C tavsiyeleri bulundurur Statik analiz araclari bu tavsiyeleri gercekleyerek kod yazilirken programcilari kotu uygulamalardan kacinmasina yardimci olur Guideline Support Library GSL Core Guidelines ta tavsiye edilen pek cok tur ve fonksiyonu barindiran bir kutuphanedir Derleme modeliC cogunlukla derlenen bir dil olarak gerceklenmistir Kaynak kodun derlenme sureci dort asamadan olusur sirasiyla onisleme derleme assembly ve baglama Derleyici kaynak koda uygulandiginda bu asamalar birbiri ardina gerceklesir Onislemci preprocessor include direktifiyle eklenen dosyalari koda tasir Ayrica kodda sozcuk degisiklikleri yapabilir kosullu derleme saglayabilir derleyicinin bir takim ozelliklerini kontrol edebilir veya kodun derlenecegi platform hakkinda bilgi alabilir Derleyici compiler veya compiler proper kodu tarar parcalara ayirir sozdizimi ve anlami analiz eder hatalari bildirir optimize eder ve islemcinin sahip oldugu mimarinin assembly koduna derler Assembly kodu assembler tarafindan yerdegistirebilir relocatable object code hedef koduna donusturulur Baglayici linker yerdegistirebilir hedef kodunu diger hedef kodlarina gelistirilen veya onceden derlenmis sistem kutuphanleri vd baglar ve calistirilabilir hedef kodunu olusturur OrneklerYorum Satirlari Yorum satirlari derleyici tarafindan calistirilmaz Bunlar kodun anlasilmasini kolaylastirmak icin eklenir Tek satirdan olusan bir yorum Birden fazla satirdan olusan yorum Merhaba Dunya Bu program ucbirim ekranina Merhaba dunya yazacaktir include lt iostream gt int main std cout lt lt Merhaba dunya n Isleclerinin fazladan yuklenmesi include lt iostream gt struct Complex double real double imaginary Complex amp operator const Complex amp other real other real imaginary other imaginary return this Complex amp operator const Complex amp other real other real imaginary other imaginary return this friend std istream amp operator gt gt std istream amp is Complex amp c return is gt gt c real gt gt c imaginary friend std ostream amp operator lt lt std ostream amp os const Complex amp c return os lt lt c real lt lt lt lt c imaginary lt lt i lt lt n Complex operator const Complex amp l const Complex amp r return Complex l real r real l imaginary r imaginary Complex operator const Complex amp l const Complex amp r return Complex l real r real l imaginary r imaginary int main Complex c std cout lt lt c 0 0i Complex first 1 0 std cout lt lt first 1 0i Complex second 0 1 std cout lt lt second 0 1i first second std cout lt lt first 1 1i Complex result first second std cout lt lt result 1 2i Lambda ifadeleri include lt vector gt include lt iostream gt include lt range v3 all hpp gt int main using namespace ranges bos kapma auto parametre harmonic sum views iota 1 v v v donus tipi views transform int n gt double return 1 0 n views partial sum lambda govdesi views take 10 to lt std vector lt double gt gt for auto n hn harmonic sum views enumerate std cout lt lt n lt lt lt lt hn lt lt n 0 1 1 1 5 2 1 83333 3 2 08333 Siradisi durum yonetimi include lt exception gt include lt filesystem gt include lt cstdio gt kullanicilar std exception i kalitlayarak kendi siradisi durum tipini tanimlar struct appUsageError std exception nodiscard const char what const noexcept override return Usage mkdir directory int main int argc const char const argv try if argc 2 throw appUsageError noexcept degil filesystem error hatasi firlatabilir https en cppreference com w cpp filesystem create directory std filesystem create directory argv 1 catch const appUsageError amp e puts e what catch const std filesystem filesystem error amp e puts e what catch const std exception amp e puts e what c std c 17 main cpp o mkdir mkdir Usage mkdir directory mkdir usr local Folder filesystem error cannot create directory Permission denied usr local Folder mkdir Folder Folder adinda bir dizin hatasiz olusturulduAyrica bakinizC tabanli programlama dilleri listesiDipnotlar sonek isleci C programlama dilinde sayisal bir degiskenin degerini bir artirmak anlamindadir Kaynakca ISO IEC 14882 1998 ISO 15 Ocak 2017 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 ISO IEC 14882 2003 ISO 13 Ocak 2017 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 ISO IEC 14882 2011 ISO 30 Ocak 2017 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 ISO IEC 14882 2014 ISO 29 Nisan 2016 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 ISO IEC 14882 2017 ISO 29 Ocak 2013 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 ISO IEC 14882 2020 ISO 16 Aralik 2020 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 ISO IEC PRF 14882 ISO 28 Ocak 2024 tarihinde kaynagindan Erisim tarihi 10 Subat 2024 History of C Ingilizce 28 Subat 2024 tarihinde kaynagindan Erisim tarihi 22 Subat 2024 From the archives C as close as possible to C but no closer A Koenig and B Stroustrup Standard C isocpp org 15 Subat 2024 tarihinde kaynagindan Erisim tarihi 15 Subat 2024 Stroustrup Bjarne 29 Mart 1994 Design and Evolution of C Addison Wesley Professional s 101 ISBN 9780201543308 4 Subat 2024 tarihinde kaynagindan Erisim tarihi 28 Subat 2024 27 Subat 2024 tarihinde kaynagindan arsivlendi Erisim tarihi 27 Subat 2024 Sablonlar 24 Mayis 2022 tarihinde kaynagindan Erisim tarihi 30 Ocak 2024 Ingilizce 21 Mart 2024 tarihinde kaynagindan arsivlendi Erisim tarihi 21 Mart 2024 TylerMSFT 16 Haziran 2023 learn microsoft com 25 Agustos 2023 tarihinde kaynagindan arsivlendi Erisim tarihi 25 Agustos 2023 Lambda 21 Ocak 2024 tarihinde kaynagindan Erisim tarihi 29 Ocak 2024 Standard Kutuphane 3 Aralik 2023 tarihinde kaynagindan Erisim tarihi 30 Ocak 2024 C Core Guidelines Ingilizce 29 Subat 2024 29 Subat 2024 tarihinde kaynagindan Erisim tarihi 29 Subat 2024 Guideline Support Library Ingilizce 29 Subat 2024 29 Subat 2024 tarihinde kaynagindan Erisim tarihi 29 Subat 2024 How does the compilation linking process work 10 Subat 2024 tarihinde kaynagindan Erisim tarihi 9 Subat 2024 TylerMSFT 16 Haziran 2023 learn microsoft com 25 Agustos 2023 tarihinde kaynagindan arsivlendi Erisim tarihi 25 Agustos 2023 Yorum satiri 28 Kasim 2023 tarihinde kaynagindan Erisim tarihi 30 Ocak 2024 Dis baglantilarVikikitap Vikikitapta bu konu hakkinda daha fazla bilgi var C Standart C i Yeni Bir Dil Olarak Ogrenmek8 Nisan 2014 tarihinde Wayback Machine sitesinde Bjarne Stroustrup un yazisinin cevirisiC reference 1 Mart 2024 tarihinde Wayback Machine sitesinde Ingilizce Cplusplus com1 Mart 2024 tarihinde Wayback Machine sitesinde Ingilizce C Super FAQ1 Mart 2024 tarihinde Wayback Machine sitesinde Ingilizce C Language Reference 1 Mart 2024 tarihinde Wayback Machine sitesinde Ingilizce Hacking C Cagdas C Ogrenin 15 Subat 2024 tarihinde Wayback Machine sitesinde Ingilizce