C++ Dokümantasyonu
Kısa ve örneklerle anlatılan C++ kaynağı. Kavramı oku, kodu gör, sonra Coddy yolculuğunda uygula.
Rehberli bir C++ yolculuğuna başlaBaşlarken
- C++ NedirC++'ın aslında ne olduğu, neden doğrudan yerel makine koduna derlendiği ve onunla geliştirilen yüksek performanslı yazılım türleri.
- C++ KurulumuC++ derleyicisi (GCC, Clang veya MSVC) nasıl kurulur, işletim sisteminize uygun bir araç zinciri nasıl seçilir ve komut satırından çalıştığı nasıl doğrulanır.
- C++ DerlemeC++ bir .cpp kaynak dosyasını nasıl yerel bir çalıştırılabilir dosyaya dönüştürür: g++ (ya da clang++/MSVC) ile derleyin, ikiliyi çalıştırın ve işler ters gittiğinde derleyici hatalarını okuyun.
- C++ SözdizimiBir C++ programının temel sözdizimi kuralları - ifadeler ve noktalı virgül, süslü parantezli bloklar, main fonksiyonu ve çıktının nasıl çalıştığı - ilk bir programdan yola çıkarak anlatılıyor.
- YorumlarC++'ta yorum nasıl yazılır - tek satırlık // notları ve çok satırlı /* */ blokları - ayrıca kodu nasıl yorum satırına alacağınız, blok yorumların neden iç içe geçmediği ve bir yorumu tutmaya değer kılan şey.
Değişkenler ve türler
- DeğişkenlerC++'ta değişkenlerin nasıl çalıştığı: bir tür ile tanımlama, atama ile ilk değer atama arasındaki fark, küme parantezli ilk değer atama, isimlendirme kuralları ve bir değişkenin nerede yaşayıp öldüğüne karar veren kapsam.
- Veri TipleriC++'ın temel veri tiplerine - tam sayılar, kayan nokta, char ve bool - pratik bir bakış; ayrıca boyutlar, signed ve unsigned karşılaştırması, literaller ve son ekler, taşma ve doğru tipi nasıl seçeceğiniz.
- auto Anahtar Sözcüğü`auto` anahtar sözcüğünün derleyicinin bir değişkenin türünü senin yerine çıkarmasına nasıl izin verdiği - neyi attığı, nerede parladığı ve yeni başlayanları ısıran tuzaklar.
- Sabitler ve constC++ içinde const ile salt okunur değerler nasıl tanımlanır, const ile constexpr arasındaki fark, const işaretçiler ile const'a işaretçiler ve const üye fonksiyonlar.
- OperatörlerC++ operatörlerini öğren - aritmetik, karşılaştırma, mantıksal, atama ve bit düzeyi - ayrıca tam sayı bölmesi, öncelik ve kısa devre konularındaki tuzakları.
- Tip DönüştürmeC++'ta tip dönüştürmenin nasıl çalıştığı: örtük dönüşümler, tam sayı bölme tuzağı ve adlandırılmış dört cast (static_cast, const_cast, reinterpret_cast, dynamic_cast); sessiz veri kaybına yol açan ince noktalarıyla birlikte.
Kontrol akışı
- if-elseC++ ile if, else if ve else kullanarak nasıl karar verilir: koşullar, dalları zincirleme, iç içe kullanım, üçlü (ternary) operatör, başlatıcılı if ve insanları yanıltan tuzaklar.
- switchC++ switch deyimi açıklandı: case etiketleri, break ve fall-through, default dalı, case'leri gruplama, enum üzerinde switch ve case içindeki bildirimlerle ilgili tuzaklar.
- for döngüsüC++ for döngüsüyle kodun nasıl tekrarlanacağı: üç parçalı başlık, yukarı ve aşağı sayma, diziler üzerinde döngü, iç içe döngüler, break ve continue, ve herkesi yakalayan bir-eksik/bir-fazla ile işaretsiz tür hataları.
- while DöngüleriC++ while döngüsü açıklanıyor: koşulu önce kontrol eden while, en az bir kez çalışan do-while, bir nöbetçi değere kadar döngü, break ve continue ve sonsuz döngülerden nasıl kaçınılır.
- Aralık Tabanlı forC++ aralık tabanlı for döngüsü açıklandı: diziler, vector'ler, string'ler ve map'ler üzerinde temiz yineleme, neden auto& ve const auto& kullanmalısınız ve kaçınmanız gereken kopyalama ile iterator geçersizleştirme tuzakları.
Fonksiyonlar
- FonksiyonlarC++'ta fonksiyon nasıl yazılır: dönüş tipi/ad/parametre anatomisi, bildirim ile tanım farkı, değer döndürme, void fonksiyonlar ve eksik return ile prototip unutma gibi tuzaklar.
- Fonksiyon ParametreleriArgümanlar C++ fonksiyonlarına nasıl girer - değerle aktarma ile referansla aktarma, ucuz salt-okunur erişim için const referanslar, varsayılan argümanlar, işaretçiler ve programları sessizce yavaşlatan kopyalama maliyeti tuzakları.
- ReferanslarC++ referansları açıklanıyor: bir parametredeki & nasıl bir takma ad oluşturur, referansla geçirme neden kopyalardan kaçınır ve bir fonksiyonun çağıranın değişkenlerini değiştirmesine izin verir, const& ve referansları değer döndürmeye tercih etmeniz gereken durumlar.
- Fonksiyon Aşırı YüklemeC++ fonksiyon aşırı yükleme, parametre listeleri farklı olduğu sürece birden fazla fonksiyonun tek bir ismi paylaşmasına izin verir. Aşırı yükleme çözümlemesinin doğru sürümü nasıl seçtiğini, neden dönüş tipinin tek başına yeterli olmadığını ve kaçınmanız gereken belirsizlik ile varsayılan argüman tuzaklarını öğrenin.
- Lambda İfadeleriC++ lambda ifadeleriyle anında küçük satır içi fonksiyonlar yazın - sözdizimi, yakalamaların nasıl çalıştığı, `mutable`'ı ne zaman kullanacağınız ve herkesi yakalayan sarkan-yakalama tuzağı.
İşaretçiler ve bellek
- İşaretçilerC++ işaretçileri sıfırdan anlatılıyor: bir işaretçi tanımlamak, & (adresini al) ve * (dereference) operatörleri, nullptr, dizilere işaretçiler ve çökmelere yol açan sarkan ve ilklendirilmemiş işaretçi tuzakları.
- Referanslar vs İşaretçilerC++'ta referanslar ile işaretçilerin pratik bir karşılaştırması: ortak yönleri, nerede ayrıştıkları (yeniden bağlama, null, aritmetik) ve günlük kodda hangisine başvuracağınıza dair net bir kural.
- Dinamik BellekÇalışma zamanında `new` ile bellek nasıl ayrılır, `delete` ile nasıl serbest bırakılır ve heap'i elle yönetirken ortaya çıkan sızıntılardan, sallanan işaretçilerden ve çift serbest bırakmalardan nasıl kaçınılır.
- Akıllı İşaretçilerAkıllı işaretçiler heap belleğinin sahibidir ve onu otomatik olarak serbest bırakır. `unique_ptr`, `shared_ptr`, `make_unique` ve `make_shared`'i öğren; ayrıca neden bir daha neredeyse hiç `new`/`delete` yazmaman gerektiğini.
Dizeler ve G/Ç
- String'lerC++'ta `std::string` nasıl kullanılır - metni güvenle oluşturma, birleştirme, arama ve dilimleme; ayrıca gerçek işler için neredeyse hiçbir zaman ham bir `char*` istemeyişinizin nedeni.
- Girdi ve ÇıktıC++'ta konsol G/Ç'sinin nasıl çalıştığı: cout ile yazdırma, cin ile okuma, cin'den sonra getline'daki klasik satır sonu hatası ve girdi başarısız olduğunda nasıl toparlanılır.
- String Stream'leriMetni ayrıştırmak, dizeleri boşluklara göre bölmek, dizeler ile sayılar arasında dönüşüm yapmak ve bellekte biçimlendirilmiş dizeler oluşturmak için std::stringstream, istringstream ve ostringstream nasıl kullanılır.
STL kapsayıcıları
- DizilerC++ ham dizileri açıklanıyor: nasıl tanımlanır ve ilklendirilir, güvenli indeksleme, boyutuyla döngü kurma, diziden işaretçiye bozulma tuzağı ve neden std::array ile vector genellikle daha iyidir.
- vectorstd::vector, C++'ın yeniden boyutlandırılabilir dizisidir - varsayılan olarak başvurman gereken konteyner. Bir vector oluşturmayı, erişmeyi, büyütmeyi ve üzerinde dönmeyi öğren; ayrıca iterator geçersizleşmesi ve sınır dışı erişim tuzaklarını da gör.
- mapC++ std::map açıklandı: logaritmik aramaya sahip, anahtara göre sıralı bir anahtar-değer konteyneri. Ekle, bul, dolaş ve anahtarları sessizce ekleyen klasik operator[] tuzağından kaçın.
- unordered_mapC++'ta std::unordered_map'i öğren - ortalama O(1) ekleme ve arama sunan, map'in hash tablosu kardeşi. Temel işlemleri, [] operatörünün otomatik ekleme tuzağını, count ile find karşılaştırmasını ve sıralı bir map yerine onu ne zaman seçeceğini anlatır.
- setstd::set'in C++'ta benzersiz ve otomatik olarak sıralanmış değerleri nasıl sakladığı: ekleme, count ve find ile üyelik kontrolü, sıralı dolaşma ve set, multiset ile unordered_set arasındaki farklar.
- pair ve tuple`std::pair` ve `std::tuple` iki veya daha fazla değeri tek bir nesnede nasıl birleştirir: nasıl oluşturulur, alanlara nasıl erişilir, structured bindings ve her birinin nereye uyduğu.
- YineleyicilerC++ yineleyicilerinin konteynerlere yönelik genelleştirilmiş işaretçiler olarak nasıl çalıştığı: begin() ve end(), referans çözme, ilerletme, const/reverse türevleri ve tanımsız davranışa yol açan geçersizleşme ile end()'in referansını çözme tuzakları.
STL algoritmaları ve şablonlar
- AlgoritmalarC++ standart algoritmalarını - `find`, `count_if`, `transform`, `accumulate`, `remove` - kullanarak elle döngü yazmadan aralıklar üzerinde gerçek iş yapın; ayrıca iterator-çifti ve erase-remove deyimine dair tuzaklar.
- SıralamaC++'ta vektörleri ve dizileri `std::sort` ile sıralayın: varsayılan sıra, özel karşılaştırıcılar, struct'ları bir alana göre sıralama ve çökmelere yol açan katı zayıf sıralama tuzağı.
- Template'lerKodu bir kez yazın ve C++ template'leri sayesinde her tür için çalışmasını sağlayın: fonksiyon template'leri, sınıf template'leri, tür çıkarımı ve neden olduğu kafa karıştırıcı derleyici hataları.
Sınıflar ve nesneler
- SınıflarC++ sınıflarının veriyi ve davranışı yeniden kullanılabilir tiplerde nasıl bir araya getirdiğini öğren: üye değişkenler ve metotlar tanımlama, nesne oluşturma, public/private ayrımı ve ilklendirilmemiş üyeler ile this işaretçisi gibi tuzaklar.
- KurucularKurucu (constructor), bir nesne oluşturulduğunda çalışan özel üye fonksiyondur. Varsayılan, parametreli ve kopya kurucularını, üye başlatma listelerini ve nesneleri yarım başlatılmış halde bırakmaktan nasıl kaçınılacağını öğrenin.
- YıkıcılarBir yıkıcı, bir nesne yok edildiğinde otomatik olarak çalışır. `~SınıfAdı()` söz dizimini, ne zaman tetiklendiğini, kaynakları neden serbest bıraktığını ve Üçler/Beşler Kuralı'nı öğrenin.
- KalıtımC++ kalıtımının bir türetilmiş sınıfın bir temel sınıfı nasıl yeniden kullanıp genişletmesine olanak tanıdığını öğrenin: sözdizimi, public ve private kalıtım, yapıcı ve yıkıcı sırası ve nesne dilimleme (slicing) gibi tuzaklar.
- Sanal FonksiyonlarSanal fonksiyonlar, bir temel sınıf işaretçisinin çalışma zamanında türetilmiş sınıfın metot sürümünü çağırmasını sağlar. `virtual`, `override`, soyut sınıfları ve temel sınıfın yıkıcısının neden sanal olması gerektiğini öğrenin.
- Operatör Aşırı YüklemeC++ operatör aşırı yükleme, kendi türlerinizin +, == ve << gibi yerleşik operatörlerle çalışmasını sağlar. Üye ve üye olmayan fonksiyon kurallarını, karşılaştırma ve akış operatörlerini nasıl aşırı yükleyeceğinizi ve dönüş türleri ile atama operatörü etrafındaki tuzakları öğrenin.
- Erişim Belirleyicileripublic, private ve protected'in C++'ta bir sınıfın üyelerine kimin dokunabileceğini nasıl denetlediği - kapsüllemenin temeli, getter'lar, setter'lar ve friend kaçış kapısıyla birlikte.
- Struct'larC++ struct'lar açıklandı: ilişkili değişkenleri tek bir tipte nasıl toplarsınız, struct nesnelerini nasıl tanımlar ve başlatırsınız, bir struct'a nasıl üye fonksiyon ve kurucu eklersiniz ve struct'ın class'tan gerçekte ne farkı vardır.
- enum'larC++ enum'larını öğren: nasıl tanımlanır, kapsamlı enum class neden düz enum'dan daha güvenlidir, özel temel değerler, enumeratörler üzerinde switch ve tam sayılara dönüştürme ile tam sayılardan dönüştürme.
Hatalar ve hata ayıklama
- İstisnalarİstisnalar, bir fonksiyonun yerel olarak ele alamadığı hataları bildirir. `throw` kullanmayı, standart istisna türlerinin neler olduğunu, `what()` mesajını ve gerçekten önemli olan hatalarda istisnaların neden dönüş kodlarından üstün olduğunu öğrenin.
- try-catchRiskli kodu `try` içine sarın, `catch` içinde tepki verin. İstisnaları const referansla yakalamayı, birden fazla işleyiciyi sıralamayı, `catch (...)` kullanmayı ve kaynak sızdırmadan yeniden fırlatmayı öğrenin.
- Tanımsız DavranışTanımsız davranış (UB), C++ standardının hiçbir kural koymadığı koddur; çökebilir, veriyi bozabilir veya çalışıyormuş gibi görünebilir. Yaygın nedenleri, "sorunsuz çalıştı" demenin neden hiçbir şey kanıtlamadığını ve UB'yi yakalayan araçları öğrenin.