Leanpub Header

Skip to main content

C++ Başvuru Kitabı

Temel ve İleri Seviyeler — İki Cilt Bir Arada

C++ Başvuru Kitabı

Necati Ergin'in C++ ve İleri C++ kurslarındaki ders notlarından, kendisinin izniyle derlenmiş iki ciltlik Türkçe başvuru kitabı. Cilt I yeni mezunun ilk yılında ihtiyaç duyacaklarını, Cilt II kıdemli geliştiricinin bilmesi gerekenleri kapsıyor. 226 sayfa, 46 bölüm. Necati Ergin'in C++ ve İleri C++ kurslarındaki ders notlarından, kendisinin izniyle derlenmiş iki ciltlik Türkçe başvuru kitabı. Cilt I yeni mezunun ilk yılında ihtiyaç duyacaklarını, Cilt II kıdemli geliştiricinin bilmesi gerekenleri kapsıyor. 226 sayfa, 46 bölüm. Ücretsizdir.

Minimum price

Free!

$1.00

You pay

Author earns

$

Also available for 1 book credit with a Reader Membership

PDF
About

About

About the Book

Necati Ergin'in C++ ve İleri C++ kurslarında tutulmuş ders notlarından derlenmiş, iki ciltlik Türkçe başvuru kitabı. 226 sayfa, 46 bölüm. Kendisinin izniyle yayımlanmaktadır.

Kitap neden iki cilt?

Cilt I, yeni mezun bir C++ geliştiricisinin ilk yılında bilmesi gerekenleri kapsıyor: her konu, o aracı doğru kullanabilmeye yetecek kadar anlatılıyor. Cilt II ise araçların iç yapısını, tasarım gerekçelerini ve kütüphane yazarken gereken teknikleri ele alıyor.

İki cilt kümülatif okunmak üzere yazıldı. Bağlayıcı kural şu: Cilt I, Cilt II'nin geri almak zorunda kalacağı hiçbir şey söylemez. Basitleştirme vardır, yanıltma yoktur. Cilt I bölümlerinin sonundaki geçiş kutuları, o konunun Cilt II'de nereden devam ettiğini gösteriyor.

Notlardan kitaba nasıl gelindi?

Ders notları tarihe göre sıralı düz metindi; bir konu birkaç derse yayılıyor, aynı konu iki not setinde farklı derinlikte iki kez anlatılıyordu. Ders sırası bırakılıp konu sırasına geçildi. Örnek olarak, değer kategorileri iki dosyada 53 ayrı yerde geçiyordu; bunların dördü konuyu anlatan, kırk dokuzu kullanan pasajdı. Anlatanlar tek bölümde toplandı.

İki not farklı şey söylediğinde kaynağı araştırıldı. Dilin davranışının gerçekten değiştiği yerlerde eski ve yeni anlatım birlikte korundu; kitapta on üç "Standart Notu" kutusu var ve dokuzu C++17 ile C++20'de toplanıyor.

Bölüm sıralaması olarak hocanın kendi müfredat sıralaması kullanıldı.

Şeffaflık notu

Notların yeniden yapılandırılması ve metnin yazımı Claude ile birlikte yürütüldü. Yapının kurulması, cilt ayrımının ölçütü ve hangi notun nereye gideceği kararları bana aittir.

Kitabın dört alt başlığı iki not setinde de bulunmuyordu; bunlar dışarıdan yazıldı ve örnekleri bu çalışmaya aittir: devreden kurucu işlevler, data race, std::byte ve mixin sınıflar. Kitabın geri kalanı ders notlarına dayanmaktadır.
Bu kitap ücretsizdir.

Ticari bir beklentim yok. Amacım, Türkçe C++ kaynağına mütevazı bir katkıda bulunmak. Hocanın emeğiyle ortaya çıkmış bir birikimin daha geniş bir okuyucuya ulaşmasına aracılık edebilirsem, bu çalışma amacına ulaşmış olur.

Kitapta yanlış, eksik veya belirsiz bulduğunuz yerleri bana iletirseniz sevinirim; düzeltmeler sürüm numarası artırılarak yayımlanacaktır.

Share this book

Categories

Author

About the Author

Ahmet Kandemir Pehlivanlı

İstanbul Havalimanı'nda elektrik sistemleri mühendisi olarak çalışıyorum; aynı zamanda İstanbul Üniversitesi'nde Biyomedikal Mühendisliği yüksek lisansı yapıyorum. Leanpub'da yayımladığım çalışmalar, katıldığım kurslarda tuttuğum ders notlarından derlenmiş Türkçe kaynaklardır. Hepsi ücretsizdir; amacım Türkçe teknik kaynak birikimine mütevazı bir katkıda bulunmak.

