Skip to content

Belajar Bahasa Pemrograman C++ Dasar

Pengenalan C++

Sejarah C++

C++ adalah bahasa pemrograman yang dikembangkan sebagai perluasan dari bahasa C oleh Bjarne Stroustrup di Bell Labs pada awal 1980-an. Tujuan utama dari pengembangan C++ adalah untuk menambahkan fitur pemrograman berorientasi objek (OOP) ke bahasa C yang sudah ada, sehingga memudahkan pengembangan perangkat lunak yang kompleks dan besar.

Tonggak Penting dalam Sejarah C++

  1. 1980: Awal Pengembangan
  2. Bjarne Stroustrup mulai mengembangkan "C with Classes," yang merupakan dasar dari apa yang akan menjadi C++.
  3. Fokus awalnya adalah menambahkan konsep OOP ke dalam bahasa C, termasuk kelas, objek, dan pewarisan.

  4. 1983: Nama C++ Muncul

  5. Nama "C++" pertama kali digunakan. Operator "++" dalam C menandakan peningkatan atau inkrementasi, yang mencerminkan bahwa C++ adalah pengembangan dari C.

  6. 1985: Rilis Komersial Pertama

  7. C++ secara resmi dirilis dengan publikasi buku Bjarne Stroustrup "The C++ Programming Language." Buku ini menjadi referensi utama bagi banyak programmer yang ingin mempelajari C++.

  8. 1989: ANSI C++ Committee Didirikan

  9. Komite ANSI (American National Standards Institute) untuk C++ didirikan untuk mengembangkan standar resmi bagi bahasa ini.

  10. 1990: Penerapan Standar Awal

  11. Rilis pertama dari "The Annotated C++ Reference Manual" oleh Ellis dan Stroustrup, yang menjadi dasar untuk standar C++.

  12. 1998: Standar ISO C++ Pertama

  13. ISO (International Organization for Standardization) menerbitkan standar pertama untuk C++, dikenal sebagai C++98 (ISO/IEC 14882:1998). Ini mencakup banyak fitur inti yang masih digunakan hingga saat ini.

  14. 2003: Pembaruan C++

  15. Standar C++ diperbarui, dikenal sebagai C++03, yang merupakan revisi minor dari C++98 dengan perbaikan bug dan penjelasan tambahan.

  16. 2011: C++11

  17. C++11 (sebelumnya dikenal sebagai C++0x) dirilis, membawa banyak fitur baru yang signifikan seperti:

    • Lambda expressions
    • Auto keyword
    • Range-based for loops
    • Static assertions
    • Smart pointers
    • Move semantics
  18. 2014: C++14

  19. C++14 memperkenalkan beberapa perbaikan dan tambahan minor terhadap C++11, seperti:

    • Generics lambdas
    • Binary literals
    • User-defined literals
    • Standard library improvements
  20. 2017: C++17

    • C++17 membawa lebih banyak peningkatan, termasuk:
    • std::optional
    • std::variant
    • std::any
    • If-initializers and switch-initializers
    • Fold expressions
  21. 2020: C++20

    • C++20 memperkenalkan fitur-fitur besar yang lebih maju, seperti:
    • Concepts
    • Ranges
    • Coroutines
    • Modules
    • Three-way comparison (spaceship operator)
  22. 2023: C++23 (Proyek Masa Depan)

    • C++23 sedang dalam tahap pengembangan dan diharapkan membawa lebih banyak peningkatan pada performa, keamanan, dan kemampuan ekspresif bahasa.

Pengaruh dan Penggunaan C++

C++ memiliki pengaruh besar dalam dunia pemrograman dan digunakan dalam berbagai aplikasi kritis, termasuk:

  • Sistem Operasi: Banyak sistem operasi dan komponen inti mereka ditulis dalam C++ (misalnya, bagian dari Windows, Linux kernel extensions).

  • Permainan Video: Banyak mesin permainan menggunakan C++ karena kinerja tinggi dan kontrol langsung terhadap hardware.

  • Aplikasi Perbankan dan Keuangan: Aplikasi ini sering memerlukan kinerja yang sangat tinggi dan kehandalan, dua bidang di mana C++ unggul.

  • Perangkat Lunak Sistem dan Alat Pengembangan: Banyak compiler, interpreter, dan alat pengembangan lainnya ditulis dalam C++.

Compiler

Apa itu Compiler?

Compiler adalah perangkat lunak yang menerjemahkan kode sumber yang ditulis dalam bahasa pemrograman tingkat tinggi (seperti C, C++, Java) menjadi bahasa mesin atau kode biner yang dapat dieksekusi oleh komputer. Proses ini melibatkan beberapa tahap yang kompleks untuk memastikan bahwa kode sumber diubah menjadi program yang efisien dan bebas dari kesalahan.

Fungsi Utama Compiler

  1. Penerjemahan Kode Sumber:
  2. Compiler mengambil kode sumber yang ditulis oleh programmer dan menerjemahkannya ke dalam bahasa mesin yang dapat dijalankan oleh komputer.

  3. Optimasi:

  4. Compiler sering melakukan optimasi untuk meningkatkan kinerja program yang dihasilkan. Ini termasuk optimasi waktu eksekusi dan penggunaan memori.

  5. Deteksi Kesalahan:

  6. Compiler memeriksa kode sumber untuk kesalahan sintaksis dan semantik. Jika ditemukan kesalahan, compiler memberikan pesan kesalahan yang membantu programmer untuk memperbaiki kode mereka.

