C++ adalah bahasa pemrograman yang dipakai untuk membangun sistem operasi, game engine, database, hingga aplikasi berperforma tinggi. Pada Course ini, kita mempelajari C++ secara bertahap mulai dari sintaks dasar, object-oriented programming, manajemen memori, standard library, hingga membangun proyek nyata yang terstruktur.

Bab 2 Persiapan Lingkungan

# Memilih Compiler

Kriteria memilih compiler C++, perbandingan GCC, Clang, dan MSVC, serta cara bereksperimen cepat lewat Compiler Explorer.

Buka →
# Instalasi GCC dan g++

Memasang GCC/g++ di Ubuntu-Debian, Fedora, Windows (MSYS2), dan macOS (Homebrew), verifikasi instalasi, serta anatomi direktorinya.

Buka →
# Instalasi Clang

Mengenal Clang dan LLVM, instalasi Clang di tiap platform, verifikasi clang++, serta kapan Clang menjadi pilihan yang tepat.

Buka →
# Visual Studio dan MSVC

Memasang Visual Studio Community dengan workload C++, memakai compiler cl.exe dan Developer Command Prompt, serta perbandingan flag-nya dengan g++.

Buka →
# Menggunakan IDE dan Editor

Perbandingan Visual Studio, VS Code, CLion, Qt Creator, dan Neovim dengan clangd, plus apa yang sebenarnya diberikan IDE bagi pemula C++.

Buka →
# Kompilasi Program

Anatomi perintah g++, flag penting (-std, -Wall, -Wextra, -g, -O0/-O2, -o), error vs warning, exit code kompilasi, dan kompilasi multi-file.

Buka →
# Proses Kompilasi dan Linking

Empat tahap dari source code ke executable — preprocessor, kompilasi, assembler, dan linking — didemonstrasikan langsung dengan flag g++ pada tiap tahap.

Buka →
# Menjalankan Program

Cara menjalankan executable di Linux/macOS dan Windows, peran PATH dan izin eksekusi, exit code, serta meneruskan argumen program lewat argv.

Buka →
# Memilih Standar C++

Arti flag -std=c++17/20/23, perbedaan mode ISO dan mode GNU (-std=gnu++23), kompatibilitas kode lama, dan rekomendasi standar untuk proyek baru.

Buka →

Bab 3 Dasar Pemrograman

# Fungsi main()

Mengenal fungsi main() sebagai entry point program C++: bentuk-bentuk yang legal, arti return value, dan cara menerima argumen dari terminal.

Buka →
# Header dan #include

Memahami header file, perbedaan #include <...> dan #include "...", header standar yang sering dipakai, serta cara preprocessor menyisipkan isinya.

Buka →
# Namespace

Mengenal namespace sebagai wadah nama: menghindari tabrakan nama, kualifikasi std::, deklarasi using, namespace bersarang, dan namespace anonim.

Buka →
# Pernyataan dan Ekspresi

Membedah unit terkecil program C++: pernyataan yang diakhiri titik koma, ekspresi yang menghasilkan nilai, blok { }, dan kebebasan format whitespace.

Buka →
# Komentar

Menulis catatan di dalam kode C++: komentar satu baris dan blok, larangan komentar bersarang, serta kapan komentar diperlukan dan kapan kode cukup bicara sendiri.

Buka →
# Output dengan cout

Mencetak data ke terminal dengan std::cout: operator <<, chaining, endl versus , serta cara C++ menampilkan angka, karakter, dan boolean.

Buka →
# Input dengan cin

Membaca data dari pengguna dengan std::cin: operator >>, membaca beberapa nilai, perilaku string yang berhenti di whitespace, getline, dan pengenalan kegagalan input.

Buka →
# Input-Output dengan cerr

Mengenal std::cerr dan std::clog sebagai saluran pesan galat dan log: perbedaan dengan std::cout, arti stream tidak dibuffer, serta cara memisahkannya lewat redirect.

Buka →
# Escape Sequences

Menguasai escape sequences C++: baris baru, tab, backslash, kutip, karakter nul, carriage return, unicode escape, hingga raw string literal.

Buka →
# Kompilasi Program Pertama

Menyatukan seluruh materi section: menyusun program sapa-pengguna, mengompilasinya dengan g++, memeriksa exit code, dan membaca pesan error nyata dari tiga kesalahan klasik pemula.

Buka →

Bab 4 Variabel dan Tipe Data

# Deklarasi Variabel

Mengenal anatomi deklarasi variabel di C++: kombinasi tipe dan nama, beberapa declarator dalam satu baris, perbedaan deklarasi dengan definisi, serta risiko variabel tanpa nilai awal.

Buka →
# Inisialisasi Variabel

Membedah tiga bentuk inisialisasi variabel di C++: copy initialization dengan =, direct initialization dengan tanda kurung, dan list initialization dengan kurung kurawal beserta pengaman narrowing-nya.

Buka →
# Aturan Penamaan

Syarat nama variabel yang sah menurut standar C++, pesan error untuk nama ilegal, kata kunci yang tak boleh dipakai, serta konvensi camelCase dan snake_case untuk kode yang mudah dibaca.

Buka →
# Tipe Data Fundamental

Peta lengkap tipe fundamental C++: keluarga integral, floating-point, character, boolean, dan void, serta perbedaan tipe objek dengan tipe fungsi.

Buka →
# Integer

Keluarga tipe integer di C++: short, int, long, dan long long beserta ukuran minimalnya, empat basis penulisan literal, dan digit separator sejak C++14.

Buka →
# Floating-Point

Tipe floating-point di C++: float, double, dan long double, cara menulis literalnya, perilaku presisi default cout, serta kapan memilih double atau float.

Buka →
# char dan bool

Tipe char beserta keluarganya untuk teks Unicode, sifat char sebagai integer kecil, tipe bool dengan true dan false, serta manipulator boolalpha.

Buka →
# Signed dan Unsigned

Perilaku tipe signed versus unsigned: rentang nilai, wrap-around yang terdefinisi, jebakan mencampur keduanya dalam perbandingan, suffix literal, dan rekomendasi praktis.

Buka →
# auto dan Type Deduction

Kata kunci auto untuk variabel: aturan deduksi tipe oleh compiler, kehilangan reference dan const pada salinan, syarat initializer, serta sekilas decltype.

Buka →
# const dan constexpr

Kata kunci const untuk variabel read-only dan constexpr untuk perhitungan saat kompilasi, perbedaan keduanya, static_assert, serta pengantar literal type.

Buka →
# Konversi Tipe Data

Cara nilai berpindah antar tipe di C++: konversi implisit dan promotion, integer division yang menyesatkan, static_cast sebagai konversi eksplisit, dan batas aman versus kehilangan data.

Buka →
# Narrowing Conversion

Konversi yang mempersempit tipe dan bisa mengubah nilai: mengapa bentuk = membiarkannya lewat tanpa suara, kurung kurawal menolaknya sejak kompilasi, dan static_cast sebagai pernyataan eksplisit.

Buka →
# Type Alias dengan using

Pelajari cara membuat nama baru untuk tipe data dengan using agar deklarasi panjang lebih mudah dibaca dan dipelihara.

Buka →
# sizeof dan limits

Pelajari cara menanyakan ukuran tipe dengan sizeof dan batas nilai tiap tipe melalui numeric_limits pada platform Anda.

Buka →

Bab 5 Operator

# Operator Aritmetika

Gunakan operator +, -, *, /, dan % dengan benar: perbedaan pembagian integer dan floating-point, sisa bagi, serta unary minus.

Buka →
# Operator Penugasan

Simpan nilai ke variabel dengan =, ringkas operasi berulang dengan compound assignment, dan pahami bahwa penugasan juga menghasilkan nilai.

Buka →
# Operator Perbandingan

Bandingkan dua nilai dengan ==, !=, <, >, <=, >= yang menghasilkan bool; kenali jebakan perbandingan floating-point dan operator spaceship <=>.

Buka →
# Operator Three-Way Comparison

Tulis operator<=> kustom saat = default tidak mencukupi: pilih kategori urutan yang tepat, atur urutan member, dan lengkapi == agar enam operator perbandingan tersedia.

Buka →
# Operator Logika

Gabungkan nilai bool dengan &&, ||, dan !; pahami short-circuit evaluation yang melewati sisi kanan ekspresi, serta urutan kekuatan ketiganya.

Buka →
# Operator Increment dan Decrement

Naikkan dan turunkan nilai satu langkah dengan ++ dan --; pahami perbedaan prefix dan postfix serta kapan masing-masing dipakai.

Buka →
# Operator Bitwise

Bekerja di level bit dengan &, |, ^, ~, <<, dan >>: logika per bit, geser sebagai kali/bagi pangkat dua, serta pola set, check, dan clear bit.

Buka →
# Operator Ternary

Pilih salah satu dari dua nilai berdasarkan kondisi dengan operator ternary ?: dan pahami aturan tipe kedua cabangnya.

Buka →
# Operator Scope

Gunakan operator scope resolution :: untuk menunjuk nama global, nama namespace, dan nama class, serta atasi variabel yang saling menutupi (shadowing).

Buka →
# Operator Cast

Ubah tipe secara eksplisit dengan static_cast, dan kenali dynamic_cast, const_cast, reinterpret_cast, serta alasan C-style cast dihindari.

Buka →
# Operator sizeof

Ukur ukuran tipe dan ekspresi dalam byte dengan operator sizeof, kenali jaminan sizeof(char) == 1, dan bandingkan dengan alignof.

Buka →
# Precedence dan Associativity

Pahami urutan kekuatan operator (precedence) dan arah pengelompokannya (associativity), serta bedanya dengan urutan evaluasi operand.

Buka →
# Operator Overflow dan Batasan

Kenali batas tipe integer, perilaku wrap aritmetika unsigned yang modular, bahaya signed overflow sebagai undefined behavior, dan strategi menghitung dengan aman.

Buka →

Bab 6 Control Flow

# if

Pernyataan if untuk menjalankan blok kode hanya bila kondisi terpenuhi: bentuk dasar, aturan kondisi, kesalahan = vs ==, dan inisialisasi di dalam kondisi.

Buka →
# if-else

Percabangan dua jalur dengan if-else: blok alternatif, bersarang, aturan kurung kurawal, dan bahaya dangling else.

Buka →
# else if

