Pelajaran modul (2/2)
Konstruktor dan Destruktor
Konstruktor dan destruktor adalah fungsi anggota khusus yang mengelola siklus hidup objek: pembuatannya (inisialisasi) dan penghancurannya (pembersihan sumber daya).
Konstruktor
Konstruktor dipanggil secara otomatis ketika objek kelas dibuat di memori.
- Memiliki nama yang sama dengan kelasnya.
- tidak memiliki tipe pengembalian (bahkan
void). - Dapat kelebihan beban untuk menerima kumpulan parameter yang berbeda.
#include <iostream>
#include <string>
class Item {
private:
std::string name;
double price;
public:
// Parameterized constructor
Item(std::string itemName, double itemPrice) {
name = itemName;
price = itemPrice;
std::cout << "Object " << name << " created." << std::endl;
}
void display() {
std::cout << name << ": " << price << " EUR" << std::endl;
}
};
int main() {
// Implicit call to the constructor passing parameters
Item book("Libro C++", 29.99);
book.display();
return 0;
}Konstruktor Default
Jika Anda tidak mendefinisikan konstruktor apa pun, kompiler C++ akan menghasilkan konstruktor default tanpa parameter. Namun, jika Anda menulis konstruktor khusus dengan parameter, kompiler tidak lagi menghasilkan konstruktor default secara otomatis, jadi Anda perlu mendefinisikannya secara eksplisit jika diperlukan:
class Point {
public:
int x;
int y;
// Explicit default constructor
Point() {
x = 0;
y = 0;
}
};Destruktor
Destructor dipanggil secara otomatis ketika objek keluar dari cakupan atau secara eksplisit dihapus dari memori.
- Memiliki nama yang sama dengan kelas yang diawali dengan tanda gelombang
~(misalnya~Item()). - Ia tidak menerima parameter dan tidak memiliki tipe pengembalian.
- Digunakan untuk melepaskan sumber daya (misalnya menutup file, mengosongkan memori yang dialokasikan secara dinamis).
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};Cobalah sendiri
Tentukan kelas bernama Pengguna dengan nama pengguna std::string anggota pribadi. Tambahkan konstruktor publik yang menerima string (Pengguna(std::nama string)) dan menggunakannya untuk menginisialisasi nama pengguna. Tambahkan pengambil publik std::string getUsername() yang mengembalikan nama pengguna. Pada dasarnya, buat objek Pengguna dengan meneruskan 'Alice' sebagai nama, dan cetak nama penggunanya menggunakan std::cout.
Tunjukkan petunjuk
Konstruktor memiliki nama yang sama dengan kelas dan tidak menentukan tipe pengembalian apa pun, bahkan `void`.
Solusi tersedia setelah 3 upaya
Definisikan kelas bernama Point dengan dua anggota bilangan bulat publik: x dan y. Tambahkan konstruktor default (tanpa parameter) yang menginisialisasi x dan y ke 0. Di main, buat objek Point menggunakan konstruktor default dan cetak x dan y.
Tunjukkan petunjuk
Konstruktor default tidak memerlukan argumen: `Point() { x = 0; kamu = 0; }`.
Solusi tersedia setelah 3 upaya