Tahapan dalam Proses Kompilasi

Proses kompilasi biasanya melibatkan beberapa tahap, termasuk:

  1. Lexical Analysis (Analisis Leksikal):
  2. Memecah kode sumber menjadi token, yang merupakan unit dasar seperti kata kunci, operator, dan identifier.

  3. Syntax Analysis (Analisis Sintaksis):

  4. Memeriksa susunan token untuk memastikan bahwa mereka membentuk struktur yang valid menurut aturan tata bahasa bahasa pemrograman.

  5. Semantic Analysis (Analisis Semantik):

  6. Memeriksa makna kode untuk memastikan bahwa semua operasi masuk akal (misalnya, memeriksa tipe data yang digunakan dalam operasi aritmatika).

  7. Intermediate Code Generation (Pembuatan Kode Menengah):

  8. Menghasilkan representasi menengah dari kode sumber yang lebih mudah dioptimasi.

  9. Optimization (Optimasi):

  10. Mengoptimalkan kode menengah untuk meningkatkan kinerja.

  11. Code Generation (Pembuatan Kode):

  12. Menerjemahkan kode menengah yang dioptimasi menjadi kode mesin.

  13. Code Linking (Penggabungan Kode):

  14. Menggabungkan berbagai modul dan library yang diperlukan untuk membuat program yang dapat dieksekusi.

Compiler vs. Interpreter

  • Compiler:
  • Menerjemahkan seluruh program sebelum eksekusi.
  • Menghasilkan file eksekusi yang dapat dijalankan tanpa perlu kode sumber.
  • Eksekusi program biasanya lebih cepat karena sudah diterjemahkan sepenuhnya.
  • Contoh: GCC untuk C/C++, javac untuk Java.

  • Interpreter:

  • Menerjemahkan dan menjalankan program baris demi baris.
  • Tidak menghasilkan file eksekusi terpisah; kode sumber harus tersedia setiap kali program dijalankan.
  • Eksekusi program biasanya lebih lambat karena penerjemahan dilakukan saat runtime.
  • Contoh: Python, Ruby.

Compiler Populer

  1. GCC (GNU Compiler Collection):
  2. Mendukung berbagai bahasa pemrograman, termasuk C, C++, dan Fortran.
  3. Cross-platform dan digunakan secara luas dalam pengembangan perangkat lunak open source.

  4. Clang:

  5. Compiler untuk bahasa C, C++, dan Objective-C yang menggunakan LLVM sebagai backend.
  6. Menyediakan pesan kesalahan yang lebih baik dan lebih ramah pengguna dibandingkan GCC.

  7. MSVC (Microsoft Visual C++):

  8. Compiler C++ yang merupakan bagian dari Visual Studio.
  9. Digunakan secara luas dalam pengembangan perangkat lunak untuk platform Windows.

  10. javac:

  11. Compiler untuk bahasa pemrograman Java.
  12. Bagian dari JDK (Java Development Kit).

  13. Intel C++ Compiler:

  14. Compiler yang dioptimalkan untuk prosesor Intel.
  15. Digunakan dalam aplikasi yang memerlukan performa tinggi.

Instalasi Compiler GCC dan Clang

Berikut adalah langkah-langkah untuk menginstal compiler GCC dan Clang pada berbagai sistem operasi (Windows, macOS, dan Linux).

Instalasi GCC

GCC (GNU Compiler Collection) adalah koleksi compiler untuk berbagai bahasa pemrograman, termasuk C dan C++.

Windows
  1. Menggunakan MinGW:
  2. Unduh MinGW dari MinGW-w64.
  3. Jalankan installer dan ikuti petunjuk instalasi. Pilih versi yang diinginkan dan komponen yang dibutuhkan (pastikan GCC terpilih).
  4. Tambahkan direktori bin dari MinGW ke PATH environment variable:

    • Buka Control Panel -> System and Security -> System -> Advanced system settings -> Environment Variables.
    • Tambahkan C:\MinGW\bin (atau lokasi instalasi MinGW Anda) ke PATH.
  5. Menggunakan MSYS2:

  6. Unduh dan instal MSYS2 dari MSYS2.
  7. Buka MSYS2 shell dan jalankan perintah berikut untuk menginstal GCC:
    pacman -S mingw-w64-x86_64-gcc
    
  8. Tambahkan direktori bin dari MSYS2 ke PATH environment variable:
    • C:\msys64\mingw64\bin (atau lokasi instalasi MSYS2 Anda).
macOS
  1. Menggunakan Homebrew:
  2. Instal Homebrew jika belum terinstal:
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  3. Instal GCC menggunakan Homebrew:
    brew install gcc
    
Linux
  1. Debian/Ubuntu:
  2. Buka terminal dan jalankan:

    sudo apt update
    sudo apt install build-essential
    

  3. Fedora:

  4. Buka terminal dan jalankan:

    sudo dnf groupinstall "Development Tools"
    

  5. Arch Linux:

  6. Buka terminal dan jalankan:
    sudo pacman -S base-devel
    