Rantai else if untuk menguji banyak kondisi berurutan: evaluasi berhenti di kondisi pertama yang benar, urutan kondisi menentukan hasil, dan kapan switch menjadi alternatif.

Buka →
# switch

Pernyataan switch untuk memilih aksi berdasarkan nilai tetap: case, break, default, perilaku fallthrough beserta atribut [[fallthrough]], dan batasannya pada tipe data.

Buka →
# for Loop

Loop for dengan tiga klausa init, kondisi, dan iterasi: scope variabel loop, variasi multi-variabel dan klausa kosong, serta perbandingannya dengan while.

Buka →
# while Loop

Loop while sebagai pre-test loop: mengulang selama kondisi benar, kapan lebih tepat daripada for, dan pola input sentinel dengan cin.

Buka →
# do-while Loop

Loop do-while sebagai post-test loop: badan dijalankan minimal sekali, pola validasi input, dan program menu yang berulang.

Buka →
# range-based for

Loop range-based for untuk mengunjungi setiap elemen koleksi: array, std::string, std::vector, by value versus by reference, dan initializer_list.

Buka →
# break dan continue

Kendali halus di dalam loop: break untuk keluar lebih awal, continue untuk melompati sisa putaran, perbedaannya pada for dan while, serta batasan penggunaannya.

Buka →
# return

Pernyataan return: mengakhiri fungsi main dengan exit code, pola early return, return pada fungsi void, dan perilakunya di dalam loop.

Buka →
# Nested Loop

Loop di dalam loop: pola tabel dan matriks, hitungan iterasi berlipat, dan mengapa break hanya keluar dari loop terdalam beserta solusinya.

Buka →
# Scope dan Lifetime Variabel

Di mana sebuah nama variabel boleh dipakai (scope) dan sampai kapan nilainya bertahan (lifetime): block scope, file scope, shadowing, static lokal, dan best practice.

Buka →

Bab 7 Fungsi

# Mendefinisikan Fungsi

Struktur definisi fungsi C++: return type, nama, parameter list, dan body, beserta aturan urutan penulisan terhadap main().

Buka →
# Deklarasi dan Function Prototype

Bedah deklarasi (prototype) versus definisi fungsi, mengapa prototipe dibutuhkan, dan praktik menaruh prototipe di header.

Buka →
# Parameter dan Argumen

Perbedaan parameter dan argumen, pemetaan posisi, serta desain fungsi dengan nol hingga beberapa parameter bertipe berbeda.

Buka →
# Return Value

Tipe kembalian fungsi, return pada banyak jalur, aturan return type wajib di C++, dan kasus khusus main() tanpa return.

Buka →
# Pass by Value

Mekanisme pass-by-value di C++: argumen disalin ke parameter, perubahan di dalam fungsi tidak memengaruhi pemanggil, dan biaya salinannya.

Buka →
# Pass by Reference

Parameter reference (int&) sebagai alias variabel pemanggil: perubahan terlihat, pola out parameter, dan kapan memakainya.

Buka →
# Pass by Const Reference

Parameter const& : kehematan reference tanpa risiko perubahan, aturan praktis memilih cara passing, dan penjagaan const oleh compiler.

Buka →
# Default Arguments

Parameter dengan nilai bawaan: pemanggilan fleksibel, aturan bawaan dari kanan, posisi deklarasi vs definisi, dan jebakan bawaan yang tidak stabil.

Buka →
# Function Overloading

Function overloading: nama sama dengan daftar parameter berbeda, cara compiler memilih (resolusi overload), dan benturan dengan default argument.

Buka →
# Inline Functions

Kata kunci inline sebagai saran pada compiler, perbedaannya dengan makro #define yang berbahaya, dan peran inline di header.

Buka →
# Rekursi

Fungsi yang memanggil dirinya sendiri: base case, stack frame, bahaya stack overflow, kasus faktorial dan fibonacci, serta pembandingannya dengan loop.

Buka →
# Function Pointer

Menyimpan dan memanggil fungsi lewat pointer, alias tipe dengan using, dan pola callback: fungsi sebagai parameter fungsi lain.

Buka →
# Lambda Expressions

Lambda expression: fungsi tanpa nama yang ditulis langsung di tempat pemakaiannya — anatomi, penyimpanan di auto, pemanggilan langsung, dan for_each.

Buka →
# Capture Lambda

Pelajari cara lambda mengakses variabel luar melalui capture by value dan by reference, beserta aturan dan bahayanya.

Buka →
# Generic Lambda

Pelajari lambda generic dengan parameter auto (C++14) dan template parameter (C++20) untuk logika yang bekerja di banyak tipe.

Buka →
# Function Template: Pengantar

Pelajari function template sebagai cetak biru fungsi untuk banyak tipe: deklarasi, deduksi tipe, instansiasi, dan batasannya.

Buka →

Bab 8 Array dan String

# Array C Style

Kenali array C-style: deklarasi, memori yang berurutan, ukuran tetap, dan indeks dari 0 sampai N-1.

Buka →
# Inisialisasi Array

Mengisi array C-style sejak awal: initializer list, perilaku nol pada elemen yang tak diisi, dan deduksi ukuran.

Buka →
# Mengakses Elemen Array

Membaca dan mengubah elemen array lewat indeks, pola penelusuran yang aman, dan bahaya akses di luar batas (undefined behavior).

Buka →
# Array Multidimensi

Array dua dimensi untuk tabel dan matriks: inisialisasi nested, iterasi berlapis, dan tata letak memori row-major.

Buka →
# Array sebagai Parameter Fungsi

Mengirim array ke fungsi: array decay menjadi pointer, ukuran harus dikirim terpisah, dan perkenalan std::span sebagai solusi modern.

Buka →
# std::array

std::array: array ukuran tetap modern yang mengetahui ukurannya sendiri — size, at, operator[], fill, dan perbandingan dengan array C-style.

Buka →
# C-style String

String di balik layar: array char berakhir '\0', fungsi strlen/strcpy/strcmp dari <cstring>, bahaya buffer overflow, dan kapan format ini masih ditemui.

Buka →
# std::string

std::string dari header <string>: konstruksi, assignment, concatenation dengan +, panjang .size(), akses per karakter, dan getline untuk membaca baris.

Buka →
# Operasi String

Kotak alat manipulasi std::string: substr, find, replace, insert, erase, starts_with/ends_with, serta konversi angka-ke-teks dan teks-ke-angka.

Buka →
# string_view

std::string_view: jendela baca-saja ke teks milik orang lain tanpa menyalin — cara pakai, konvensi parameter fungsi, dan bahaya view menggantung.

Buka →
# std::vector

Pelajari std::vector sebagai container dinamis andalan: push_back, akses elemen, ukuran yang menyesuaikan, dan variasi inisialisasi.

Buka →
# vector: capacity dan size

Pahami perbedaan size dan capacity pada std::vector, cara vector menumbuhkan penyimpanannya, dan peran reserve.

Buka →
# Iterasi array dan vector

Pelajari tiga gaya mengunjungi elemen array dan vector: loop indeks, range-based for, dan iterator eksplisit.

Buka →
# Memilih array, vector, atau string

Panduan praktis memilih struktur data: array C-style, std::array, std::vector, std::string, dan string_view sesuai kebutuhan.

Buka →

Bab 9 Pointer dan Reference

# Alamat Memori

Memahami memori sebagai barisan byte, konsep alamat setiap variabel, operator address-of (&), dan cara membaca tampilan alamat dalam heksadesimal.

Buka →
# Pointer

Mendeklarasikan pointer bertipe, mengisinya dengan alamat lewat &, mengganti sasarannya, dan membaca nilai yang ditunjuk lewat dereference.

Buka →
# Dereferencing

Membaca dan menulis nilai melalui pointer dengan operator *, aturan precedence *p + 1 versus *(p+1), serta bahaya dereference pada pointer yang belum diinisialisasi.

Buka →
# nullptr

Null pointer konstanta modern C++: mengapa nullptr lebih aman daripada NULL, cara memeriksa pointer kosong, dan bahaya dereference nullptr.

Buka →
# Pointer dan Array

Hubungan erat array dan pointer: array decay ke pointer elemen pertama, akses elemen lewat notasi indeks maupun dereference, dan konsekuensi saat array dikirim ke fungsi.

Buka →
# Pointer Arithmetic

Menggeser pointer dengan + dan -, menghitung selisih dua pointer, membandingkan pointer dalam array yang sama, serta batas-batas yang bila dilanggar menjadi undefined behavior.

Buka →
# Reference

Reference sebagai alias permanen variabel lain: deklarasi dan inisialisasi wajib, ketiadaan rebind, dan perbandingannya dengan pointer.

Buka →
# Const Pointer dan Pointer to Const

Tiga bentuk kombinasi const dan pointer — pointer to const, const pointer, dan const pointer to const — beserta cara membaca deklarasinya dari kanan ke kiri.

Buka →
# Pointer sebagai Parameter

Mengirim pointer ke fungsi untuk mengubah nilai asli, pola OUT parameter, pemeriksaan null-safe di dalam fungsi, dan perbandingannya dengan parameter reference.

Buka →
# Pointer to Pointer

Deklarasi int** dan dereference bertingkat, kegunaannya untuk mengubah pointer di dalam fungsi dan array of pointers, serta posisinya di kode C++ modern.

Buka →
# void Pointer

void* sebagai pointer generik lintas tipe: mengapa tidak bisa didereference langsung, cara mengembalikannya ke tipe asal, use case API C, dan kapan sebaiknya dihindari.

Buka →
# Dangling Pointer

Pointer yang menunjuk objek yang sudah tidak hidup: penyebab utamanya (variabel lokal yang selesai dan memori yang sudah di-delete) serta mitigasinya dengan nullptr dan smart pointer.

Buka →
# Null dan Invalid Pointer

Peta lengkap pointer bermasalah — null, uninitialized, dangling, dan wild pointer — beserta cara mencegah masing-masing lewat kebiasaan defensif yang bisa dijadikan checklist.

Buka →
# Pointer vs Reference

Perbandingan lengkap pointer dan reference: sintaks, semantik rebind dan alias, nullability, panduan memilih, dan penutup Section Pointer dan Reference.

Buka →

Bab 10 Struktur dan Tipe Data Komposit

Bab 11 Pemrograman Berorientasi Objek

# Class dan Object: Konsep Dasar OOP

