C++ adalah bahasa pemrograman serbaguna yang dikembangkan oleh Bjarne Stroustrup pada tahun 1979 di Bell Labs. Bahasa ini awalnya merupakan ekstensi dari C dengan tambahan fitur pemrograman berorientasi objek (OOP), dan kini telah berkembang menjadi salah satu bahasa paling powerful untuk pengembangan perangkat lunak, mulai dari aplikasi desktop, game, hingga sistem embedded. Artikel ini akan membahas C++ dari level dasar hingga mahir, mencakup sintaks dasar, struktur kontrol, fungsi, pointer, manajemen memori, OOP, template, Standard Template Library (STL), dan topik lanjutan seperti multithreading serta optimasi kode.
Penjelasan:
Contoh:
Contoh if:
Contoh for:
Contoh pass by reference:
Contoh:
Contoh:
Contoh unique_ptr:
Contoh:
Contoh virtual function:
Contoh fungsi template:
Contoh:
1. Dasar-Dasar C++
1.1 Struktur Program C++
Setiap program C++ memiliki struktur dasar. Berikut adalah contoh program sederhana yang mencetak "Hello, World!":
C++:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Penjelasan:
- #include <iostream>: Mengimpor library input/output untuk menggunakan std::cout.
- int main(): Fungsi utama, titik masuk program.
- std::cout: Objek untuk mencetak output ke konsol.
- std::endl: Menambahkan baris baru dan mengosongkan buffer output.
1.2 Tipe Data dan Variabel
C++ mendukung berbagai tipe data:- Tipe Dasar: int, float, double, char, bool.
- Tipe Komposit: Array, string, struct.
- Tipe Khusus: Pointer, referensi, enum.
C++:
int umur = 25;
float tinggi = 1.75;
char inisial = 'A';
bool isStudent = true;
std::string nama = "Budi";
1.3 Operator
C++ memiliki operator aritmatika (+, -, *, /, %), relasional (==, !=, <, >), logika (&&, ||, !), dan bitwise (&, |, ^).Contoh:
C++:
int a = 10, b = 5;
int hasil = a + b; // hasil = 15
bool isEqual = (a == b); // false
2. Struktur Kontrol
2.1 Percabangan
C++ mendukung if, else if, else, dan switch.Contoh if:
C++:
int nilai = 85;
if (nilai >= 90) {
std::cout << "A" << std::endl;
} else if (nilai >= 80) {
std::cout << "B" << std::endl;
} else {
std::cout << "C" << std::endl;
}
2.2 Perulangan
C++ memiliki for, while, dan do-while.Contoh for:
C++:
for (int i = 0; i < 5; i++) {
std::cout << i << " ";
} // Output: 0 1 2 3 4
3. Fungsi
Fungsi memungkinkan modularitas kode. Berikut adalah contoh fungsi untuk menghitung faktorial:
C++:
#include <iostream>
unsigned long long faktorial(int n) {
if (n <= 1) return 1;
return n * faktorial(n - 1);
}
int main() {
int n = 5;
std::cout << "Faktorial dari " << n << " adalah " << faktorial(n) << std::endl;
return 0;
}
3.1 Parameter Passing
C++ mendukung pass by value, pass by reference, dan pass by pointer.Contoh pass by reference:
C++:
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
4. Pointer dan Manajemen Memori
4.1 Pointer
Pointer menyimpan alamat memori variabel.Contoh:
C++:
int x = 10;
int* ptr = &x; // ptr menyimpan alamat x
std::cout << *ptr << std::endl; // Output: 10
4.2 Manajemen Memori Dinamis
C++ memungkinkan alokasi memori dinamis dengan new dan delete.Contoh:
C++:
int* arr = new int[5]; // Alokasi array dinamis
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
delete[] arr; // Membebaskan memori
4.3 Smart Pointer (C++11 dan seterusnya)
C++11 memperkenalkan smart pointer seperti std::unique_ptr dan std::shared_ptr untuk manajemen memori otomatis.Contoh unique_ptr:
C++:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(100);
std::cout << *ptr << std::endl; // Output: 100
5. Pemrograman Berorientasi Objek (OOP)
C++ mendukung OOP dengan konsep seperti kelas, objek, enkapsulasi, pewarisan, dan polimorfisme.5.1 Kelas dan Objek
Contoh kelas:
C++:
class Mahasiswa {
private:
std::string nama;
int umur;
public:
Mahasiswa(std::string n, int u) : nama(n), umur(u) {}
void tampilkanInfo() {
std::cout << "Nama: " << nama << ", Umur: " << umur << std::endl;
}
};
int main() {
Mahasiswa mhs("Ali", 20);
mhs.tampilkanInfo();
return 0;
}
5.2 Pewarisan
Pewarisan memungkinkan kelas turunan mewarisi properti kelas induk.Contoh:
C++:
class Orang {
protected:
std::string nama;
public:
Orang(std::string n) : nama(n) {}
};
class Dosen : public Orang {
private:
std::string mataKuliah;
public:
Dosen(std::string n, std::string mk) : Orang(n), mataKuliah(mk) {}
void tampilkan() {
std::cout << "Dosen: " << nama << ", Mata Kuliah: " << mataKuliah << std::endl;
}
};
5.3 Polimorfisme
Polimorfisme memungkinkan fungsi berperilaku berbeda berdasarkan objek yang memanggilnya.Contoh virtual function:
C++:
class Bentuk {
public:
virtual double luas() = 0; // Pure virtual function
};
class Persegi : public Bentuk {
private:
double sisi;
public:
Persegi(double s) : sisi(s) {}
double luas() override {
return sisi * sisi;
}
};
6. Template
Template memungkinkan penulisan kode generik.Contoh fungsi template:
C++:
template <typename T>
T maksimum(T a, T b) {
return (a > b) ? a : b;
}
int main() {
std::cout << maksimum(5, 10) << std::endl; // Output: 10
std::cout << maksimum(3.14, 2.71) << std::endl; // Output: 3.14
return 0;
}
7. Standard Template Library (STL)
STL menyediakan kontainer, algoritma, dan iterator.7.1 Kontainer
Contoh penggunaan std::vector:
C++:
#include <vector>
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int x : vec) {
std::cout << x << " ";
}
7.2 Algoritma
Contoh penggunaan std::sort:
C++:
#include <algorithm>
std::vector<int> vec = {5, 2, 9, 1, 5};
std::sort(vec.begin(), vec.end()); // Mengurutkan vektor
8. Topik Mahir
8.1 Multithreading (C++11)
C++11 memperkenalkan library <thread> untuk pemrograman konkuren.Contoh:
C++:
#include <thread>
void cetak() {
std::cout << "Thread berjalan" << std::endl;
}
int main() {
std::thread t(cetak);
t.join(); // Menunggu thread selesai
return 0;
}
8.2 Optimasi Kode
- Inline Function: Mengurangi overhead pemanggilan fungsi.
- Const Correctness: Menggunakan const untuk mencegah modifikasi yang tidak diinginkan.
- Move Semantics (C++11): Mengoptimalkan transfer kepemilikan objek.
C++:
#include <utility>
std::string s1 = "Hello";
std::string s2 = std::move(s1); // Memindahkan kepemilikan
9. Best Practices
- Gunakan const sebanyak mungkin untuk keamanan.
- Hindari kebocoran memori dengan smart pointer.
- Tulis kode yang modular dan mudah dibaca.
- Gunakan STL untuk efisiensi dan keandalan.