Instalasi Clang

Clang adalah compiler frontend untuk bahasa C, C++, dan Objective-C, yang menggunakan LLVM sebagai backendnya.

Windows
  1. Menggunakan LLVM Installer:
  2. Unduh LLVM dari LLVM Releases.
  3. Jalankan installer dan ikuti petunjuk instalasi.
  4. Tambahkan direktori bin dari LLVM ke PATH environment variable:

    • C:\Program Files\LLVM\bin (atau lokasi instalasi LLVM Anda).
  5. Menggunakan MSYS2:

  6. Buka MSYS2 shell dan jalankan perintah berikut untuk menginstal Clang:
    pacman -S mingw-w64-x86_64-clang
    
  7. Tambahkan direktori bin dari MSYS2 ke PATH environment variable:
    • C:\msys64\mingw64\bin (atau lokasi instalasi MSYS2 Anda).
macOS
  1. Menggunakan Xcode Command Line Tools:
  2. Buka terminal dan jalankan:
    xcode-select --install
    
  3. Ini akan menginstal Clang bersama dengan alat baris perintah Xcode lainnya.

  4. Menggunakan Homebrew:

  5. Instal Homebrew jika belum terinstal:
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  6. Instal Clang menggunakan Homebrew:
    brew install llvm
    
  7. Untuk menggunakan Clang yang diinstal Homebrew, tambahkan ke PATH:
    export PATH="/usr/local/opt/llvm/bin:$PATH"
    
Linux
  1. Debian/Ubuntu:
  2. Buka terminal dan jalankan:

    sudo apt update
    sudo apt install clang
    

  3. Fedora:

  4. Buka terminal dan jalankan:

    sudo dnf install clang
    

  5. Arch Linux:

  6. Buka terminal dan jalankan:
    sudo pacman -S clang
    

Verifikasi Instalasi

Untuk memverifikasi instalasi GCC atau Clang, buka terminal atau command prompt dan jalankan perintah berikut:

  • GCC:

    gcc --version
    

  • Clang:

    clang --version
    

Jika instalasi berhasil, Anda akan melihat versi dari compiler yang terinstal.

Struktur Dasar Program C++

Struktur Dasar Program C++

Setiap program C++ terdiri dari berbagai elemen seperti fungsi, pernyataan, dan blok kode. Program paling sederhana adalah program "Hello, World!".

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