Pahami class sebagai cetak biru dan object sebagai instans nyata, lengkap dengan konsep state, behavior, dan alasan OOP dipakai untuk mengorganisasi program.

Buka →
# Mendefinisikan Class

Pelajari sintaks definisi class di C++, aturan titik koma yang sering terlewat, serta perbedaan mendefinisikan member function di dalam dan di luar class.

Buka →
# Access Specifiers: public, private, protected

Kendalikan siapa yang boleh mengakses member sebuah class memakai access specifiers, pahami default class versus struct, dan alasan data perlu disembunyikan.

Buka →
# Data Members dan Member Functions

Rancang isi class secara lengkap: deklarasi data member dengan in-class initializer, penulisan member function di dalam dan di luar class, serta pemanggilan lewat operator . dan ->.

Buka →
# Constructor

Kenali constructor sebagai fungsi khusus yang mengisi object otomatis saat ia dibuat, lengkap dengan aturan penamaan dan teknik beberapa constructor dalam satu class.

Buka →
# Default Constructor

Pahami default constructor: kapan compiler membuatnya secara otomatis, kapan ia menghilang, cara memaksa pembuatannya dengan = default, dan bahaya member tanpa nilai awal.

Buka →
# Parameterized Constructor

Kirim data ke object sejak detik pertama lewat constructor berparameter, kuasai overloading constructor, dan bandingkan sintaks pembuatan object dengan kurung dan kurawal.

Buka →
# Member Initializer List

Pelajari member initializer list: sintaks : member(nilai), alasan member const dan reference wajib memakainya, efisiensinya dibanding penugasan, serta aturan urutan inisialisasi.

Buka →
# Delegating Constructors

Kurangi duplikasi antar constructor dengan delegating constructor: satu target constructor yang bekerja, sisanya meneruskan argumen kepadanya.

Buka →
# Destructor

Kenali destructor: fungsi otomatis yang berjalan saat object berakhir, urutan destruksi yang kebalikan konstruksi, dan perannya saat object di heap dihapus dengan delete.

Buka →
# Copy Constructor dan Copy Assignment

Pahami dua mekanisme penyalinan object — copy constructor yang menyalin saat object lahir dan copy assignment yang mengisi object lama — lengkap dengan deep copy, self-assignment guard, serta = default dan = delete.

Buka →
# this Pointer

Kenali this, pointer tersembunyi yang menunjuk object pemanggil: membedakan member dan parameter yang bernama sama, serta memicu method chaining lewat return *this.

Buka →
# Const Member Functions

Tandai method yang tidak mengubah object dengan const di akhir deklarasinya, pahami hubungannya dengan object const, dan hindari kesalahan umum lupa const.

Buka →
# Static Members

Kenali static data member yang dibagi seluruh object dan static member function yang tidak punya this, termasuk definisi klasik di luar class dan inline static dari C++17.

Buka →
# Friend Functions dan Friend Classes

Izinkan fungsi atau class tertentu mengakses member private melalui friend, pahami posisinya di luar urutan private/public, dan kenali kapan friend tepat serta kapan berbahaya.

Buka →
# Operator Overloading

Berikan makna operator seperti +, ==, [], ++, dan << pada class sendiri: pilih member atau free function, terapkan pola kanonik dengan return type yang tepat, dan kenali batas kapan overload justru merugikan.

Buka →
# Encapsulation

Rangkai access specifier, constructor, dan getter/setter menjadi prinsip encapsulation: sembunyikan detail internal, buka hanya antarmuka yang bermakna, dan jaga invariant class.

Buka →
# Composition

Bangun class yang memiliki class lain sebagai bagian internalnya: member bertipe class, constructor member yang dipanggil otomatis, dan urutan konstruksi serta destruksinya.

Buka →
# Inheritance

Bangun class baru dari class yang sudah ada dengan inheritance: apa yang diwariskan, mengapa dasar dibangun lebih dulu, dan cara memanggil constructor dasar.

Buka →
# Access Control pada Inheritance

Pahami bagaimana access specifier pada penulisan inheritance — public, protected, dan private — mengubah status akses member dasar di class turunan, dan kapan tiap bentuk layak dipakai.

Buka →
# Multiple Inheritance

Mewarisi dua class dasar sekaligus: sintaks dan urutan konstruksinya, diamond problem yang menyertainya, serta virtual inheritance sebagai jalan keluarnya.

Buka →
# Virtual Functions

Kenali keyword virtual: cara satu baris ini mengubah pemilihan method dari saat kompilasi menjadi saat program berjalan, dan mekanisme vtable yang bekerja di baliknya.

Buka →
# Overriding

Tulis ulang virtual function di class turunan dengan benar: aturan signature yang sama, keyword override yang menangkap kesalahan ketik, jebakan hiding, dan final yang menutup gerbang.

Buka →
# Polymorphism

Rasakan buah dari virtual function: satu antarmuka, banyak perilaku — dikelola lewat container pointer dasar, plus peta kapan polimorfisme runtime atau compile-time yang tepat.

Buka →
# Abstract Classes

Gunakan pure virtual function untuk menjadikan class abstrak: tidak bisa diinstansiasi, hanya bisa diwarisi — kontrak antarmuka yang ditegakkan compiler sejak awal.

Buka →
# Pure Virtual Functions

Bedah sintaks virtual ... = 0: kewajiban override bagi turunan, kemampuan pure virtual tetap punya implementasi default yang dipanggil lewat Dasar::nama, dan turunan yang tetap abstract bila lupa mengisi.

Buka →
# Virtual Destructors

Menghapus object turunan lewat pointer class dasar hanya aman bila destructor class dasar virtual — chapter ini membuktikan perangkapnya, solusinya, dan aturan emas yang mengikutinya.

Buka →
# Object Slicing

Menyalin object turunan ke variabel class dasar by value memotong seluruh bagian turunannya — mekanisme object slicing, bentuk-bentuknya yang menyamar, dan cara mencegahnya dengan reference, pointer, dan class dasar abstract.

Buka →
# Composition vs Inheritance

Dua alat penyusun class dibandingkan secara tuntas: kapan is-a lewat inheritance, kapan has-a lewat composition — tabel keputusan, dua desain untuk satu masalah, dan penutup Section OOP.

Buka →

Bab 12 Manajemen Memori

# Stack dan Heap

Kenali dua wilayah memori utama program C++: stack yang otomatis dan cepat, heap yang fleksibel tetapi harus dikelola sendiri.

Buka →
# Automatic dan Dynamic Storage

Storage duration menentukan berapa lama objek hidup: automatic mengikuti blok kode, dynamic bertahan sampai dilepas manual, static sepanjang program.

Buka →
# new dan delete

Alokasi memori dinamis di heap dengan operator new, pelepasannya dengan delete, aturan pasangan wajib, dan bahaya double delete.

Buka →
# new[] dan delete[] untuk Array

Alokasi array dinamis dengan new T[n], pelepasan wajib dengan delete[], serta alternatif modern unique_ptr<T[]> dan std::vector.

Buka →
# Memory Leak dan Deteksinya

Kebocoran memori: definisi, penyebab umum, deteksi dengan AddressSanitizer dan valgrind, serta pencegahannya dengan RAII.

Buka →
# Resource Management

Resource bukan hanya memori: pola acquire-use-release, masalah pelepasan manual, dan prinsip siapa mengalokasikan yang melepas.

Buka →
# RAII

Idiom RAII: mengikat umur resource ke umur objek sehingga pelepasan berjalan otomatis di semua jalur eksekusi, termasuk exception.

Buka →
# std::unique_ptr

Smart pointer kepemilikan tunggal: make_unique, operator*, ->, get(), reset(), sifat tidak-bisa-disalin, dan zero overhead-nya.

Buka →
# std::shared_ptr

Kepemilikan bersama dengan reference counting: make_shared, use_count(), biaya blok kontrol, dan kapan shared_ptr tepat dipakai.

Buka →
# std::weak_ptr

Observer tanpa kepemilikan: weak_ptr memecah circular reference shared_ptr, dengan akses aman lewat lock() dan expired().

Buka →
# Ownership dan Pemilihan Smart Pointer

Meringkas semantik kepemilikan: unique untuk eksklusif, shared untuk bersama, weak sebagai observer, raw pointer hanya mengamati — plus konvensi passing antar fungsi.

Buka →
# Pengantar Move Semantics

Move = memindahkan kepemilikan resource tanpa menyalinnya: std::move pada unique_ptr, mengapa move penting, dan keadaan moved-from.

Buka →
# Exception-Safe Resource Management

Exception melompati baris delete dan menciptakan kebocoran; RAII menjadikan pelepasan resource otomatis di jalur exception mana pun.

Buka →
# Menghindari Manual Memory Management

Rangkuman Section: aturan kode modern C++ — container dulu, unique_ptr sebagai default, shared_ptr hanya saat benar-benar dibagi, tanpa naked new/delete di kode aplikasi.

Buka →

Bab 13 Standard Library

# Pengenalan Standard Library

Kenali standard library C++: container, algorithm, iterator, utility, dan I/O, serta alasan mengapa kita memakainya di hampir setiap program.

Buka →
# std::string dan string_view

Kuasai sisi praktis std::string: konversi string dan angka, keluarga find, substr, serta posisi string_view sebagai jendela baca-saja.

Buka →
# std::array dan std::vector

Operasi lanjutan std::array dan std::vector: fill, swap, insert, erase, perbedaan push_back dan emplace_back, serta kapan masing-masing dipakai.

Buka →
# std::deque dan std::list

Kenali std::deque yang cepat di kedua ujung dan std::list yang lincah di tengah, lengkap dengan perbandingan terhadap std::vector.

Buka →
# std::stack dan std::queue

Gunakan adapter std::stack (LIFO) dan std::queue (FIFO) untuk pola tumpukan dan antrean, disertai pengantar std::priority_queue.

Buka →
# std::set dan std::multiset

Simpan nilai unik yang selalu terurut dengan std::set, dan izinkan duplikat dengan std::multiset: insert, find, count, dan erase.

Buka →
# std::map dan std::multimap

Petakan kunci ke nilai dengan std::map: operator[] vs at() vs insert, iterasi pair dengan structured bindings, dan multimap untuk banyak nilai per kunci.

Buka →
# std::unordered_set

std::unordered_set: keanggotaan O(1) rata-rata lewat hash, urutan iterasi yang tidak ditentukan, dan perbandingannya dengan std::set.

