Panduan Pemula tentang Warisan C++

Halo para jagoan C++ masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke dalam dunia warisan C++. Jangan khawatir jika Anda masih baru di bidang pemrograman – saya akan menjadi pemandu yang ramah, dan kita akan melakukannya langkah demi langkah. Pada akhir tutorial ini, Anda akan kaget betapa banyak hal yang telah Anda pelajari!

C++ Inheritance

Apa Itu Warisan?

Sebelum kita melompat masuk, mari kita mulai dengan analogi yang sederhana. Bayangkan Anda membuat pohon keluarga. sama seperti anak-anak yang mewarisi sifat dari orang tua mereka, di C++, kelas juga dapat mewarisi properti dan perilaku dari kelas lain. Keren, bukan?

Warisan adalah konsep pokok dalam pemrograman berorientasi objek yang memungkinkan kita untuk membuat kelas baru berdasarkan kelas yang sudah ada. Hal ini mempromosikan penggunaan kembali kode dan membantu dalam mengorganisir kode kita dalam struktur hirarki.

Kelas Dasar dan Turunan

Dalam dunia warisan C++, kita memiliki dua pemain utama: kelas dasar dan kelas turunan.

Kelas Dasar

Kelas dasar (juga dikenal sebagai kelas orang tua atau superclass) adalah kelas yang dari mana kelas lain mengwarisi. Ini seperti leluhur dalam analogi pohon keluarga kita.

Mari kita membuat kelas dasar sederhana:

class Hewan {
public:
void makan() {
cout << "Hewan ini sedang makan." << endl;
}

void tidur() {
cout << "Hewan ini sedang tidur." << endl;
}
};

Dalam contoh ini, Hewan adalah kelas dasar kita. Dia memiliki dua metode: makan() dan tidur(). Ini adalah perilaku umum yang banyak hewan milikinya.

Kelas Turunan

Kelas turunan (juga disebut kelas anak atau subclass) adalah kelas yang mewarisi dari kelas dasar. Ini seperti keturunan dalam pohon keluarga kita.

Mari kita membuat kelas turunan:

class Anjing : public Hewan {
public:
void gonggong() {
cout << "Woof! Woof!" << endl;
}
};

Di sini, Anjing adalah kelas turunan kita. Dia mewarisi dari Hewan, jadi secara otomatis memiliki metode makan() dan tidur(). Kita juga menambahkan metode baru gonggong() yang spesifik untuk anjing.

Sekarang, mari kita lihat bagaimana kita dapat menggunakan kelas ini:

int main() {
Anjing anjingku;
anjingku.makan();   // Output: Hewan ini sedang makan.
anjingku.tidur();   // Output: Hewan ini sedang tidur.
anjingku.gonggong();// Output: Woof! Woof!
return 0;
}

Apakah itu keren? Kelas Anjing kita dapat menggunakan metode dari kelas Hewan tanpa harus menulis ulang mereka!

Kontrol Akses dan Warisan

Sekarang, mari kita berbicara tentang siapa yang dapat melihat apa di dalam keluarga C++ kita. sama seperti di keluarga nyata, beberapa hal adalah wajib bagi publik, beberapa hanya untuk anggota keluarga, dan beberapa adalah rahasia pribadi.

Di C++, kita memiliki tiga tingkat akses:

  1. Publik
  2. Terperlindung
  3. Pribadi

Mari kita lihat bagaimana hal ini bekerja dengan warisan:

class Hewan {
public:
int umur;
protected:
string nama;
private:
int kodeRahasia;
};

class Anjing : public Hewan {
public:
void setNama(string n) {
nama = n;  // OK, 'nama' adalah terperlindung di Hewan
}
void setKodeRahasia(int kode) {
// kodeRahasia = kode;  // Error! 'kodeRahasia' adalah pribadi di Hewan
}
};

Dalam contoh ini:

  • umur adalah publik, jadi dapat diakses dari mana saja.
  • nama adalah terperlindung, jadi dapat diakses di Hewan dan setiap kelas yang mewarisi Hewan.
  • kodeRahasia adalah pribadi, jadi hanya dapat diakses dalam kelas Hewan.

Tipe Warisan

C++ menawarkan berbagai jenis warisan untuk memenuhi kebutuhan yang beragam. Mari kita jelajahi mereka!

Warisan Tunggal

Ini adalah bentuk terpendek, di mana kelas mengwarisi hanya satu kelas dasar. Kita sudah melihat ini dengan contoh Anjing kita.

Warisan Multilevel

Ini seperti garis keturunan: cucu mewarisi dari ayah, yang mewarisi dari kakek.

class Hewan {
public:
void makan() { cout << "Makan..." << endl; }
};

class Mamalia : public Hewan {
public:
void bernafas() { cout << "Bernafas..." << endl; }
};

class Anjing : public Mamalia {
public:
void gonggong() { cout << "Gonggong..." << endl; }
};

int main() {
Anjing anjingku;
anjingku.makan();    // Dari Hewan
anjingku.bernafas(); // Dari Mamalia
anjingku.gonggong(); // Dari Anjing
return 0;
}

Warisan Hierarki

Ini ketika beberapa kelas mengwarisi dari satu kelas dasar. Bayangkan ini seperti saudara kandung dalam keluarga.

class Hewan {
public:
void makan() { cout << "Makan..." << endl; }
};

class Anjing : public Hewan {
public:
void gonggong() { cout << "Gonggong..." << endl; }
};

class Kucing : public Hewan {
public:
void miang() { cout << "Miang..." << endl; }
};

Warisan Campuran

Warisan campuran adalah ketika kelas mengwarisi dari lebih dari satu kelas dasar. Ini seperti memiliki sifat dari kedua orang tua Anda!

classCreaturePenerbangan {
public:
void terbang() { cout << "Terbang..." << endl; }
};

classCreatureRenang {
public:
void renang() { cout << "Renang..." << endl; }
};

class Bebek : publicCreaturePenerbangan, publicCreatureRenang {
public:
void kwek() { cout << "Kwek..." << endl; }
};

int main() {
Bebek bebekku;
bebekku.terbang();   // DariCreaturePenerbangan
bebekku.renang();    // DariCreatureRenang
bebekku.kwek();      // Dari Bebek
return 0;
}

Hati-hati, meskipun! Warisan campuran dapat menyebabkan masalah yang terkenal "masalah permata" jika tidak digunakan dengan hati-hati.

Tabel Metode Warisan

Berikut adalah tabel ringkasan tentang jenis warisan yang kita diskusikan:

Tipe Warisan Deskripsi Contoh
Tunggal Kelas mengwarisi dari satu kelas dasar Anjing : public Hewan
Multilevel Kelas mengwarisi dari kelas turunan Anjing : public Mamalia, Mamalia : public Hewan
Hierarki Beberapa kelas mengwarisi dari satu kelas dasar Anjing : public Hewan, Kucing : public Hewan
Campuran Kelas mengwarisi dari beberapa kelas dasar Bebek : publicCreaturePenerbangan, publicCreatureRenang

Dan itu adalah semua, teman-teman! Kita telah membahas dasar-dasar warisan C++. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan konsep ini. Selamat coding, dan semoga warisan bersama dengan Anda!

Credits: Image by storyset