Penjelasan Elemen-elemen Utama

  • Header File (#include <iostream>): Baris ini mengarahkan compiler untuk memasukkan konten dari file header <iostream>, yang merupakan bagian dari pustaka standar C++ dan digunakan untuk input-output stream.

  • Fungsi main(): Setiap program C++ harus memiliki satu fungsi main() sebagai titik awal eksekusi program. Sintaks dasar untuk fungsi main() adalah:

    int main() {
        // kode
        return 0;
    }
    

  • Blok Kode ({}): Blok kode dalam C++ ditandai dengan kurung kurawal {}. Semua pernyataan dalam fungsi ditempatkan di dalam blok ini.

  • Pernyataan (std::cout << "Hello, World!" << std::endl;): std::cout digunakan untuk mencetak teks ke layar. Operator << digunakan untuk mengirimkan data ke std::cout. std::endl digunakan untuk memindahkan ke baris baru.

  • Return Statement (return 0;): return 0; menunjukkan bahwa program berakhir dengan sukses. Nilai yang dikembalikan oleh main() digunakan oleh sistem operasi untuk menentukan status keluar program.

Komentar dalam C++

Komentar digunakan untuk memberikan penjelasan pada kode dan diabaikan oleh compiler. Ada dua jenis komentar:

  • Komentar Satu Baris:

    // Ini adalah komentar satu baris
    

  • Komentar Multi Baris:

    /* Ini adalah komentar
       multi baris */
    

Variabel dan Tipe Data dalam C++

Variabel adalah tempat penyimpanan data yang diberi nama, dan tipe data menentukan jenis nilai yang dapat disimpan dalam variabel tersebut.

Deklarasi dan Inisialisasi Variabel

  • Deklarasi Variabel: Deklarasi variabel adalah proses mendefinisikan nama variabel dan tipe datanya.

    int number;   // Deklarasi variabel integer
    float rate;   // Deklarasi variabel float
    

  • Inisialisasi Variabel: Inisialisasi variabel adalah proses memberikan nilai awal pada variabel saat dideklarasikan.

    int number = 10;       // Deklarasi dan inisialisasi variabel integer
    float rate = 3.14f;    // Deklarasi dan inisialisasi variabel float
    

Tipe Data Dasar

C++ menyediakan beberapa tipe data dasar untuk menyimpan berbagai jenis nilai.

  • Integer (int): Tipe data untuk menyimpan bilangan bulat.

    int age = 25;
    

  • Float (float): Tipe data untuk menyimpan bilangan desimal dengan presisi tunggal.

    float pi = 3.14f;
    

  • Double (double): Tipe data untuk menyimpan bilangan desimal dengan presisi ganda.

    double e = 2.718281828459;
    

  • Character (char): Tipe data untuk menyimpan karakter tunggal.

    char grade = 'A';
    

  • Boolean (bool): Tipe data untuk menyimpan nilai logika true atau false.

    bool isStudent = true;
    

Tipe Data Tambahan

C++ juga menyediakan tipe data tambahan untuk menyimpan nilai dengan rentang yang lebih luas atau lebih sempit.

  • Unsigned: Tipe data tanpa tanda yang hanya menyimpan bilangan positif (atau nol).

    unsigned int positiveNumber = 50;
    

  • Long: Tipe data untuk menyimpan bilangan bulat dengan rentang yang lebih besar.

    long bigNumber = 1234567890L;
    

  • Short: Tipe data untuk menyimpan bilangan bulat dengan rentang yang lebih kecil.

    short smallNumber = 32000;
    

Berikut adalah beberapa kombinasi dari tipe data ini:

unsigned long ul = 1234567890UL;
short int si = 100;
unsigned short us = 50000;

Konstanta

Konstanta adalah variabel yang nilainya tidak dapat diubah setelah didefinisikan. C++ menyediakan dua cara utama untuk mendeklarasikan konstanta: const dan constexpr.

  • Konstanta dengan const: Konstanta yang dideklarasikan dengan const memiliki nilai tetap yang tidak dapat diubah.

    const int maxAge = 100;
    

  • Konstanta dengan constexpr: Konstanta yang dideklarasikan dengan constexpr dievaluasi pada waktu kompilasi, dan digunakan ketika Anda ingin memastikan nilai konstanta dihitung pada saat kompilasi.

    constexpr int daysInWeek = 7;
    

Contoh Program

Berikut adalah contoh program C++ yang mendemonstrasikan penggunaan variabel, tipe data, dan konstanta:

#include <iostream>

int main() {
    // Deklarasi dan inisialisasi variabel
    int age = 25;
    float height = 5.9f;
    double weight = 70.5;
    char grade = 'A';
    bool isStudent = true;

    // Tipe data tambahan
    unsigned int positiveNumber = 50;
    long bigNumber = 1234567890L;
    short smallNumber = 32000;

    // Konstanta
    const int maxAge = 100;
    constexpr int daysInWeek = 7;

    // Menampilkan nilai variabel dan konstanta
    std::cout << "Umur: " << age << std::endl;
    std::cout << "Tinggi: " << height << std::endl;
    std::cout << "Berat: " << weight << std::endl;
    std::cout << "Grade: " << grade << std::endl;
    std::cout << "Is student: " << std::boolalpha << isStudent << std::endl;
    std::cout << "Bilangan positif: " << positiveNumber << std::endl;
    std::cout << "Angka besar: " << bigNumber << std::endl;
    std::cout << "Angka kecil: " << smallNumber << std::endl;
    std::cout << "Max age: " << maxAge << std::endl;
    std::cout << "Hari ini dalam minggu : " << daysInWeek << std::endl;

    return 0;
}

Catatan Mengenai Operator dalam C++

Operator adalah simbol yang memberi tahu compiler untuk melakukan operasi matematika atau logika pada satu atau lebih operand. Berikut adalah penjelasan berbagai jenis operator yang ada dalam C++.

1. Operator Aritmatika

Operator aritmatika digunakan untuk melakukan operasi matematika dasar.

Operator Deskripsi Contoh
+ Penjumlahan a + b
- Pengurangan a - b
* Perkalian a * b
/ Pembagian a / b
% Modulus (sisa bagi) a % b
++ Increment a++ atau ++a
-- Decrement a-- atau --a

Contoh:

int a = 10, b = 3;
int sum = a + b;     // 13
int diff = a - b;    // 7
int prod = a * b;    // 30
int quot = a / b;    // 3
int mod = a % b;     // 1
a++;                 // 11
b--;                 // 2

2. Operator Perbandingan

Operator perbandingan digunakan untuk membandingkan dua nilai dan mengembalikan hasil dalam bentuk boolean (true atau false).

Operator Deskripsi Contoh
== Sama dengan a == b
!= Tidak sama dengan a != b
> Lebih besar dari a > b
< Lebih kecil dari a < b
>= Lebih besar atau sama dengan a >= b
<= Lebih kecil atau sama dengan a <= b

Contoh:

int a = 5, b = 3;
bool isEqual = (a == b);        // false
bool isNotEqual = (a != b);     // true
bool isGreater = (a > b);       // true
bool isLess = (a < b);          // false
bool isGreaterOrEqual = (a >= b); // true
bool isLessOrEqual = (a <= b);    // false

3. Operator Logika

Operator logika digunakan untuk melakukan operasi logika pada nilai boolean.

Operator Deskripsi Contoh
&& Logika AND a && b
|| Logika OR a || b
! Logika NOT !a

Contoh:

bool a = true, b = false;
bool andOp = (a && b);    // false
bool orOp = (a || b);     // true
bool notOp = !a;          // false

4. Operator Bitwise

Operator bitwise digunakan untuk melakukan operasi pada level bit.

Operator Deskripsi Contoh
& AND bitwise a & b
| OR bitwise a | b
^ XOR bitwise a ^ b
~ NOT bitwise ~a
<< Left shift a << 1
>> Right shift a >> 1

Contoh:

int a = 5;  // 0101 in binary
int b = 3;  // 0011 in binary
int andOp = a & b;   // 0001 (1)
int orOp = a | b;    // 0111 (7)
int xorOp = a ^ b;   // 0110 (6)
int notOp = ~a;      // 11111111111111111111111111111010 (-6 in 2's complement)
int leftShift = a << 1; // 1010 (10)
int rightShift = a >> 1; // 0010 (2)

5. Operator Penugasan

Operator penugasan digunakan untuk menetapkan nilai ke variabel.

Operator Deskripsi Contoh
= Penugasan a = b
+= Penugasan dengan penjumlahan a += b
-= Penugasan dengan pengurangan a -= b
*= Penugasan dengan perkalian a *= b
/= Penugasan dengan pembagian a /= b
%= Penugasan dengan modulus a %= b
&= Penugasan dengan AND bitwise a &= b
|= Penugasan dengan OR bitwise a |= b
^= Penugasan dengan XOR bitwise a ^= b
<<= Penugasan dengan left shift a <<= b
>>= Penugasan dengan right shift a >>= b

Contoh:

int a = 5;
a += 3;  // a = a + 3, hasil: 8
a -= 2;  // a = a - 2, hasil: 6
a *= 4;  // a = a * 4, hasil: 24
a /= 6;  // a = a / 6, hasil: 4
a %= 3;  // a = a % 3, hasil: 1

6. Operator Lainnya

  • sizeof: Operator sizeof digunakan untuk mendapatkan ukuran tipe data atau variabel dalam byte.

    int a;
    std::cout << sizeof(a) << std::endl;   // Output: 4 (misalnya, tergantung arsitektur)
    std::cout << sizeof(int) << std::endl; // Output: 4
    

  • Conditional (Ternary) Operator (?:): Operator ternary adalah operator kondisional yang memerlukan tiga operand. Bentuknya adalah kondisi ? ekspresi1 : ekspresi2.

    int a = 10;
    int b = 5;
    int max = (a > b) ? a : b; // Jika a > b, maka max = a, else max = b
    

  • Comma Operator (,): Operator koma digunakan untuk menggabungkan beberapa pernyataan. Ekspresi dieksekusi dari kiri ke kanan, dan nilai dari ekspresi terakhir adalah hasilnya.

    int a = (1, 2, 3); // a = 3
    int b = (a = 5, a + 2); // b = 7 (a menjadi 5 dulu, kemudian b menjadi 5 + 2)
    

Contoh Program Menggunakan Berbagai Operator

#include <iostream>

int main() {
    // Operator Aritmatika
    int a = 10, b = 3;
    std::cout << "Sum: " << a + b << std::endl;
    std::cout << "Difference: " << a - b << std::endl;
    std::cout << "Product: " << a * b << std::endl;
    std::cout << "Quotient: " << a / b << std::endl;
    std::cout << "Modulus: " << a % b << std::endl;

    // Operator Perbandingan
    std::cout << "a == b: " << (a == b) << std::endl;
    std::cout << "a != b: " << (a != b) << std::endl;
    std::cout << "a > b: " << (a > b) << std::endl;
    std::cout << "a < b: " << (a < b) << std::endl;

    // Operator Logika
    bool x = true, y = false;
    std::cout << "x && y: " << (x && y) << std::endl;
    std::cout << "x || y: " << (x || y) << std::endl;
    std::cout << "!x: " << (!x) << std::endl;

    // Operator Bitwise
    std::cout << "a & b: " << (a & b) << std::endl;
    std::cout << "a | b: " << (a | b) << std::endl;
    std::cout << "a ^ b: " << (a ^ b) << std::endl;
    std::cout << "~a: " << (~a) << std::endl;
    std::cout << "a << 1: " << (a << 1) << std::endl;
    std::cout << "a >> 1: " << (a >> 1) << std::endl;

    // Operator Penugasan
    int result = 0;
    result += a;    // result = result + a;
    result -= b;    // result = result - b;
    result *= a;    // result = result * a;
    result /= b;    // result = result / b;
    result %= b;    // result = result % b;

    // sizeof Operator
    std::cout << "Size of int: " << sizeof(int) << " bytes" << std::endl;
    std::cout << "Size of float: " << sizeof(float) << " bytes" << std::endl;
    std::cout << "Size of double: " << sizeof(double) << " bytes" << std::endl;

    // Conditional (Ternary) Operator
    int num1 = 10, num2 = 5;
    int max = (num1 > num2) ? num1 : num2;
    std::cout << "Max: " << max << std::endl;

    // Comma Operator
    int c = (1, 2, 3);  // c = 3
    int d = (a = 5, a + 2); // d = 7

    return 0;
}

Input dan Output dalam C++

Input dan output (I/O) adalah proses penting dalam pemrograman untuk berinteraksi dengan pengguna dan menampilkan hasil dari program.

Dalam C++, std::cout digunakan untuk output dan std::cin digunakan untuk input. Selain itu, manipulator output seperti std::endl, std::fixed, dan std::setprecision digunakan untuk mengontrol format output.

Penggunaan std::cout untuk Output

std::cout digunakan untuk menampilkan data ke layar.

Contoh:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

Penggunaan std::cin untuk Input

std::cin digunakan untuk membaca data dari pengguna.

Contoh:

#include <iostream>

int main() {
    int num;
    std::cout << "Masukan angka: ";
    std::cin >> num;
    std::cout << "Angka adalah: " << num << std::endl;
    return 0;
}

Manipulator Output

Manipulator output digunakan untuk mengontrol format output.

  • std::endl: Digunakan untuk memindahkan ke baris baru.
  • std::fixed: Menetapkan presisi tetap untuk output floating point.
  • std::setprecision: Menetapkan jumlah digit presisi untuk output floating point.

Contoh:

#include <iostream>
#include <iomanip> // Diperlukan untuk std::fixed dan std::setprecision

int main() {
    double num = 3.14159;
    std::cout << "Default: " << num << std::endl;  // Output: 3.14159
    std::cout << "Fixed: " << std::fixed << num << std::endl;  // Output: 3.141590
    std::cout << "Precision: " << std::setprecision(3) << num << std::endl;  // Output: 3.14
    return 0;
}

using namespace std;

using namespace std; digunakan untuk mempermudah penggunaan std::cout dan std::cin tanpa menuliskan std:: setiap saat. Namun, penggunaannya tidak disarankan dalam file header atau di dalam file yang besar.

Contoh:

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "Masukan angka: ";
    cin >> num;
    cout << "Angka adalah: " << num << endl;
    return 0;
}

