1. Struktur Dasar #include <iostream> // Untuk input/output int main() { // Fungsi utama program std::cout << "Halo, Dunia!" << std::endl; // Output ke konsol return 0; // Mengakhiri program tanpa error } 2. Tipe Data Dasar Integer: int , short , long , long long (signed/unsigned) Floating-point: float , double , long double Karakter: char Boolean: bool ( true atau false ) Ukuran: Gunakan sizeof(tipe_data) untuk mengetahui ukuran dalam byte. 3. Variabel & Konstanta Deklarasi: tipe_data nama_variabel = nilai_awal; Konstanta: Compile-time: const tipe_data NAMA_KONSTANTA = nilai; Run-time: constexpr tipe_data NAMA_KONSTANTA = nilai; (untuk ekspresi komputasi) 4. Operator Aritmatika: + , - , * , / , % (modulus) Penugasan: = , += , -= , *= , /= , %= Perbandingan: == , != , < , > , <= , >= Logika: && (AND), || (OR), ! (NOT) Increment/Decrement: ++ , -- (prefix/postfix) 5. Input/Output Output: std::cout << "Teks" << variabel << std::endl; Input: std::cin >> variabel; Baris Baru: std::endl atau '\n' 6. Struktur Kontrol 6.1. Kondisional // If-else if (kondisi) { // kode jika true } else if (kondisi_lain) { // kode jika kondisi_lain true } else { // kode jika semua false } // Switch switch (ekspresi) { case nilai1: // kode break; case nilai2: // kode break; default: // kode default } 6.2. Perulangan // For loop for (inisialisasi; kondisi; iterasi) { // kode } // While loop while (kondisi) { // kode } // Do-while loop do { // kode } while (kondisi); // For-each (C++11+) for (tipe_elemen var : koleksi) { // kode } 7. Fungsi Deklarasi: tipe_kembalian nama_fungsi(tipe_arg1 arg1, ...); Definisi: tipe_kembalian nama_fungsi(tipe_arg1 arg1, ...) { // kode fungsi return nilai; // Opsional } Overloading: Fungsi dengan nama yang sama tetapi signature (tipe/jumlah argumen) berbeda. Pass by Value: Argumen disalin. Pass by Reference: Argumen dilewatkan dengan referensi ( & ), perubahan memengaruhi variabel asli. 8. Array & String Array: Kumpulan elemen dengan tipe yang sama. tipe_data nama_array[ukuran]; nama_array[indeks] = nilai; // Indeks mulai dari 0 String C-style: Array karakter diakhiri '\0' . char str[] = "Halo"; std::string (C++): Lebih aman & mudah digunakan. #include <string> std::string s = "Halo"; s.length(); // Panjang string s + " Dunia"; // Konkatenasi 9. Pointer Deklarasi: tipe_data* nama_pointer; Alamat: &variabel (operator alamat) Dereference: *pointer (mengakses nilai yang ditunjuk) Pointer ke Array: Nama array adalah pointer ke elemen pertama. nullptr (C++11+): Pointer null yang aman. 10. Referensi (C++11+) Alias untuk variabel yang sudah ada. int x = 10; int& ref_x = x; // ref_x adalah alias untuk x ref_x = 20; // x sekarang 20 Harus diinisialisasi saat deklarasi. Tidak bisa diubah untuk mereferensikan variabel lain. 11. Struktur ( struct ) Kumpulan variabel dengan tipe data berbeda dalam satu unit. struct Titik { int x; int y; }; Titik p1; p1.x = 10; Anggota defaultnya publik. 12. Kelas ( class ) & OOP Kelas: Blueprint untuk objek. class Mobil { public: // Dapat diakses dari luar kelas std::string warna; void nyalakan() { /* ... */ } private: // Hanya dapat diakses dari dalam kelas int kecepatan; }; Mobil civic; civic.warna = "Merah"; civic.nyalakan(); Objek: Instance dari kelas. Access Specifiers: public , private , protected . Konstruktor: Fungsi khusus yang dipanggil saat objek dibuat. class Contoh { public: Contoh() { /* Konstruktor default */ } Contoh(int a) { /* Konstruktor dengan argumen */ } }; Destruktor: Fungsi khusus yang dipanggil saat objek dihancurkan ( ~NamaKelas() ). Pewarisan: Kelas dapat mewarisi fitur dari kelas lain ( class Anak : public Induk { ... }; ). Polimorfisme: Objek dari kelas yang berbeda dapat diperlakukan sebagai objek dari kelas induk yang sama. Fungsi virtual: virtual void method(); 13. Templat Memungkinkan penulisan kode generik yang berfungsi dengan tipe data apa pun. template <typename T> T tambah(T a, T b) { return a + b; } int x = tambah(5, 7); // T menjadi int double y = tambah(5.5, 7.2); // T menjadi double Dapat digunakan untuk fungsi dan kelas. 14. Penanganan Pengecualian Mekanisme untuk menangani error saat runtime. try { // Kode yang mungkin menimbulkan error if (kondisi_error) { throw std::runtime_error("Pesan error"); } } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } throw untuk melemparkan pengecualian. try-catch untuk menangkap pengecualian. 15. Standard Library (STL) Kontainer: std::vector : Array dinamis. #include <vector> std::vector<int> v = {1, 2, 3}; v.push_back(4); v[0]; std::list : Doubly linked list. std::map : Key-value pairs (sorted by key). #include <map> std::map<std::string, int> usia; usia["Alice"] = 30; std::set : Kumpulan nilai unik (sorted). Algoritma: ( #include <algorithm> ) std::sort() , std::find() , std::min() , std::max() . Iterator: Objek seperti pointer untuk menelusuri kontainer. for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } 16. Manajemen Memori Alokasi Dinamis: new : Mengalokasikan memori di heap. int* ptr = new int; *ptr = 10; new[] : Mengalokasikan array. int* arr = new int[10]; Dealokasi: delete : Membebaskan memori yang dialokasikan oleh new . delete ptr; delete[] : Membebaskan memori yang dialokasikan oleh new[] . delete[] arr; Smart Pointers (C++11+): Mengelola memori secara otomatis. std::unique_ptr : Kepemilikan eksklusif. std::shared_ptr : Kepemilikan bersama (reference counting).