C++ Call Function In Constructor Initialization List

3 min read Jul 01, 2024
C++ Call Function In Constructor Initialization List

C++: Memanggil Fungsi di Dalam Initialization List Konstruktor

Dalam C++, kita bisa memanggil fungsi di dalam initialization list dari konstruktor. Teknik ini bermanfaat untuk menginisialisasi anggota data dengan nilai yang kompleks atau untuk menjalankan operasi awal yang diperlukan sebelum objek sepenuhnya dikonstruksi.

Mengapa Menggunakan Initialization List?

  • Efisiensi: Initialization list secara langsung menginisialisasi anggota data, menghindari inisialisasi duplikat melalui kode konstruktor.
  • Ketertiban: Initialization list memastikan bahwa anggota data diinisialisasi dalam urutan yang ditentukan, terlepas dari urutan pendefinisian anggota data di dalam kelas.
  • Memanggil Konstruktor Anggota: Initialization list memungkinkan kita untuk memanggil konstruktor dari anggota data yang merupakan objek kelas lain.

Contoh Penggunaan:

#include 
#include 

class Person {
public:
  std::string name;
  int age;

  Person(const std::string& n, int a) : name(n), age(a) {
    std::cout << "Person constructed: " << name << " (" << age << " years old)" << std::endl;
  }

  void introduce() {
    std::cout << "Hello, my name is " << name << " and I am " << age << " years old." << std::endl;
  }
};

int main() {
  Person p1("John Doe", 30); // Memanggil konstruktor Person dengan initialization list
  p1.introduce();

  return 0;
}

Output:

Person constructed: John Doe (30 years old)
Hello, my name is John Doe and I am 30 years old.

Dalam contoh di atas, kita menginisialisasi objek Person bernama p1 dengan nama "John Doe" dan usia 30 tahun. Initialization list : name(n), age(a) memastikan bahwa anggota data name dan age diinisialisasi sebelum badan konstruktor dijalankan.

Pembatasan:

  • Fungsi Non-Member: Kita tidak dapat memanggil fungsi non-member langsung dalam initialization list. Kita harus mendefinisikan fungsi tersebut sebagai fungsi anggota atau menggunakannya sebagai bagian dari ekspresi.
  • Urutan: Urutan inisialisasi dalam initialization list harus sesuai dengan urutan pendefinisian anggota data di dalam kelas.
  • Mempengaruhi Konstruktor: Initialization list akan memengaruhi konstruktor, dan hanya anggota data yang tidak diinisialisasi dalam initialization list yang akan diinisialisasi melalui kode konstruktor.

Kesimpulan:

Initialization list adalah alat yang kuat di C++ untuk menginisialisasi anggota data objek dengan lebih efektif dan terorganisir. Dengan menggunakannya, kita dapat memastikan inisialisasi anggota data dalam urutan yang benar dan menghindari inisialisasi duplikat.