Kontrol Alur Program dalam C++

memungkinkan pemrogram untuk mengarahkan jalannya program sesuai dengan kondisi atau iterasi tertentu. Dalam C++, ini dapat dicapai menggunakan percabangan (if, else if, else, switch) dan looping (for, while, do-while). Selain itu, break dan continue digunakan untuk mengubah alur eksekusi dalam loop.

Percabangan (if, else if, else)

Percabangan digunakan untuk memilih aksi yang akan diambil berdasarkan kondisi tertentu.

Contoh:

#include <iostream>

int main() {
    int num = 10;

    if (num > 0) {
        std::cout << "Positive" << std::endl;
    } else if (num < 0) {
        std::cout << "Negative" << std::endl;
    } else {
        std::cout << "Zero" << std::endl;
    }

    return 0;
}

Switch Case

Switch case digunakan untuk memilih satu dari beberapa blok kode yang akan dieksekusi berdasarkan nilai ekspresi tertentu.

Contoh:

#include <iostream>

int main() {
    int day = 3;

    switch (day) {
        case 1:
            std::cout << "Monday" << std::endl;
            break;
        case 2:
            std::cout << "Tuesday" << std::endl;
            break;
        case 3:
            std::cout << "Wednesday" << std::endl;
            break;
        default:
            std::cout << "Invalid day" << std::endl;
            break;
    }

    return 0;
}