Buka →
# std::unordered_map

Petakan kunci-nilai dengan akses O(1) rata-rata: contains, count, find, emplace, dan insert_or_assign pada std::unordered_map.

Buka →
# std::pair dan std::tuple

Bungus beberapa nilai dalam satu objek dengan std::pair dan std::tuple: first/second, std::get, make_tuple, tuple_size, dan structured bindings.

Buka →
# std::optional

Nyatakan 'mungkin tidak ada nilai' dengan std::optional: has_value, operator bool, value vs value_or, dan perbandingannya dengan sentinel.

Buka →
# std::variant

Simpan salah satu dari beberapa tipe dengan aman lewat std::variant: holds_alternative, get_if, dan std::visit dengan lambda.

Buka →
# std::any

Tampung tipe apa pun dengan std::any: any_cast, pemeriksaan has_value dan type(), biaya runtime, dan kapan memilih any dibanding variant.

Buka →
# span

Jendela non-owning ke data kontigu lewat std::span: satu parameter fungsi menerima vector, std::array, dan array C, plus subspan untuk potongan tanpa salinan.

Buka →
# std::chrono

Kuasai penanganan waktu C++ lewat std::chrono: tiga konsep inti duration, clock, dan time_point, literal waktu C++14, konversi antar satuan, kalender C++20, hingga pengantar time zone.

Buka →
# std::function dan Type Erasure

Simpan callable apa pun — function pointer, lambda, functor — dalam satu wadah std::function: type erasure, cek keadaan kosong, biayanya, dan pola callback registry.

Buka →
# Regex dengan std::regex

Cari, validasi, dan ganti pola teks dengan std::regex: regex_match, regex_search, regex_replace, regex_iterator, pilihan grammar, dan kapan parsing manual lebih tepat.

Buka →
# bitset

Kelola deret bit berukuran tetap dengan std::bitset: set, reset, test, flip, count, operasi bitwise, konversi ke string, dan use case flag.

Buka →
# Numeric Algorithms

Fungsi perhitungan dari header <numeric>: gcd dan lcm untuk bilangan bulat, midpoint (C++20) untuk titik tengah tanpa luapan, plus ringkasan seluruh isi header.

Buka →
# Utility Functions

Fungsi utilitas dari <utility> dan <algorithm>: std::swap, std::exchange, std::min/max/clamp, helper std::pair, dan pratinjau std::move.

Buka →
# Memilih Container yang Tepat

Kerangka keputusan memilih container: tabel perbandingan seluruh container yang dipelajari, pertanyaan kunci, demo satu data dengan empat pilihan berbeda, dan penutup Section Standard Library.

Buka →

Bab 14 Iterators dan Algorithms

# Konsep Iterator

Mengenal iterator sebagai generalisasi pointer yang membuat satu algoritma bisa bekerja di semua container.

Buka →
# Kategori Iterator

Lima kategori iterator — input, output, forward, bidirectional, dan random access — serta alasan algoritma menuntut kategori tertentu.

Buka →
# begin() dan end()

Member begin()/end() versus std::begin/std::end, dukungan array C-style, cbegin/cend, dan makna one past the last.

Buka →
# Iterator Adapters

Adapter iterator back_inserter, front_inserter, inserter, serta istream/ostream_iterator: membuat container tumbuh sendiri dan menghadirkan stream dalam algoritma.

Buka →
# Algoritma Berbasis Rentang

Memahami konvensi [first, last) yang dipakai semua algoritma STL dan pola pemakaiannya, termasuk pratinjau std::ranges::.

Buka →
# Sorting dengan std::sort

Menyortir vector<int> dan vector<string> dengan std::sort, kompleksitasnya, serta pratinjau comparator dan stable_sort.

Buka →
# Searching dengan std::find

Mencari elemen dengan std::find dan find_if, menafsirkan iterator yang dikembalikan, dan pola counting untuk menghitung kemunculan.

Buka →
# Binary Search

Pencarian logaritmik pada data terurut dengan std::binary_search, lower_bound, upper_bound, dan equal_range.

Buka →
# min, max, dan minmax_element

Mencari elemen terkecil dan terbesar dengan min_element, max_element, minmax_element, serta membandingkan dua nilai dengan std::min dan std::max.

Buka →
# std::count dan std::count_if

Menghitung kemunculan nilai dan elemen yang lolos kondisi dengan std::count dan count_if, termasuk tipe kembalian ptrdiff_t.

Buka →
# Algoritma copy dan move

Menyalin elemen dengan std::copy, copy_if, copy_n, memakai back_inserter, serta memindahkan elemen dengan algoritma std::move.

Buka →
# std::transform

Mengubah setiap elemen lewat fungsi dengan std::transform — versi unary, binary, pemakaian in-place, dan kombinasi dengan back_inserter.

Buka →
# Idiom remove-erase

Menghapus elemen dari vector dengan idiom erase(remove(...)) — mengapa std::remove tidak menghapus, dan modernisasi std::erase_if C++20.

Buka →
# std::partition dan stable_partition

Membagi rentang menjadi dua kelompok menurut predikat dengan partition, stable_partition, dan mencari batasnya dengan partition_point.

Buka →
# std::accumulate dan std::reduce

Mengagregasi rentang menjadi satu nilai dengan accumulate (fold kiri yang deterministik) dan reduce (ramah paralel), termasuk nilai awal dan operasi khusus.

Buka →
# Algoritma Numerik `<numeric>`

Mengisi deret dan mengagregasi pasangan elemen dengan iota, inner_product, partial_sum, dan adjacent_difference dari header numeric.

Buka →
# Custom Comparator

Menulis comparator sendiri sebagai fungsi bebas, lambda, atau function object — dengan syarat strict weak ordering dan pola multi-kriteria.

Buka →
# Function Objects

Functor sebagai class dengan operator(): state, penggunaan ulang, function object bawaan seperti std::greater, dan perbandingannya dengan lambda.

Buka →
# Ranges dan Views

Mengolah data dengan C++20 Ranges: merangkai view filter, transform, dan take menjadi pipeline, memahami lazy evaluation, serta memakai algoritma std::ranges:: yang lebih ringkas.

Buka →
# Projections dan Ranges Lanjutan

Mendalami projection pada algoritma ranges, membedah batasan comparator versus projection, serta memakai fitur C++23: ranges::to, views::zip, dan views::enumerate.

Buka →

Bab 15 Input-Output dan File

# Peta iostream

Memetakan isi `<iostream>`: keluarga kelas istream/ostream, empat objek standar cout/cin/cerr/clog, abstraksi stream, serta perilaku buffer.

Buka →
# Formatting Output

Mengatur tampilan output secara presisi: width, fill, dan precision pada cout, serta std::format dan std::print sebagai cara modern C++20/23.

Buka →
# Manipulator

Menggunakan manipulator dari <iomanip> dan <ios>: setw, setprecision, fixed, setfill, left/right, boolalpha, dan hex/dec/oct, plus perbandingan endl dengan '\n'.

Buka →
# std::format dan std::print

Membentuk output yang type-safe dan mudah dibaca: format spec mini-language, argumen posisi, std::format_to, formatter custom, dan std::println.

Buka →
# Input Validation

Menangani kegagalan cin: memahami state stream, memulihkan dengan clear() dan ignore(), validasi angka dalam loop, serta perilaku num_get.

Buka →
# stringstream

Mengenal <sstream>: istringstream untuk parsing, ostringstream untuk membangun string bertahap, dan pola pemakaian keduanya.

Buka →
# File Streams

Membuka file dengan <fstream>: ifstream, ofstream, fstream, mode pembukaan ios::in/out/app/binary/trunc, is_open, dan penutupan otomatis lewat RAII.

Buka →
# Membaca File Teks

Membaca file teks dengan benar: getline per baris, operator>> per token, pola loop yang tepat, dan jebakan eof yang sering menghantui pemula.

Buka →
# Menulis File Teks

Menulis file teks dengan aman: ofstream mode trunc versus app, pemeriksaan keberhasilan tulis, flush, penamaan file, dan prinsip tidak menimpa data penting.

Buka →
# Membaca dan Menulis File Biner

Akses file biner dengan ios::binary serta write/read bertumpu reinterpret_cast, termasuk risiko endianness, struct padding, dan portabilitasnya.

Buka →
# Filesystem Library

Mengenal <filesystem> (C++17): namespace std::filesystem, path, create_directory, exists, file_size, directory_iterator, dan remove untuk mengelola direktori serta file.

Buka →
# path dan directory_iterator

Membedah std::filesystem::path: operator/, parent_path, filename, stem, extension, konversi string(), absolute versus relative, serta recursive_directory_iterator.

Buka →
# Error Handling File

Dua gaya kegagalan operasi file: exception filesystem_error versus overload std::error_code, pemeriksaan exists, masalah izin, dan pola tangguh membaca file dengan pesan yang jelas.

Buka →
# Serialization: Pengantar

Konsep serialisasi: menyimpan vector<struct> ke file teks berlabel dan memuatnya kembali persis (round-trip), plus gambaran format biner dan library eksternal seperti cereal dan protobuf.

Buka →

Bab 16 Error Handling

# Compile-time vs Runtime Errors

Mengenal tiga kategori kesalahan pada C++ — compile error, link error, dan runtime error — beserta strategi menggeser kesalahan ke waktu kompilasi.

Buka →
# Exception

Exception sebagai mekanisme pelaporan kegagalan yang memisahkan titik deteksi dari titik penanganan, beserta konsep stack unwinding.

Buka →
# try-catch

Menulis blok try/catch: menangkap exception lewat const reference, menyusun beberapa handler, catch-all, dan urutan handler yang benar.

Buka →
# Throwing Exceptions

Pernyataan throw secara penuh: melempar by value dan menangkap by reference, rethrow dengan throw;, serta perilaku throw di dalam constructor.

Buka →
# Standard Exceptions

Hierarki std::exception: what(), keluarga logic_error dan runtime_error, bad_alloc, bad_cast, dan cara memilih tipe yang tepat.

Buka →
# Custom Exceptions

Membangun class exception sendiri dengan mewarisi std::exception atau std::runtime_error, meng-override what() noexcept, dan membawa data domain.

Buka →
# Exception Safety Guarantees

Tiga tingkat jaminan exception safety — basic, strong, dan noexcept — serta idiom copy-and-swap untuk mencapai jaminan kuat.

Buka →
# noexcept

noexcept specifier dan operator, destruktor yang implicit noexcept, serta alasan move constructor noexcept mengubah perilaku realokasi vector.

Buka →
# assert dan static_assert

Pelajari cara menjaga kontrak kode dengan assert untuk invariant runtime, static_assert untuk pemeriksaan compile time, dan efek NDEBUG pada build debug vs release.

Buka →
# error_code

Pelaporan kegagalan tanpa exception: errno yang lama, std::error_code dengan std::errc, dan overload filesystem yang menerima error_code.

Buka →
# std::expected

std::expected<T,E> dari C++23: membawa nilai atau galat dalam satu return value, akses has_value/value/error/value_or, operator bool, dan operasi monadic and_then, transform, or_else.

Buka →
# Memilih Exception atau Error Code

Matriks keputusan antara exception dan pelaporan lewat nilai (error_code/expected): jenis kegagalan, biaya zero-cost versus mahal saat throw, dan gaya codebase.

Buka →

Bab 17 Generic Programming dan Templates

# Function Templates

Pendalaman function template: beberapa parameter tipe, deduksi return type dengan auto, dan pratinjau spesialisasi eksplisit.

Buka →
# Class Templates

Bangun class generik dengan template: Kotak<T>, member function di dalam dan di luar class, instansiasi eksplisit, dan std::vector sebagai contoh klasik.

Buka →
# Template Parameters

Kenali tiga jenis parameter template: typename/class, default template argument, dan template template parameter.

Buka →
# Non-type Template Parameters

Parameter template tidak harus tipe: pelajari NTTP, dari std::array<int, 5> sampai auto NTTP dan konstanta constexpr.

Buka →
# Template Specialization

Berikan perilaku khusus untuk tipe tertentu: full specialization pada class template dan function template.

Buka →
# Partial Specialization

Spesialisasi sebagian: pola Kotak<T*>, spesialisasi member, dan alasan function template tidak mendukung partial specialization.

Buka →
# Variadic Templates

Template dengan jumlah argumen bebas: parameter pack, pack expansion, pola rekursi, dan sizeof...(Args).

Buka →
# Parameter Pack

Anatomi pack expansion: pola perluasan sederhana sampai pemanggilan fungsi, forwarding pack ke fungsi lain, dan emplace_back.

Buka →
# Fold Expressions

Empat bentuk fold expression C++17 untuk memproses parameter pack tanpa rekursi: penjumlahan, pencetakan, dan pengujian logika.

Buka →
# Type Traits

Periksa dan manipulasi tipe pada saat kompilasi: is_integral_v, is_pointer_v, remove_reference_t, decay_t, dan enable_if.

Buka →
# constexpr dan consteval Functions

Fungsi constexpr boleh dihitung compiler saat kompilasi dan fungsi consteval wajib dihitung saat kompilasi: pelajari aturan pemilihannya, bukti static_assert, serta std::vector dan algoritma constexpr di C++20/23.

Buka →
# Concepts

Kendala template C++20: concept baku dan buatan, auto dengan concept, serta pesan error yang akhirnya menjelaskan diri sendiri.

Buka →
# requires Expressions

Menulis kendala ad-hoc dengan requires expression: mengecek keberadaan operasi, empat jenis requirement, dan pola requires requires.

Buka →
# Compile-time Constraints

static_assert dengan pesan sendiri, kendala pada class template, dan if constexpr untuk memilih perilaku per tipe — tanpa SFINAE manual.

Buka →
# Generic Programming Patterns

Pola-pola puncak kode generik: policy-based design, tag dispatch, CRTP, dan type erasure — plus kapan generik lebih tepat daripada OOP.

Buka →

Bab 18 Modern C++

# Panorama C++11

Peta fitur C++11 yang membuka era modern C++: auto, range-based for, lambda, smart pointer, move semantics, nullptr, uniform initialization, dan constexpr.

Buka →
# Fitur C++14

C++14 memoles C++11: generic lambda, return type deduction, binary literal, digit separator, [[deprecated]], dan relaxed constexpr.

Buka →
# Fitur C++17

C++17: structured bindings, if constexpr, if/switch dengan initializer, std::optional/variant/any, inline variables, fold expressions, [[nodiscard]], dan string_view.

Buka →
# Fitur C++20

C++20: concepts, ranges, three-way comparison, span, format, jthread, designated initializers, plus pengantar coroutines dan modules.

Buka →
# Fitur C++23

C++23: std::print/println, std::expected, deducing this, multidimensional subscript, std::generator, static operator(), if consteval, dan std::mdspan.

Buka →
# Fitur C++26 dan Status Dukungan

Isi C++26 (reflection, contracts, std::hive, std::inplace_vector, pack indexing, placeholder _), status standar Maret 2026, dan cara mengecek dukungan compiler dengan feature-test macro.

Buka →
# Uniform Initialization

Sintaks {} untuk semua tipe: menolak narrowing, aggregate init, jebakan constructor std::initializer_list (vector{3} vs vector(3)), dan most vexing parse yang terselesaikan.

Buka →
# auto dan Type Deduction

Aturan deduksi auto untuk variabel, kembalian, dan parameter, ditambah decltype, decltype(auto), dan structured bindings sebagai keluarga auto.

Buka →
# range-based for

Pendalaman range-based for: perluasan yang dibangun compiler, init-statement C++20, umur temporary yang berbahaya, dan cara membuat class sendiri mendukung loop ini.

Buka →
# Lambda Modern

Fitur lambda era modern: init-capture dan move-capture (C++14), template parameter lambda (C++20), mutable, dan immediately-invoked lambda.

Buka →
# Move Semantics

Konsep move semantics secara pragmatis: perbedaan copy dan move, peran std::move, kapan move terjadi otomatis, dan aturan pakai di kode sehari-hari.

Buka →
# Perfect Forwarding

Meneruskan argumen dari wrapper generik tanpa salinan ekstra: forwarding reference T&&, deduksi lvalue vs rvalue, std::forward, dan pola emplace-style.

Buka →
# Structured Bindings

Pendalaman structured bindings: membongkar struct, std::tuple, dan std::array, aturan by value versus referensi, dan use case iterasi std::map.

Buka →
# Attributes pada Deklarasi

Tur atribut standar C++ pada deklarasi: nodiscard, maybe_unused, deprecated, fallthrough, likely dan unlikely, no_unique_address, serta atribut khusus compiler.

Buka →
# if constexpr

Cabang yang dipilih compiler saat kompilasi: satu template untuk banyak tipe tanpa tag dispatch maupun SFINAE, berpasangan dengan type traits.

Buka →
# Concepts dan Ranges

Sinergi dua fitur C++20: concepts menjaga syarat tipe, ranges menyediakan algoritma ter-constrain dan pipeline view — ditulis sekali, divalidasi compiler.

Buka →
# Coroutines: Pengantar

Konsep coroutine dengan co_yield, co_await, dan co_return — serta std::generator C++23 untuk deret malas tanpa menulis promise type sendiri.

Buka →
# Modules: Pengantar

Fitur C++20 yang menggantikan header tradisional: masalah #include, sintaks export module dan import, keuntungan, status dukungan compiler, serta strategi migrasi bertahap.

Buka →
# Menulis C++ Modern

Ringkasan gaya penulisan C++ modern — auto, structured bindings, uniform init, smart pointer, ranges, concepts, const, constexpr — dibuktikan lewat refactor nyata dari kode lama ke kode modern.

Buka →

Bab 19 Move Semantics dan Value Categories

# lvalue dan rvalue

Perbedaan praktis lvalue (objek dengan identitas) dan rvalue (nilai sementara), bukti lewat operator & dan pilihan overload compiler.

Buka →
# Value Categories

Taksonomi resmi C++17: prvalue, xvalue, dan lvalue, plus klasifikasi ekspresi yang dibuktikan lewat decltype dan static_assert.

Buka →
# rvalue Reference

Referensi T&& yang mengikat nilai sementara, aturan perpanjangan umur temporary, dan pilihan overload antara const T& dan T&&.

Buka →
# Move Constructor

Menulis move constructor `Nama(Nama&&) noexcept`: transfer pointer resource, moved-from state yang valid, dan bukti biayanya konstan.

Buka →
# Move Assignment

Menulis operator=(T&&) noexcept: guard self-assignment, melepas resource lama dulu, dan peran noexcept pada realokasi std::vector.

Buka →
# std::move

std::move tidak memindahkan apa pun — ia hanyalah cast ke rvalue; kesalahan umum, perilaku pada tipe fundamental, dan larangan di return.

Buka →
# Perfect Forwarding

Meneruskan argumen generik tanpa merusak kualitasnya: masalah overload berlipat ganda, deduksi T&& pada lvalue vs rvalue, dan std::forward.

Buka →
# Forwarding Reference

Kapan T&& menjadi forwarding reference: konteks deduksi, auto&&, dan bedanya dengan rvalue reference murni pada member class.

Buka →
# Reference Collapsing

Aturan runtuhnya referensi ke referensi: empat kombinasi, perannya dalam std::forward, dan collapsing pada alias template.

Buka →
# Copy Elision

C++17 menjamin prvalue dikonstruksi langsung di tujuan tanpa copy/move — bukti dengan class tanpa copy/move constructor, dan batasan elision.

Buka →
# Return Value Optimization

RVO versus NRVO: kapan dijamin standar, kapan opsional, batasan NRVO pada pernyataan bercabang, dan anti-pola return std::move.

Buka →
# Rule of Zero, Three, Five

Kapan menulis lima fungsi khusus, kapan cukup delegasi ke member, dan kapan melarang copy — aturan desain penutup section Move Semantics.

Buka →

Bab 20 Concurrency dan Parallelism

# Proses dan Thread

Perbedaan proses dan thread, memori bersama di dalam satu proses, konteks switching, dan kapan multithreading tepat dipakai.

Buka →
# std::thread

Membuat thread dari fungsi dan lambda, mengirim argumen by value dan by reference dengan std::ref, join(), serta bahaya detach dan std::terminate.

Buka →
# Siklus Hidup Thread

State thread dari baru sampai selesai, makna joinable vs joined, hardware_concurrency(), dan identitas thread lewat get_id().

Buka →
# std::mutex

Data race tanpa mutex, critical section, dan pola lock()/unlock() yang benar dengan std::mutex pada penghitung bersama.

Buka →
# lock_guard dan unique_lock

RAII locking dengan lock_guard, fleksibilitas unique_lock (defer, owns_lock, timed), serta shared_mutex dan shared_lock untuk banyak pembaca.

Buka →
# Deadlock

Empat kondisi deadlock, pola dua mutex dengan urutan berbeda yang saling mengunci, dan pencegahannya dengan std::lock serta scoped_lock.

Buka →
# Condition Variable

Menunggu kondisi tanpa busy waiting: condition_variable, wait dengan predicate, spurious wakeup, notify_one vs notify_all, dan pola producer-consumer.

Buka →
# Semaphore, Latch, dan Barrier

Alat sinkronisasi modern C++20 dalam satu tur: sinyal berbasis penghitung, titik kumpul sekali pakai, dan titik kumpul berulang, lengkap dengan panduan memilih di antara mereka.

Buka →
# Operasi Atomik

std::atomic untuk penghitung bersama: fetch_add, load, store, exchange, compare_exchange, atomic_flag, dan kapan atomic cukup tanpa mutex.

Buka →
# Model Memori C++

Happens-before secara ringan, memory_order (seq_cst default, acquire/release, relaxed), dan demo deterministik pasangan release-acquire.

Buka →
# Data Race

Definisi data race menurut standar C++, kenapa ia undefined behavior, deteksi dengan ThreadSanitizer, dan pola desain yang bebas data race.

Buka →
# future dan promise

Mengirim hasil dan exception antar thread lewat kanal satu arah std::promise dan std::future, plus shared_future untuk banyak pembaca.

Buka →
# std::async

Menjalankan tugas dan mengambil hasilnya: launch policy async vs deferred, exception yang diantar future, dan catatan portabilitas policy default.

Buka →
# Pola Thread Pool

Merakit thread pool mini dari mutex, condition variable, dan future: antrian tugas, worker loop, shutdown bersih, serta cara memilih ukuran pool.

Buka →
# jthread dan stop_token

std::jthread dengan join otomatis, penghentian kooperatif lewat stop_token dan stop_source, serta stop_callback sebagai reaksi sinyal.

Buka →
# Parallel Algorithms

Execution policy pada algoritma standar (std::execution::par), ketergantungan TBB di GCC, dan alternatif teruji: partisi manual dengan std::thread.

Buka →
# Debugging Program Konkuren

Menghadapi bug konkuren: heisenbug, logging disiplin, reduksi reproduksi, uji invariant, dan checklist desain program multithread yang aman.

Buka →

Bab 22 Pemrograman Numerik

# Integer Overflow

Perbedaan perilaku unsigned modular dan signed yang berujung undefined behavior saat overflow, cara mendeteksinya sebelum terjadi, dan strategi memilih tipe yang lebih besar.

Buka →
# Floating Point Representation

Bagaimana IEEE 754 menyimpan floating-point dalam sign, exponent, dan mantissa; perbedaan float 32-bit dan double 64-bit; serta nilai khusus infinity dan NaN.

Buka →
# Floating Point Precision

Presisi signifikan floating-point, kasus klasik 0.1 + 0.2 tidak sama dengan 0.3, makna std::numeric_limits::epsilon, dan cara membandingkan floating-point dengan toleransi absolut maupun relatif.

Buka →
# Rounding Errors

Bagaimana pembulatan menumpuk dalam penjumlahan panjang, kehilangan signifikansi saat nilai kecil masuk ke akumulator besar, dan perkenalan Kahan summation sebagai penangkalnya.

Buka →
# numeric_limits

Pendalaman std::numeric_limits dari header <limits>: max, lowest, min, epsilon, round_error, infinity, quiet_NaN, denorm_min, has_infinity, serta perbedaan digits10 dan max_digits10.

Buka →
# Random Number Generation

Bilangan acak modern dengan header <random>: engine std::mt19937 dan distribusi uniform_int_distribution serta normal_distribution, seed deterministik untuk pengujian, dan mengapa rand() tidak layak dipakai lagi.

Buka →
# Complex Numbers

Bilangan complex dengan std::complex<double>: operasi aritmetika, konjugat, modulus, argumen, dan perkalian sebagai rotasi — lengkap dengan contoh teruji dan artefak floating-point-nya.

Buka →
# Vector dan Matrix Representation

Tiga cara menyimpan vektor dan matriks di C++ — std::array, vector nested, dan flat vector dengan indeks i*cols+j — plus dot product, perkalian matriks, dan implikasi cache locality-nya.

Buka →
# Operasi Numerik

Tur `<cmath>`: sqrt, pow, exp, log, trigonometri, fabs, fmod vs remainder, penanganan NaN dari domain tak sah, dan konversi angka antar tipe dengan aman.

Buka →
# Akurasi dan Stabilitas Numerik

Studi kasus metode stabil vs tidak stabil pada persamaan kuadrat, uji acuan dengan nilai yang diketahui dan toleransi, prinsip uang pakai integer sen, serta penutup Section Pemrograman Numerik.

Buka →

Bab 23 Struktur Data dan Algoritma

# Kompleksitas Waktu dan Memori

Menilai biaya algoritma lewat jumlah operasi dan penggunaan memori, dilengkapi teknik pencatatan operasi dan pengukuran waktu dengan chrono.

Buka →
# Big-O Notation

Notasi Big-O untuk meringkas pertumbuhan biaya algoritma: O(1), O(log n), O(n), O(n log n), O(n^2), plus aturan menghitungnya dari kode dan best/average/worst case.

Buka →
# Array dan Dynamic Array

Perbedaan array statis dan dynamic array, mekanisme doubling di balik std::vector, serta implementasi mini DynamicArray<int> dari nol.

Buka →
# Linked List

Membangun singly linked list manual: struct Node, insert head/tail, delete, traverse, dan search, serta perbandingannya dengan std::vector.

Buka →
# Stack

Konsep LIFO dan implementasi stack berbasis std::vector, disertai aplikasi klasik: pemeriksa kurung seimbang.

Buka →
# Queue dan Deque

Konsep FIFO, implementasi circular buffer manual, simulasi antrian dengan std::queue, dan pengantar deque dua ujung.

Buka →
# Hash Table

Konsep hashing, penanganan collision dengan chaining, hash function untuk string, serta load factor dan rehash pada hash table mini.

Buka →
# Tree

Terminologi tree (root, leaf, depth, height), pembangunan binary tree dengan struct Node, dan tiga traversal rekursif: pre-order, in-order, post-order.

Buka →
# Binary Search Tree

Properti BST, insert dan search O(log n), in-order traversal yang menghasilkan data terurut, penghapusan dengan tiga kasus, dan bahaya tree degenerate.

Buka →
# Heap dan Priority Queue

Properti min-heap dan max-heap, representasi heap di array, sift-up dan sift-down manual, serta std::priority_queue dengan ordering-nya.

Buka →
# Graph

Graf sebagai simpul dan busur, perbandingan adjacency list dengan adjacency matrix, serta penjelajahan BFS dan DFS dengan urutan visit yang deterministik.

Buka →
# Linear Search

Implementasi linear search manual dengan penghitung perbandingan, best case dan worst case, kapan algoritma ini cukup, serta pratinjau binary search.

Buka →
# Binary Search

Implementasi binary search iteratif dan rekursif, syarat data terurut, jebakan overflow pada perhitungan mid, serta kaitannya dengan lower_bound.

Buka →
# Sorting Algorithms

Selection sort, insertion sort, dan merge sort diimplementasikan manual dengan penghitung perbandingan, tabel kompleksitas, serta recap std::sort.

Buka →
# Recursion dan Backtracking

Pola pilih-jelajahi-urungkan pada backtracking, diterapkan pada semua permutasi dan N-Queens 4x4 dengan hasil deterministik.

Buka →
# Greedy Algorithms

Algoritma greedy pada coin change dan interval scheduling, termasuk contoh nyata kapan greedy gagal mencapai optimum.

Buka →
# Divide and Conquer

Pola bagi-selesaikan-gabungkan, merge sort sebagai templatnya, dan studi kasus max subarray tiga cara dibandingkan dengan Kadane.

Buka →
# Dynamic Programming

Memoization lawan tabulation, fibonacci tiga cara dengan penghitung panggilan, coin change minimum, dan LIS dengan rekonstruksi jawaban.

Buka →
# Graph Algorithms

Dijkstra dengan adjacency list dan priority_queue untuk jarak terpendek, rekonstruksi jalur, serta deteksi siklus dengan DFS tiga warna.

Buka →
# Memilih Struktur Data

Satu beban kerja diuji pada empat struktur, tabel keputusan struktur data dan padanan STL, pertimbangan pola akses, serta rangkuman section.

Buka →

Bab 24 Debugging dan Code Quality

# Menggunakan Debugger

Mengapa debugger lebih unggul daripada printf debugging, dan panduan dasar gdb: run, break, next, step, print, serta backtrace.

Buka →
# Breakpoints dan Watchpoints

Penempatan breakpoint yang cerdas, breakpoint bersyarat, dan watchpoint untuk melacak siapa yang mengubah sebuah variabel.

Buka →
# Membaca Stack Trace

Membedah stack trace dari gdb, laporan crash Linux, exception, dan std::stacktrace C++23 untuk menemukan lokasi bug.

Buka →
# Compiler Warnings

Membaca peringatan compiler dengan -Wall -Wextra -Wpedantic, memilah yang berbahaya dari yang minor, dan menegakkannya dengan -Werror.

Buka →
# Keluarga Sanitizer

Cara kerja AddressSanitizer, UndefinedBehaviorSanitizer, ThreadSanitizer, dan LeakSanitizer: instrumentasi, overhead, dan kapan dipakai.

Buka →
# AddressSanitizer

Mendeteksi heap-buffer-overflow, use-after-free, dan double-free dengan -fsanitize=address, plus cara membaca laporannya secara sistematis.

Buka →
# UndefinedBehaviorSanitizer

Mendeteksi signed overflow, shift di luar rentang, dan pointer tak sejajar dengan -fsanitize=undefined, serta cara mengubahnya menjadi error nyata.

Buka →
# ThreadSanitizer

Mendeteksi data race antar thread dengan -fsanitize=thread: membaca laporannya, memahami prinsip kerjanya, dan memperbaikinya dengan atomic.

