Daftar Inisialisasi Konstruktor C++:Mengapa dan Bagaimana Menggunakannya
Saat membuat instance objek, konstruktor sering kali menangani inisialisasi variabel anggota. Untuk anggota seperti itu, daftar inisialisasi untuk konstruktor menyediakan cara inisialisasi yang singkat dan efisien sebelum badan konstruktor dieksekusi. Selain performa, terkadang juga wajib karena variabel const atau anggota kelas dasar.
Apa itu Daftar Inisialisasi Konstruktor?
Daftar inisialisasi konstruktor adalah prosedur untuk menginisialisasi variabel anggota secara langsung, sehingga tidak ada konstruktor default yang disalin dan kemudian ditetapkan.
Sintaks
Sintaks inisialisasi daftar konstruktor berikut adalah sebagai berikut−
ClassName(type1 param1, type2 param2) : member1(param1), member2(param2) {
// Constructor body
}
Di sini, member1 dan member2 diinisialisasi dengan param1 dan param2 sebelum badan konstruktor dijalankan.
Contoh Daftar Inisialisasi Konstruktor
Berikut contoh sederhana yang menunjukkan cara menggunakan daftar inisialisasi.
#include <iostream>
#include <string>
class Student {
public:
Student(const std::string& name, int age) : name(name), age(age) {}
void display() const {
std::cout << "Name: " << name << ", Age: " << age << "\n";
}
private:
std::string name;
int age;
};
int main() {
Student s("Navya", 20);
s.display();
return 0;
}
Keluaran
Name: Navya, Age: 20
Mengapa Menggunakan Daftar Inisialisasi Konstruktor?
- Untuk menghindari inisialisasi default yang diikuti dengan penugasan ulang, untuk menghemat waktu dan sumber daya.
- Ini wajib untuk jenis variabel const tertentu, anggota referensi, dan anggota kelas dasar.
- Ini menyimpan semua logika inisialisasi di satu tempat, terpisah dari badan konstruktor.
Kasus Khusus
Berikut ini, kita akan membahas beberapa kasus khusus untuk daftar inisialisasi konstruktor −
Anggota Konst atau Referensi
Variabel const dan anggota referensi tidak dapat ditetapkan ulang, sehingga harus diinisialisasi dalam daftar inisialisasi,
class Config {
public:
Config(const std::string& product, const int & model)
: product (product), model(model) {}
private:
const std::string product;
const int & model;
};
Inisialisasi Kelas Dasar
Ketika kelas turunan mewarisi dari kelas dasar, Anda dapat menggunakan daftar inisialisasi untuk memanggil konstruktor kelas dasar,
class Base {
public:
Base(int value) : baseValue(value) {}
protected:
int baseValue;
};
class Derived : public Base {
public:
Derived(int value, int extra) : Base(value), extraValue(extra) {}
private:
int extraValue;
};