Looping (for, while, do-while)

Looping digunakan untuk mengeksekusi blok kode berulang kali.

Contoh for:

#include <iostream>

int main() {
    for (int i = 0; i < 5; i++) {
        std::cout << i << std::endl;
    }
    return 0;
}

Contoh while:

#include <iostream>

int main() {
    int i = 0;
    while (i < 5) {
        std::cout << i << std::endl;
        i++;
    }
    return 0;
}

Contoh do-while:

#include <iostream>

int main() {
    int i = 0;
    do {
        std::cout << i << std::endl;
        i++;
    } while (i < 5);
    return 0;
}

Penggunaan break dan continue

  • break: Digunakan untuk menghentikan loop secara paksa.
  • continue: Digunakan untuk melanjutkan ke iterasi berikutnya dalam loop.

Contoh break:

#include <iostream>

int main() {
    for (int i = 0; i < 5; i++) {
        if (i == 3) {
            break;
        }
        std::cout << i << std::endl;
    }
    return 0;
}

Contoh continue:

#include <iostream>

int main() {
    for (int i = 0; i < 5; i++) {
        if (i == 2) {
            continue;
        }
        std::cout << i << std::endl;
    }
    return 0;
}

Fungsi dalam C++

Fungsi (function) adalah blok kode yang digunakan untuk melakukan tugas tertentu. Dalam C++, fungsi dapat dideklarasikan, didefinisikan, dipanggil, dan digunakan kembali dengan berbagai cara. Berikut adalah beberapa konsep utama tentang fungsi dalam C++.

1. Deklarasi dan Definisi Fungsi

  • Deklarasi Fungsi: Memberi tahu compiler tentang keberadaan fungsi dan tipe nilai kembalinya.

    int max(int a, int b); // Deklarasi fungsi
    

  • Definisi Fungsi: Menyediakan implementasi fungsi.

    int max(int a, int b) {
        return (a > b) ? a : b;
    }
    

Pemanggilan Fungsi

Memanggil fungsi untuk menjalankan blok kode di dalamnya.

Contoh:

int result = max(10, 5); // Memanggil fungsi max

Parameter Fungsi (Nilai dan Referensi)

  • Parameter Nilai: Mengirim nilai ke dalam fungsi. Nilai parameter tidak dapat diubah di dalam fungsi.

    void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }
    

  • Parameter Referensi: Mengirim referensi variabel ke dalam fungsi. Nilai parameter dapat diubah di dalam fungsi.

    void swap(int &a, int &b) {
        int temp = a;
        a = b;
        b = temp;
    }
    

Fungsi inline