Buka →
# Fuzzing dengan libFuzzer

Kenali fuzzing berumpan-balik cakupan: konsep corpus dan mutasi, fuzz target libFuzzer, kombinasi dengan AddressSanitizer, hingga membedah input yang memicu crash.

Buka →
# Static Analysis

Analisis statis dengan g++ -fanalyzer: menemukan bug tanpa menjalankan program, dipadu cppcheck dan posisinya terhadap sanitizer.

Buka →
# Formatting dengan clang-format

Mengapa format konsisten penting, cara kerja berkas .clang-format, style bawaan seperti Google dan LLVM, serta integrasi editor dengan format-on-save.

Buka →
# Linting dengan clang-tidy

Cara kerja clang-tidy: kategori check bugprone, performance, modernize, dan readability; membaca laporan, mengonfigurasi .clang-tidy, dan mengintegrasikannya ke CI.

Buka →
# Unit Testing

Konsep unit testing, pola Arrange-Act-Assert, sketsa GoogleTest dan Catch2, serta mini test harness sendiri dengan macro CHECK yang benar-benar kita jalankan.

Buka →
# Testing dengan GoogleTest

Naik kelas dari mini harness buatan sendiri ke framework standar industri: makro TEST dan TEST_F, keluarga EXPECT dan ASSERT, matcher, filter binary uji, hingga integrasi CMake/CTest — semua dijalankan dengan GoogleTest 1.14 sungguhan.

Buka →
# Integration Testing

Perbedaan unit test dan integration test, konsep fixture setup-teardown, dan mini integration test tulis-baca berkas yang benar-benar kita jalankan, plus pola job CI.

Buka →
# Debugging Memory Errors

Katalog lima error memori klasik C++ beserta alat deteksinya, laporan LeakSanitizer, pencegahan dengan RAII, dan checklist penutup section debugging.

Buka →

Bab 25 Build System dan Project Structure

# Header dan Source Files

Pembagian kode ke file .h dan .cpp — apa yang boleh di header, apa yang harus di source file, dan aturan include yang minimal.

Buka →
# Declaration vs Definition

Perbedaan deklarasi dan definisi, variabel extern, aturan ODR, plus dua kasus khusus: const di header dan fungsi static.

Buka →
# Include Guards

Mengapa header perlu pelindung dari double include — pola #ifndef/#define/#endif, penamaan guard yang unik, dan demonstrasi error tanpa pelindung.

Buka →
# pragma once

Satu baris pengganti include guard — cara kerja #pragma once, portabilitasnya di compiler utama, dan kapan memilih mana.

Buka →
# Separate Compilation

Model kompilasi terpisah C++ — translation unit, dari .cpp ke object file lalu link, dan kenapa incremental build penting.

Buka →
# Linking dan Symbols

Bagaimana linker menyatukan object file lewat simbol — defined vs undefined, tool nm, dan anatomi error undefined reference.

Buka →
# Static dan Dynamic Libraries

Membuat static library (.a) dengan ar dan dynamic library (.so) dengan -fPIC -shared — lengkap dengan cara link, menjalankan, dan kapan memilih masing-masing.

Buka →
# Make dan Makefile

Otomatisasi build dengan make — target, dependencies, recipe, variabel, pattern rule, dan incremental build yang kita jalankan sungguhan.

Buka →
# CMake

Arsitektur CMake — generator yang menghasilkan build system native, CMakeLists.txt minimal, alur configure-build, dan cara memasangnya.

Buka →
# CMake Targets

Vokabuler inti CMake — add_executable, add_library, target_link_libraries, dan target_include_directories dengan properti modern per target.

Buka →
# CMake Dependencies

Tiga jalur resmi CMake untuk menarik library dari luar proyek — add_subdirectory, find_package, dan FetchContent — beserta cara kerja dan kapan masing-masing dipakai.

Buka →
# Package Management dengan vcpkg

vcpkg sebagai manajer paket C++ — pemasangan, mode klasik vs manifest vcpkg.json, integrasi toolchain dengan CMake, dan kapan vcpkg menjadi pilihan tepat.

Buka →
# Package Management dengan Conan

Conan sebagai manajer paket C++ berbasis profil — conanfile.txt dan conanfile.py, conan install, integrasi CMake lewat generator, dan perbandingannya dengan vcpkg.

Buka →
# Dependency Management

Strategi mengelola dependensi C++ — vendor, git submodule, package manager, FetchContent — beserta trade-offs, ringkasan Semantic Versioning, dan prinsip minimal dependencies.

Buka →
# CTest

CTest sebagai pelari tes bawaan CMake — anatomi program tes, enable_testing dan add_test, plus test runner mini yang dijalankan sungguhan di lingkungan praktikum.

Buka →
# CI dan Otomasi Build

Memindahkan rangkaian build-tes-lapor ke mesin lain: pipeline GitHub Actions untuk C++ dengan matrix compiler, cache, sanitizer, lint, dan artefak, plus skrip CI mini yang dijalankan sungguhan.

Buka →
# Build Types dan Optimization

Debug vs Release — tingkat optimasi -O0 sampai -Os, informasi debug -g, dan bagaimana NDEBUG membuat assert ikut menghilang di build release, semuanya diuji di lingkungan praktikum.

Buka →
# Project Layout

Susunan folder proyek C++ — include, src, tests, docs, build — aturan penempatan header, flat vs nested, dan rangkuman penutup section Build System dan Project Structure.

Buka →

Bab 26 Modularity dan Software Design

# Memecah Program Menjadi Modul

Kriteria membagi program — responsibility, kohesi, coupling — dan refactor nyata dari satu fungsi main() monolitik menjadi tiga class yang terpisah.

Buka →
# Abstraction dan Encapsulation

Antarmuka vs implementasi, level abstraction, dan idiom PIMPL — menyembunyikan implementasi di balik pointer dengan unique_ptr dan forward declaration, lengkap dengan keuntungan kompilasinya.

Buka →
# Separation of Concerns

Memisahkan parsing, logika bisnis, dan presentasi menjadi tiga lapisan — refactor nyata program laporan, arah dependensi, dan pengujian per bagian.

Buka →
# Dependency Management di Level Desain

Arah dependensi antar modul, kopling erat vs kopling longgar, masalah circular dependency dan solusinya, inversion, serta antarmuka minimal — semua di level desain, bukan alat build.

Buka →
# SOLID Principles

Lima prinsip desain — SRP, OCP, LSP, ISP, DIP — masing-masing dengan potongan kode C++ nyata, ditutup satu program demonstratif multi-class dan tabel ringkas.

Buka →
# Composition over Inheritance

Recap keputusan is-a vs has-a lalu pendalaman praktis: decorator via composition, strategy lewat antarmuka runtime vs template policy, dan tabel keputusan desain.

Buka →
# Design Patterns

Pola GoF yang paling relevan untuk C++ modern — Strategy, Observer, Factory Method, Adapter, dan Singleton beserta kritiknya — dengan tiga pola teruji dalam satu program.

Buka →
# Dependency Injection

Mengirim dependensi dari luar lewat constructor injection — antarmuka, implementasi nyata, test double (stub dan fake) untuk unit test — semuanya tanpa framework.

Buka →
# API Design

Mendesain antarmuka function dan class yang mudah dipakai dan sulit disalahgunakan: nama eksplisit, parameter minim, return type yang jujur, noexcept dan const correctness, sampai versi dan dokumentasinya.

Buka →
# Rule of Zero

Fungsi khusus sebagai bagian tak terlihat dari API class: Rule of Zero sebagai pilihan default, kapan Rule of Five benar-benar diperlukan, serta = default dan = delete untuk menyatakan niat.

Buka →
# Refactoring

Refactoring terencana: empat code smell yang paling sering muncul, langkah aman kecil-berurutan-teruji, dan refactor before/after dengan output yang dibuktikan identik.

Buka →

Bab 27 Performa dan Optimasi

# Memahami Biaya Komputasi

Membedah biaya program sebagai waktu, memori, dan energi melalui empat level keputusan, lengkap dengan demo penghitungan biaya yang deterministik.

Buka →
# Profiling

Menemukan bagian program yang paling menyita waktu memakai profiler manual, gprof, dan pola pengukuran chrono.

Buka →
# Compiler Optimization

Memahami apa yang benar-benar dikerjakan compiler optimizer, mengapa semantik program tidak boleh berubah, dan kapan constexpr menjadi optimizer manual.

Buka →
# Optimization Levels

Menakar perbedaan perilaku, ukuran, dan jebakan tiap level optimasi GCC: dari -O0 untuk debugging sampai -Ofast yang mengubah aritmetika.

Buka →
# Cache Locality

Membaca biaya akses memori melalui hierarki cache dan cache line 64 byte, dengan perbandingan traversal baris versus kolom pada matriks.

Buka →
# Memory Layout

Membongkar tata letak byte objek C++: stack versus heap, padding dan alignment antar member, serta false sharing pada program multithread.

Buka →
# Data-oriented Design

Merancang tata letak data mengikuti pola akses hot loop, dengan perbandingan konkret array of struct versus struct of array.

Buka →
# Move Semantics untuk Performa

Membuktikan biaya salinan yang bisa dihindari dengan penghitung alokasi: reserve sebelum push_back, emplace_back, idiom pass by value plus move, dan membangun string secara bertahap.

Buka →
# Mengurangi Alokasi Memori

Menghitung biaya alokasi heap di dalam loop, memanfaatkan Small String Optimization, memakai ulang buffer, dan mengenal arena allocator sebagai cara mengelompokkan alokasi.

Buka →
# Benchmarking

Mengukur kecepatan secara jujur: mencegah dead-code elimination dengan idiom doNotOptimize, disiplin pemanasan dan pengulangan, harness mini berbasis chrono, dan pengenalan Google Benchmark.

Buka →
# Branch Prediction

Biaya tersembunyi instruksi cabang: pipeline prosesor dan prediksi yang salah pada demo klasik array acak versus terurut, cara berpikir branchless, serta petunjuk [[likely]] dan [[unlikely]].

Buka →
# SIMD: Pengantar

Satu instruksi memproses banyak data: konsep SIMD, auto-vectorization GCC yang bisa kita periksa dengan -fopt-info-vec, intrinsics _mm_add_ps pertama, dan kapan SIMD layak dipakai.

Buka →
# Menghindari Premature Optimization

