C++ Class Inheritance Constructor Order

3 min read Jul 01, 2024
C++ Class Inheritance Constructor Order

Urutan Pemanggilan Konstruktor dalam Pewarisan Kelas C++

Dalam pemrograman C++, pewarisan kelas memungkinkan kita untuk membuat kelas baru yang mewarisi sifat dari kelas lain. Saat membuat objek dari kelas turunan, konstruktor dari kelas turunan dan kelas dasar dipanggil secara berurutan. Pemahaman tentang urutan pemanggilan ini sangat penting untuk memahami cara kerja pewarisan dan memastikan inisialisasi objek yang benar.

Urutan Pemanggilan Konstruktor

Berikut adalah urutan pemanggilan konstruktor dalam pewarisan kelas:

  1. Konstruktor Kelas Dasar: Pertama, konstruktor kelas dasar dipanggil.
  2. Konstruktor Kelas Turunan: Setelah konstruktor kelas dasar selesai, konstruktor kelas turunan dipanggil.

Contoh

#include 

class Base {
public:
  Base(int x) {
    std::cout << "Konstruktor Base: " << x << std::endl;
  }
};

class Derived : public Base {
public:
  Derived(int x, int y) : Base(x) {
    std::cout << "Konstruktor Derived: " << y << std::endl;
  }
};

int main() {
  Derived d(10, 20);
  return 0;
}

Dalam kode di atas, objek d dari kelas Derived dibuat. Saat objek d dibuat, konstruktor kelas Derived dipanggil. Namun, sebelum konstruktor Derived dieksekusi, konstruktor Base dipanggil terlebih dahulu dengan argumen 10. Ini karena objek Derived mewarisi dari kelas Base, dan konstruktor Base perlu dieksekusi terlebih dahulu untuk menginisialisasi bagian Base dari objek Derived.

Penjelasan

Urutan pemanggilan konstruktor ini mengikuti prinsip konstruktor kelas dasar dipanggil sebelum konstruktor kelas turunan. Hal ini penting untuk memastikan bahwa bagian dasar objek turunan diinisialisasi sebelum bagian turunan diinisialisasi.

Penting untuk Diingat

  • Pemanggilan eksplisit: Anda dapat secara eksplisit memanggil konstruktor kelas dasar di dalam konstruktor kelas turunan menggunakan sintaks : Base(x). Hal ini memungkinkan Anda untuk mengendalikan nilai yang diteruskan ke konstruktor kelas dasar.
  • Konstruktor default: Jika kelas dasar tidak memiliki konstruktor default, konstruktor kelas turunan harus secara eksplisit memanggil konstruktor kelas dasar.
  • Order of initialization: Urutan inisialisasi anggota data dalam kelas turunan mengikuti urutan deklarasi dalam kelas, bukan urutan pemanggilan konstruktor.

Kesimpulan

Memahami urutan pemanggilan konstruktor dalam pewarisan kelas sangat penting untuk memahami cara kerja pewarisan dan memastikan inisialisasi objek yang benar. Pastikan konstruktor kelas dasar dipanggil sebelum konstruktor kelas turunan untuk memastikan inisialisasi yang benar.