Fungsi inline digunakan untuk menggantikan panggilan fungsi dengan kode aktual fungsi. Ini dapat meningkatkan kinerja program dengan mengurangi overhead pemanggilan fungsi.

Contoh:

inline int square(int x) {
    return x * x;
}

Overloading Fungsi

Overloading memungkinkan untuk mendefinisikan beberapa fungsi dengan nama yang sama tetapi dengan parameter yang berbeda.

Contoh:

int add(int a, int b) {
    return a + b;
}

float add(float a, float b) {
    return a + b;
}

Fungsi Rekursif

Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Ini sering digunakan untuk menyelesaikan masalah yang dapat diuraikan menjadi sub-masalah yang lebih kecil.

Contoh:

int factorial(int n) {
    if (n <= 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

Catatan Mengenai Array dan String dalam C++

Array digunakan untuk menyimpan serangkaian nilai dengan tipe data yang sama, sedangkan string adalah kumpulan karakter.

Deklarasi dan Inisialisasi Array

  • Deklarasi Array: Mendefinisikan tipe data dan ukuran array.

    int numbers[5]; // Array bilangan bulat dengan panjang 5
    

  • Inisialisasi Array: Memberikan nilai awal kepada elemen-elemen array saat deklarasi.

    int numbers[] = {1, 2, 3, 4, 5}; // Inisialisasi array dengan nilai awal
    

Akses Elemen Array

Menggunakan indeks untuk mengakses elemen-elemen dalam array.

Contoh:

int numbers[] = {1, 2, 3, 4, 5};
int x = numbers[2]; // Mengakses elemen ketiga (indeks 2)

Array Multidimensi

Array multidimensi adalah array dengan dua atau lebih dimensi.

Contoh:

int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
int element = matrix[1][2]; // Mengakses elemen di baris kedua dan kolom ketiga

Penggunaan String

  • Array char: String dapat dideklarasikan sebagai array char.

    char name[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // \0 menandakan akhir string
    

  • std::string: C++ juga memiliki tipe data std::string yang lebih fleksibel.

    #include <string>
    std::string greeting = "Hello";
    

Contoh Penggunaan String

#include <iostream>
#include <string>

int main() {
    // Array char
    char name[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    std::cout << "Array char: " << name << std::endl;

    // std::string
    std::string greeting = "Hello";
    std::cout << "std::string: " << greeting << std::endl;

    return 0;
}

Catatan Mengenai Pointer dan Referensi dalam C++

Pointer dan referensi adalah fitur penting dalam C++ yang memungkinkan untuk bekerja dengan alamat memori dan memanipulasi data dengan lebih fleksibel. Berikut adalah beberapa konsep utama tentang pointer dan referensi dalam C++.

1. Deklarasi Pointer

Pointer adalah variabel yang menyimpan alamat memori suatu variabel lain.

Contoh:

int *ptr; // Pointer ke variabel bertipe int

2. Operator Dereferensi (*) dan Alamat (&)

  • Dereferensi (*): Digunakan untuk mengakses nilai yang disimpan di alamat yang ditunjuk oleh pointer.

    int value = 10;
    int *ptr = &value; // Pointer menyimpan alamat value
    int x = *ptr; // x akan memiliki nilai 10 (nilai yang disimpan di alamat yang ditunjuk oleh ptr)
    

  • Alamat (&): Digunakan untuk mendapatkan alamat memori dari variabel.

    int value = 10;
    int *ptr = &value; // Pointer menyimpan alamat value
    

3. Pointer dan Array

Pointer dapat digunakan untuk mengakses elemen-elemen dalam array.

Contoh:

int numbers[5] = {1, 2, 3, 4, 5};
int *ptr = numbers; // Pointer ptr menunjuk ke alamat memori array numbers
int x = *ptr; // x akan memiliki nilai 1 (nilai pertama dalam array)

4. Pointer ke Pointer

Pointer juga dapat menunjuk ke pointer lainnya.

Contoh:

int value = 10;
int *ptr1 = &value; // Pointer pertama
int **ptr2 = &ptr1; // Pointer kedua yang menunjuk ke pointer pertama
int x = **ptr2; // x akan memiliki nilai 10 (nilai yang disimpan di alamat yang ditunjuk oleh ptr1)

Referensi (&)

Referensi adalah alias untuk variabel yang ada. Ini memungkinkan kita untuk menggunakan nama alternatif untuk variabel yang ada.

Contoh:

int value = 10;
int &ref = value; // Referensi ref untuk variabel value
int x = ref; // x akan memiliki nilai 10 (nilai yang disimpan di variabel value)

Struktur Data dan Kelas dalam C++

Struktur data dan kelas adalah konsep penting dalam pemrograman berorientasi objek (OOP) yang digunakan untuk mengorganisir dan mengelola data dan fungsi dalam program. Berikut adalah beberapa konsep utama tentang struktur data dan kelas dalam C++.

Definisi Struktur (struct)

Struktur (struct) adalah kumpulan data dengan tipe yang berbeda yang dapat dikelompokkan bersama dalam satu unit.

Contoh:

struct Person {
    std::string name;
    int age;
};

Deklarasi dan Penggunaan Kelas (class)

Kelas (class) adalah struktur data yang dapat menyimpan data dan fungsi yang beroperasi pada data tersebut.

Contoh:

class Car {
public:
    std::string brand;
    int year;
};

Akses Kontrol (public, private, protected)

  • public: Anggota kelas dapat diakses dari mana saja di dalam atau di luar kelas.
  • private: Anggota kelas hanya dapat diakses dari dalam kelas itu sendiri.
  • protected: Anggota kelas hanya dapat diakses dari dalam kelas itu sendiri dan dari kelas turunannya.

Contoh:

class Car {
public:
    std::string brand; // public member
private:
    int year; // private member
protected:
    float price; // protected member
};

Konstruktor dan Destruktor

  • Konstruktor: Metode khusus yang dipanggil saat objek kelas dibuat.
  • Destruktor: Metode khusus yang dipanggil saat objek kelas dihancurkan.

Contoh:

class Car {
public:
    std::string brand;
    int year;

    Car(std::string b, int y) {
        brand = b;
        year = y;
    }

    ~Car() {
        std::cout << "Car object destroyed" << std::endl;
    }
};

Metode Kelas

Metode kelas adalah fungsi yang bekerja pada objek kelas.

Contoh:

class Car {
public:
    std::string brand;
    int year;

    void displayInfo() {
        std::cout << "Brand: " << brand << ", Year: " << year << std::endl;
    }
};

Penggunaan Objek

Objek adalah instance dari kelas.

Contoh:

Car car1("Toyota", 2020); // Membuat objek car1
car1.displayInfo(); // Memanggil metode displayInfo() dari objek car1

Proyek sederhana

Membuat sistem kas Program memungkinkan untuk menambah, mengurangi, dan memeriksa saldo uang kas untuk setiap siswa. Semua data disimpan dalam objek KasSiswa yang menggunakan std::map untuk menyimpan informasi tentang saldo uang kas setiap siswa.

#include <iostream>
#include <string>
#include <map>

class KasSiswa {
private:
    std::map<std::string, int> kas;

public:
    KasSiswa() {
        // Inisialisasi kas untuk 26 siswa dengan jumlah uang 0
        for (int i = 1; i <= 26; ++i) {
            kas["siswa_" + std::to_string(i)] = 0;
        }
    }

    void tambahUang(std::string namaSiswa, int jumlah) {
        if (kas.find(namaSiswa) != kas.end()) {
            kas[namaSiswa] += jumlah;
            std::cout << "Uang sebesar " << jumlah << " berhasil ditambahkan untuk " << namaSiswa << std::endl;
        } else {
            std::cout << "Siswa dengan nama " << namaSiswa << " tidak ditemukan." << std::endl;
        }
    }

    void kurangiUang(std::string namaSiswa, int jumlah) {
        if (kas.find(namaSiswa) != kas.end()) {
            if (kas[namaSiswa] >= jumlah) {
                kas[namaSiswa] -= jumlah;
                std::cout << "Uang sebesar " << jumlah << " berhasil dikurangkan dari " << namaSiswa << std::endl;
            } else {
                std::cout << "Siswa " << namaSiswa << " tidak memiliki cukup uang." << std::endl;
            }
        } else {
            std::cout << "Siswa dengan nama " << namaSiswa << " tidak ditemukan." << std::endl;
        }
    }

    void cekSaldo(std::string namaSiswa) {
        if (kas.find(namaSiswa) != kas.end()) {
            std::cout << "Saldo uang kas untuk " << namaSiswa << ": " << kas[namaSiswa] << std::endl;
        } else {
            std::cout << "Siswa dengan nama " << namaSiswa << " tidak ditemukan." << std::endl;
        }
    }
};

int main() {
    KasSiswa kas;
    int menu;
    std::string namaSiswa;
    int jumlah;

    std::cout << "Selamat datang di program manajemen uang kas" << std::endl;
    std::cout << "Bendhara Chika Mey" << std::endl;

    do {
        std::cout << "\nMenu: " << std::endl;
        std::cout << "1. Tambah Uang" << std::endl;
        std::cout << "2. Kurangi Uang" << std::endl;
        std::cout << "3. Cek Saldo" << std::endl;
        std::cout << "4. Keluar" << std::endl;
        std::cout << "Pilih menu (1-4): ";
        std::cin >> menu;

        switch (menu) {
            case 1:
                std::cout << "Masukkan nama siswa: ";
                std::cin >> namaSiswa;
                std::cout << "Masukkan jumlah uang yang akan ditambahkan: ";
                std::cin >> jumlah;
                kas.tambahUang(namaSiswa, jumlah);
                break;
            case 2:
                std::cout << "Masukkan nama siswa: ";
                std::cin >> namaSiswa;
                std::cout << "Masukkan jumlah uang yang akan dikurangkan: ";
                std::cin >> jumlah;
                kas.kurangiUang(namaSiswa, jumlah);
                break;
            case 3:
                std::cout << "Masukkan nama siswa: ";
                std::cin >> namaSiswa;
                kas.cekSaldo(namaSiswa);
                break;
            case 4:
                std::cout << "Terima kasih!" << std::endl;
                break;
            default:
                std::cout << "Menu tidak valid. Silakan pilih menu 1-4." << std::endl;
                break;
        }
    } while (menu != 4);

    return 0;
}