Kapan optimasi layak dilakukan: kutipan Knuth dalam konteks yang sehat, keterbacaan sebagai fitur, keputusan berbasis profil, checklist praktis, dan penutup section Performa dan Optimasi.

Buka →

Bab 28 Keamanan dan Undefined Behavior

# Undefined Behavior

Mengapa standar C++ menolak menjamin perilaku sebagian program, kategori UB yang paling sering, dan cara mendeteksinya dengan UBSan sebelum menimpa pengguna.

Buka →
# Implementation-defined Behavior

Membedakan implementation-defined, unspecified, dan undefined behavior, membaca keputusan implementasi di platform ini, dan kebiasaan menulis kode portabel.

Buka →
# Out-of-bounds Access

Akses di luar batas array dan vector: perbedaan pembacaan dan penulisan, jebakan operator[], dan mitigasi dengan at(), span, serta pemeriksaan batas.

Buka →
# Use-after-free

Mengakses memori setelah delete: mengapa blok yang sudah dilepas tetap berbahaya, pola kode yang memicunya, dan mitigasi dengan kepemilikan tunggal serta smart pointer.

Buka →
# Buffer Overflow

Meluapnya buffer tetap di stack dan heap, fungsi C berbahaya versus lebih aman, dan cara modern C++ menyingkirkan kelas bug ini dengan std::string dan snprintf.

Buka →
# Integer Overflow dan Konversi

Luapan bilangan bulat dan konversi diam dari sudut pandang keamanan: overflow sebagai pintu masuk, aritmetika yang memeriksa dirinya, dan parsing angka yang menolak sampah.

Buka →
# Format String Risks

Mekanisme format specifier injection pada printf, mengapa iostream dan std::format tidak mewarisi masalahnya, dan kebiasaan format-literal yang menutup celahnya.

Buka →
# Input Validation

Memvalidasi input dari luar secara menyeluruh — panjang, format, dan rentang — dengan whitelist dan prinsip fail-closed, memakai std::from_chars sebagai gerbang parsing yang ketat.

Buka →
# Secure Memory Management

Mengelola memori dari sisi keamanan: membersihkan rahasia sebelum dilepas, mencegah kebocoran dengan kepemilikan otomatis, dan menangani std::bad_alloc dengan tenang.

Buka →
# Secure File Handling

Membuka berkas tanpa membuka celah: validasi path traversal dengan normalisasi leksikal dan pemeriksaan awalan, plus catatan ringkas tentang TOCTOU dan symlink.

Buka →
# CWE dan Kerentanan C++ Umum

Membaca entri CWE di cwe.mitre.org, memetakan lima kerentanan C++ yang paling sering muncul beserta mitigasinya, dan menyusun mitigasi berlapis.

Buka →
# Secure Coding Guidelines

Menutup section dengan guideline resmi — SEI CERT C++, C++ Core Guidelines, AUTOSAR — tooling pemeriksaannya, dan checklist sebelum rilis.

Buka →

Bab 29 Interoperabilitas dan Ecosystem

# Interoperabilitas C dan C++

Memanggil kode C dari C++: extern "C", name mangling, library C standar, dan kompilasi campuran gcc/g++ yang bisa Anda coba langsung.

Buka →
# C ABI dan C++ ABI

Apa itu ABI, mengapa C ABI stabil sedangkan C++ ABI tidak, dan kapan perbedaan ini menjadi masalah nyata pada plugin dan library biner.

Buka →
# Menggunakan Library Eksternal

Anatomi konsumsi library eksternal di C++: header + file library, instalasi sistem vs vendored vs package manager, dan praktik header-only library buatan sendiri.

Buka →
# Binding C++ ke Python

Membangun library C++ ber-C ABI dan memanggilnya dari Python dengan ctypes — lengkap dengan pemetaan tipe dan perbandingan jalur binding.

Buka →
# pybind11

Mengekspos fungsi dan class C++ ke Python dengan pybind11: anatomi PYBIND11_MODULE, konversi tipe otomatis, perbandingan dengan ctypes, dan GIL.

Buka →
# C++ dan SQLite

Menggunakan SQLite sebagai database embedded di C++: pola C API open/prepare/bind/step/finalize dan wrapper RAII mini yang diuji sungguhan.

Buka →
# C++ dan Networking

Berbicara lewat jaringan dari C++: siklus hidup BSD sockets yang diuji sungguhan, error koneksi yang deterministik, asio, dan kapan memilih level API yang mana.

Buka →
# C++ dan JSON

Bekerja dengan JSON di C++: pola nlohmann/json dan RapidJSON sebagai display, plus writer dan parser JSON mini buatan sendiri yang diuji sungguhan.

Buka →
# C++ dan OpenCV

Mengenal OpenCV dan cv::Mat sebagai pusat computer vision C++, pola operasi dasar, instalasi, dan simulasi grayscale pada buffer piksel yang diuji sungguhan.

Buka →
# C++ dan ONNX Runtime

Menjalankan model machine learning di C++ dengan ONNX Runtime: konsep session dan tensor, pola C API sebagai display, dan pipeline inferensi mini yang diuji sungguhan.

Buka →
# Cross-platform Development

Menulis C++ yang bertahan lintas platform: jalur file, endianness, line endings, #ifdef, perbedaan compiler, CMake, dan matriks CI — penutup section Interoperabilitas dan Ecosystem.

Buka →

Bab 30 Deployment dan Distribusi

# Executable dan Runtime Dependencies

Apa saja yang dibutuhkan sebuah executable untuk bisa berjalan di mesin lain — dynamic linker, libc, libstdc++ — dan cara memeriksanya dengan file, ldd, serta readelf.

Buka →
# Dynamic Library Deployment

Membuat shared library sendiri, mengatasi 'libkalkulator.so => not found' dengan LD_LIBRARY_PATH dan rpath $ORIGIN, serta menempatkan library bersama aplikasi.

Buka →
# Static Linking vs Dynamic Linking

Dua strategi menyatukan program dengan library-nya: ukuran, update keamanan, startup, dan kemudahan distribusi — semuanya dibuktikan dengan biner statis dan dinamis yang dibangun nyata.

Buka →
# Release Build

Checklist build untuk pengguna: flag -O2 dan -DNDEBUG, strip untuk membuang simbol, menyimpan debug info terpisah, penyematan versi, dan konsep reproducible builds.

Buka →
# Cross-compilation

Membangun biner untuk arsitektur lain dari mesin yang sama: target triple, toolchain terpisah, sysroot, toolchain file CMake, dan verifikasi hasil dengan file.

Buka →
# WebAssembly dan Emscripten

Membawa kode C++ ke browser lewat WebAssembly: kapan porting masuk akal, cara kerja emcc, batasan sandbox memori dan I/O, serta fungsi komputasi murni yang diuji dengan g++.

Buka →
# Deployment di Linux

Menyalurkan aplikasi ke pengguna Linux: struktur FHS, merakit paket .deb sungguhan dengan dpkg-deb, tarball reproducible, dan bundle mandiri AppImage.

Buka →
# Deployment di Windows

Aturan distribusi aplikasi C++ di Windows: pilihan toolchain, runtime MSVC dan vcredist, penempatan DLL, installer WiX/NSIS, portable apps, dan code signing.

Buka →
# Deployment di macOS

Menyalurkan aplikasi ke pengguna macOS: bundle .app dan Info.plist, Gatekeeper, alur codesign dan notarization, universal binary dengan lipo, serta distribusi via Homebrew.

Buka →
# Versioning dan Release

Mengelola identitas rilis: semantic versioning MAJOR.MINOR.PATCH, changelog, git tag, release notes, janji API/ABI, dan otomasi pemeriksaan versi.

Buka →
# Packaging Aplikasi

Merakit paket rilis utuh: struktur bin/lib/share, metainformasi, tarball reproducible dengan checksum dan tanda tangan, mekanisme pembaruan, dan checklist rilis lengkap penutup section.

Buka →
# Container dengan Docker

Membungkus aplikasi C++ beserta toolchain dan libc-nya ke dalam image: Dockerfile multi-stage, pemisahan image build dan runtime, volume data, serta sesi build-run terdokumentasi.

Buka →

Bab 32 Proyek

# Proyek: Kalkulator Terminal

Bangun kalkulator CLI interaktif: parsing input, operasi aritmetika, validasi, dan penanganan kesalahan yang rapi.

Lihat proyek →
# Proyek: Sistem Manajemen Inventaris

Bangun aplikasi inventaris berbasis terminal: model data, CRUD produk, pencarian dan filter, persistensi ke file, serta pengujian.

Lihat proyek →
# Proyek: Sistem Manajemen Perpustakaan

Bangun sistem perpustakaan dengan class dan relasi antarobjek, alur peminjaman dan pengembalian, serta persistensi data ke file.

Lihat proyek →
# Proyek: Analisis Data CSV

Bangun alat analisis data CSV: pembaca file, validasi baris, statistik deskriptif, dan pembuatan laporan ringkas.

Lihat proyek →
# Proyek: Simulasi Sistem Antrean

Bangun simulasi antrean (queue) diskrit: model kedatangan, struktur data antrean, eksekusi simulasi, dan analisis hasil.

Lihat proyek →
# Proyek: Sistem Pencarian dan Pengurutan

Bangun alat pembanding algoritma: implementasi searching dan sorting, analisis kompleksitas, dan pengukuran performa nyata.

Lihat proyek →
# Proyek: Aplikasi Pengelola File

Bangun pengelola file berbasis terminal dengan std::filesystem: penjelajahan direktori, pencarian, metadata, dan penanganan error.

Lihat proyek →
# Proyek: Aplikasi Multithreaded

Bangun aplikasi multithreaded: pembagian pekerjaan, sinkronisasi data dengan mutex dan atomic, serta pengujian kebenaran dan performa.

Lihat proyek →
# Proyek: Chat Server Multithreaded

Bangun server chat TCP localhost: socket POSIX, satu thread per client, protokol line-based, broadcast tersinkronisasi, hingga shutdown bersih.

Lihat proyek →
# Proyek: Aplikasi Catatan GUI

Bangun engine aplikasi catatan — CRUD, pencarian, persistensi file, dan antrean kejadian — yang seluruh logikanya diuji dengan g++ tanpa GUI, lalu sambungkan ke sketsa antarmuka Qt.

Lihat proyek →