Contents

Table of Contents

  • CİLT I — TEMEL
  • Kısım 0 — C++'a Giriş
    • 0.1 Dil hakkında
    • 0.2 Standartlar
    • 0.3 Derleme süreci
    • 0.4 Başlık ve kaynak dosya ayrımı
    • 0.5 İlk program
  • Kısım 1 — C ve C++ İçindeki C
    • 1.1 C++ bir C üst kümesi değildir
    • 1.2 Tür sistemi farkları
    • 1.3 const farkları
    • 1.4 void* dönüşümleri
    • 1.5 NULL ve nullptr
    • 1.6 İşlev bildirimleri
    • 1.7 Operatörlerin değer kategorileri
    • 1.8 enum farkları
    • 1.9 Etiket isimleri
    • 1.10 C kütüphanesini C++'tan çağırmak
  • Kısım 2 — Temel Kavramlar
    • 2.1 Bildirim ve tanım
    • 2.2 Kapsam
    • 2.3 İsim arama
    • 2.4 L-Value ve R-Value
    • 2.5 Tanımsız davranış ve akrabaları
    • 2.6 Tamamlanmış ve tamamlanmamış türler
    • 2.7 One Definition Rule
    • 2.8 Sabitlerin yazımı
  • Kısım 3 — İlk Değer Verme
    • 3.1 Beş biçim
    • 3.2 Default-initialization
    • 3.3 Value-initialization
    • 3.4 Direct-initialization
    • 3.5 Copy-initialization
    • 3.6 Direct-list-initialization
    • 3.7 Daraltıcı dönüşüm
    • 3.8 Most vexing parse
    • 3.9 Hangisini kullanmalı
    • 3.10 Bileşik nesnelere ilk değer verme
  • Kısım 4 — Tür Çıkarımı
    • 4.1 auto
    • 4.2 Üç çıkarım kalıbı
    • 4.3 Dizi ve işlev isimlerinin çürümesi
    • 4.4 auto ne zaman kullanılmalı
    • 4.5 auto x{...} tuzağı
    • 4.6 Sondan yazılan geri dönüş türü
  • Kısım 5 — enum ve enum class
    • 5.1 Numaralandırma türleri
    • 5.2 Kapsamlandırılmamış enum'un üç sorunu
    • 5.3 enum class
    • 5.4 using enum
  • Kısım 6 — Sabitler
    • 6.1 const değişkenler
    • 6.2 C++'a özgü iki fark
    • 6.3 Göstericilerde constun iki yeri
    • 6.4 Okuma / yazma ayrımı
    • 6.5 constexpr değişkenler
    • 6.6 constexpr işlevler
  • Kısım 7 — Varsayılan Argümanlar
    • 7.1 Ne işe yarar
    • 7.2 Üç kural
    • 7.3 Çift anlamlılık tuzağı
    • 7.4 İmzanın parçası değildir
  • Kısım 8 — Referanslar
    • 8.1 Referans nedir
    • 8.2 İki değişmez kural
    • 8.3 const referanslar ve geçici nesneler
    • 8.4 Tür uyumu
    • 8.5 İşlev parametresi olarak referanslar
    • 8.6 Geri dönüş değeri olarak referanslar
    • 8.7 Referans mı gösterici mi
    • 8.8 Diziye ve işleve referans
    • 8.9 Üçüncü referans türü
  • Kısım 9 — İşlev Yüklemesi ve Yükleme Çözümlemesi
    • 9.1 Ne zaman yükleme vardır
    • 9.2 İmza neyi içerir
    • 9.3 Üç aşama
    • 9.4 Uygun aday listesi
    • 9.5 Dönüşüm hiyerarşisi
    • 9.6 Standart dönüşümlerin içindeki sıra
    • 9.7 Birden fazla parametre
    • 9.8 Varsayılan argümanlar ve çift anlamlılık
    • 9.9 extern "C"
  • Kısım 10 — Tür Dönüştürme Operatörleri
    • 10.1 Neden dört ayrı operatör
    • 10.2 static_cast
    • 10.3 const_cast
    • 10.4 reinterpret_cast
    • 10.5 dynamic_cast
    • 10.6 Hangisini ne zaman
  • Kısım 11 — inline
    • 11.1 Çözdüğü problem
    • 11.2 Ne demek değil
    • 11.3 Örtülü olarak inline olanlar
    • 11.4 inline değişkenler
  • Kısım 12 — Sınıflar
    • 12.1 Sınıf nedir
    • 12.2 Sınıf bloğunun öğeleri
    • 12.3 Erişim kontrolü
    • 12.4 Sınıf kapsamı ve isim arama
    • 12.5 Üye işlevlerin tanımlanması
    • 12.6 this göstericisi
    • 12.7 const üye işlevler
    • 12.8 Kurucu işlev
    • 12.9 Sonlandırıcı işlev
    • 12.10 Kurucu işlev ilk değer verme listesi
    • 12.11 Sınıf içi ilk değer verme
    • 12.12 Devreden kurucu işlevler
    • 12.13 Dönüştüren kurucu işlev ve explicit
    • 12.14 static üyeler
    • 12.15 mutable
    • 12.16 friend bildirimleri
    • 12.17 Geçici nesneler
    • 12.18 İçsel türler
  • Kısım 13 — Özel Üye İşlevler
    • 13.1 Altı işlev
    • 13.2 Derleyici ne zaman yazar
    • 13.3 Kopyalayan kurucu işlev ne zaman çağrılır
    • 13.4 Kopyalayan atama işlevi
    • 13.5 Varsayılan kopyalamanın yetmediği yer
    • 13.6 Big-Three
    • 13.7 Taşıma
    • 13.8 Big-Five
    • 13.9 Rule of Zero
    • 13.10 = default ve = delete
    • 13.11 Sık yapılan hatalar
    • 13.12 Değer döndürmekten çekinmeyin
  • Kısım 14 — Operatör Yüklemesi
    • 14.1 Amaç
    • 14.2 Kurallar
    • 14.3 Üye mi, global mi
    • 14.4 friend ve ADL bağlantısı
    • 14.5 Sık yüklenen operatörler
    • 14.6 Önek ve sonek ayrımı
    • 14.7 Bit bayrakları
  • Kısım 15 — Dinamik Ömürlü Nesneler
    • 15.1 Dört ömür kategorisi
    • 15.2 new ve delete
    • 15.3 Üç klasik hata
    • 15.4 Bellek yetmezse
    • 15.5 Bunları neden yazmamalısınız
  • Kısım 16 — Tür Eş İsimleri ve İsim Alanları
    • 16.1 Tür eş isimleri
    • 16.2 İsim alanları
    • 16.3 using bildirimi ve using direktifi
    • 16.4 İsimsiz isim alanları
    • 16.5 Argümana bağlı isim arama
    • 16.6 inline isim alanları
  • Kısım 17 — Kalıtım
    • 17.1 Kalıtım ne işe yarar
    • 17.2 Sözdizimi ve varsayılan kalıtım biçimi
    • 17.3 Türemiş nesne nasıl hayata gelir
    • 17.4 upcasting
    • 17.5 İsim arama: türemiş sınıf taban sınıfı gizler
    • 17.6 Çalışma zamanı çok biçimliliği
    • 17.7 Sanal sonlandırıcı işlev
    • 17.8 Soyut sınıflar
    • 17.9 Nesne dilimlenmesi
    • 17.10 Kaçınılması gereken üç şey
  • Kısım 18 — Exception Handling
    • 18.1 İki yaklaşım
    • 18.2 try, catch, throw
    • 18.3 Değerle gönder, referansla yakala
    • 18.4 Standart hata sınıfları
    • 18.5 Yığının geri sarılması
    • 18.6 Asıl cevap: RAII
    • 18.7 Nerede yakalamalı
    • 18.8 Sonlandırıcı işlevler hata göndermemeli
    • 18.9 Kurucu işlevde hata
  • Kısım 19 — Çalışma Zamanı Tür Bilgisi
    • 19.1 Ne işe yarar
    • 19.2 dynamic_cast
    • 19.3 typeid ve std::type_info
    • 19.4 Ne zaman kullanmamalı
  • Kısım 20 — std::string
    • 20.1 Neden char* değil
    • 20.2 Oluşturma ve temel işlemler
    • 20.3 Arama ve npos
    • 20.4 Değiştirme işlemleri
    • 20.5 C arayüzleriyle köprü
    • 20.6 Küçük yazı optimizasyonu
  • Kısım 21 — Bileşik Nesneler
    • 21.1 has-a ilişkisi
    • 21.2 Hayata gelme sırası
    • 21.3 Özel üye işlevler ve composition
    • 21.4 Arayüz devretme
    • 21.5 İçsel türler
  • Kısım 22 — Şablonlara Giriş
    • 22.1 Jenerik programlama
    • 22.2 İşlev şablonları
    • 22.3 Şablon parametresi türleri
    • 22.4 Sınıf şablonları
    • 22.5 Örnekleme
    • 22.6 Bundan sonrası
  • Kısım 23 — STL
    • 23.1 Üç bileşen
    • 23.2 İteratörler
    • 23.3 Aralık tabanlı for
    • 23.4 Kaplar
    • 23.5 Ortak işlemler
    • 23.6 İteratör geçersizleşmesi
    • 23.7 Algoritmalar
  • Kısım 24 — Lambda İfadeleri
    • 24.1 Ne olduğu
    • 24.2 Sözdizimi
    • 24.3 Yakalama
    • 24.4 Yakalanan değişkeni değiştirmek
    • 24.5 Nereye kadar
  • Kısım 25 — Akıllı Göstericiler
    • 25.1 Çözdükleri problem
    • 25.2 std::unique_ptr
    • 25.3 std::shared_ptr
    • 25.4 std::weak_ptr
    • 25.5 Hangisini seçmeli
  • Kısım 26 — Giriş–Çıkış Akımları
    • 26.1 Hiyerarşi
    • 26.2 Biçimli giriş–çıkış
    • 26.3 Akımın durumu
    • 26.4 Manipülatörler
    • 26.5 Dosya akımları
    • 26.6 Yazı akımları
    • 26.7 Kendi türünüz için <<
    • 26.8 Biçimlendirme için ayrı bir araç
  • Kısım 27 — Eşzamanlılığa Giriş
    • 27.1 İş parçacığı
    • 27.2 Data race
    • 27.3 mutex ve lock_guard
    • 27.4 Bundan sonrası
  • CİLT II — İLERİ
  • Kısım 1 — Değer Kategorileri ve Referans Semantiği
    • 1.1 Değer Kategorilerinin Tam Modeli
    • 1.2 Forwarding Reference
  • Kısım 2 — Taşıma Semantiği ve Bildirim Kuralları
    • 2.1 Üç statü
    • 2.2 Bildirim baskılama tablosu
    • 2.3 Kopyalanabilirlik ve taşınabilirlik tasarımı
    • 2.4 = default'un yeri önemlidir
    • 2.5 Kaynağı devralınmış nesnenin durumu
    • 2.6 noexcept ve taşıma
    • 2.7 Taşımanın sessizce devre dışı kaldığı iki senaryo
    • 2.8 Copy-and-Swap deyimi
  • Kısım 3 — Kopyalama Eliminasyonu
    • 3.1 Ne zaman söz konusudur
    • 3.2 İki tür
    • 3.3 Zorunlu eliminasyon
    • 3.4 NRVO — hâlâ bir optimizasyon
    • 3.5 Eliminasyonu engelleyen yazımlar
    • 3.6 Yan etkili kopyalama işlevleri
    • 3.7 Özet
  • Kısım 4 — İleri Şablon Teknikleri
    • 4.1 Şablon parametrelerinin dört grubu
    • 4.2 Örnekleme
    • 4.3 Tam özelleştirme
    • 4.4 Kısmi özelleştirme
    • 4.5 Değişken sayıda parametre
    • 4.6 Katlama ifadeleri
    • 4.7 CTAD ve deduction guide
    • 4.8 SFINAE
    • 4.9 İki aşamalı isim arama
    • 4.10 Eş isim ve değişken şablonları
    • 4.11 Kendi iteratörünüzü yazmak
    • 4.12 Yardımcı iteratörler
    • 4.13 Demeti argüman listesine açmak
  • Kısım 5 — Derleme Zamanı Araçları
    • 5.1 Meta işlev kavramı
    • 5.2 std::integral_constant
    • 5.3 type_traits
    • 5.4 if constexpr
    • 5.5 std::declval
    • 5.6 static_assert
    • 5.7 std::type_identity
  • Kısım 6 — Kalıtımın İç Yapısı ve İleri Kullanımları
    • 6.1 Sanal gönderim nasıl çalışır
    • 6.2 Sanal gönderimin devreye girmediği yerler
    • 6.3 Statik tür üzerinden çözülen üç şey
    • 6.4 Covariance
    • 6.5 Sanal kurucu işlev deyimi
    • 6.6 NVI — Non-Virtual Interface
    • 6.7 private ve protected kalıtım
    • 6.8 Empty Base Optimization
    • 6.9 Kısıtlı çok biçimlilik
    • 6.10 Çoklu kalıtım
    • 6.11 Elmas formasyonu ve sanal kalıtım
    • 6.12 Fragile Base Class Problem
    • 6.13 Çalışma zamanı çok biçimliliğine alternatifler
  • Kısım 7 — Concepts
    • 7.1 Çözdüğü problem
    • 7.2 requires cümlesi
    • 7.3 Kavram tanımlamak
    • 7.4 requires ifadesi
    • 7.5 Kısaltılmış yazımlar
    • 7.6 Standart kavramlar
    • 7.7 Kısıt sıralaması
    • 7.8 SFINAE'nin yerini alması
  • Kısım 8 — Ranges ve Views
    • 8.1 STL'in ikinci sürümü
    • 8.2 range bir tür değil, bir kavramdır
    • 8.3 Sentinel
    • 8.4 view kavramı
    • 8.5 Tembel değerlendirme
    • 8.6 Aralık uyumlandırıcıları ve fabrikaları
    • 8.7 Boru hattı
    • 8.8 Yardımcı görünümler
    • 8.9 İzdüşüm
    • 8.10 Sarkma koruması
    • 8.11 Kaptan görünüme, görünümden kaba
  • Kısım 9 — Coroutines
    • 9.1 Askıya alınabilen işlev
    • 9.2 Üç anahtar sözcük
    • 9.3 Geri dönüş türü sözleşmesi
    • 9.4 Eşyordam çerçevesi
    • 9.5 co_await ve beklenebilir nesneler
    • 9.6 İş parçacıklarıyla ilişki
    • 9.7 C++20'de eksik olan
  • Kısım 10 — std::format
    • 10.1 Çözdüğü problem
    • 10.2 Temel kullanım
    • 10.3 Biçim belirtme dili
    • 10.4 Kendi türünüz için biçimlendirici
    • 10.5 Çıktıyı yönlendirmek
    • 10.6 std::print
    • 10.7 Akımların yerini alıyor mu
  • Kısım 11 — Vocabulary Türleri
    • 11.1 Ortak amaç
    • 11.2 std::string_view
    • 11.3 std::span
    • 11.4 std::optional
    • 11.5 std::variant
    • 11.6 std::any
    • 11.7 std::byte
  • Kısım 12 — İleri Lambda Teknikleri
    • 12.1 Kapanış türünün anatomisi
    • 12.2 mutable ve çağrı operatörünün constluğu
    • 12.3 İlk değerli yakalama
    • 12.4 Genelleştirilmiş lambda
    • 12.5 Hemen çağrılan lambda
    • 12.6 Özyinelemeli lambda
  • Kısım 13 — İleri Hata Yönetimi
    • 13.1 Garanti seviyeleri
    • 13.2 noexcept belirteci ve operatörü
    • 13.3 noexcept ve geçersiz kılma
    • 13.4 std::exception_ptr
    • 13.5 İşlev try blokları
  • Kısım 14 — Deyimler ve Kalıplar
    • 14.1 Deyim nedir
    • 14.2 Kapsülleme deyimleri
    • 14.3 Çok biçimlilik deyimleri
    • 14.4 İsim arama ve gönderim deyimleri
    • 14.5 Kaynak ve ömür deyimleri
    • 14.6 Hata yönetimi deyimleri
    • 14.7 Karma fonksiyonu özelleştirme
    • 14.8 Mixin sınıflar
  • Kısım 15 — Eşzamanlılık
    • 15.1 Bellek modeli
    • 15.2 İş parçacığı yönetimi
    • 15.3 Kilit türleri
    • 15.4 std::condition_variable
    • 15.5 std::future ve std::promise
    • 15.6 std::async
    • 15.7 std::packaged_task
    • 15.8 Atomik işlemler
    • 15.9 Paralel algoritmalar
    • 15.10 Ayırıcı darboğazı
  • Kısım 16 — Sınıfların ve Operatörlerin İleri Araçları
    • 16.1 Tür dönüştürme operatör işlevleri
    • 16.2 Referans niteleyicili üye işlevler
    • 16.3 Açık nesne parametresi
    • 16.4 Üç yollu karşılaştırma
    • 16.5 Kullanıcı tanımlı literal operatörleri
    • 16.6 Bileşik türler
  • Kısım 17 — Nesne Ömrü ve Bellek Yönetimi
    • 17.1 new ifadesi ile operator new farkı
    • 17.2 Sınıf düzeyinde yükleme
    • 17.3 placement new
    • 17.4 std::set_new_handler
    • 17.5 Statik ömürlü nesnelerin hayata gelme sırası
    • 17.6 Ömrün uzatılmasının iki istisnası
    • 17.7 std::allocator
    • 17.8 Hizalama
  • Kısım 18 — Derleme Zamanı Hesaplamanın Evrimi
    • 18.1 constexpr işlevlerin gevşeyen kısıtları
    • 18.2 constexpr sınıflar ve kurucu işlevler
    • 18.3 consteval
    • 18.4 constinit

The Leanpub 60 Day 100% Happiness Guarantee

Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

See full terms...

Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earned over $15 million writing, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub