Panduan Penggunaan Warisan C++: Untuk Pemula

Hello there, future C++ wizards! Today, we're going to embark on an exciting journey into the world of C++ inheritance. Don't worry if you're new to programming – I'll be your friendly guide, and we'll take this step-by-step. By the end of this tutorial, you'll be amazed at how much you've learned!

C++ Inheritance

Apakah itu Warisan?

Sebelum kita melompat kedalamnya, mari mula dengan satu analogi yang simple. Bayangkan anda membuat rakbu pohon keluarga. sama seperti anak-anak yang mengwarisi sifat dari orang tuanya, dalam C++, kelas-kelas juga boleh mengwarisi sifat dan tingkah laku dari kelas-kelas lain. Menarik, kan?

Warisan adalah konsep dasar dalam pengaturcaraan berorientasi objek yang membolehkan kita untuk membuat kelas baru berdasarkan kelas yang sedia ada. Ini mempromosikan penggunaan semula kode dan membantu dalam pengorganisasian kod kita dalam struktur hirarki.

Kelas Dasar dan Turunan

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

Kelas Dasar

Kelas dasar (juga dikenali sebagai kelas induk atau superclass) adalah kelas yang dari mana kelas lain mengwarisi. Ia seperti para leluhur dalam analogi rakbu pohon keluarga kita.

Mari kita buat satu kelas dasar yang simple:

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

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

Dalam contoh ini, Animal adalah kelas dasar kita. Ia memiliki dua method: eat() dan sleep(). Ini adalah tingkah laku yang umum yang dipunya oleh kebanyakan hewan.

Kelas Turunan

Kelas turunan (juga dipanggil kelas anak atau subclass) adalah kelas yang mengwarisi dari kelas dasar. Ia seperti para keturunan dalam rakbu pohon keluarga kita.

Mari kita buat satu kelas turunan:

class Dog : public Animal {
public:
void bark() {
cout << "Woof! Woof!" << endl;
}
};

Di sini, Dog adalah kelas turunan kita. Ia mengwarisi dari Animal, jadi secara automatik memiliki method eat() dan sleep(). Kami juga telah menambah method baru bark() yang khusus untuk anjing.

Sekarang, mari lihat bagaimana kita boleh menggunakan kelas ini:

int main() {
Dog myDog;
myDog.eat();   // Output: Hewan ini sedang makan.
myDog.sleep(); // Output: Hewan ini sedang tidur.
myDog.bark();  // Output: Woof! Woof!
return 0;
}

Adakah yang menakjubkan? Kelas Dog kita boleh menggunakan method dari kelas Animal tanpa perlu untuk menulisnya semula!

Kawalan Akses dan Warisan

Sekarang, mari berbicara tentang siapa yang boleh melihat apa dalam keluarga C++ kita. sama seperti dalam keluarga sebenar, beberapa hal adalah pengetahuan umum, beberapa lagi hanya untuk ahli keluarga, dan beberapa adalah rahsia pribadi.

Dalam C++, kita ada tiga aras akses:

  1. Umum
  2. Dilindungi
  3. Privat

Mari lihat bagaimana ini bekerja dengan warisan:

class Animal {
public:
int age;
protected:
string name;
private:
int secretCode;
};

class Dog : public Animal {
public:
void setName(string n) {
name = n;  // OK, 'name' adalah dilindungi dalam Animal
}
void setSecretCode(int code) {
// secretCode = code;  //Ralat! 'secretCode' adalah privat dalam Animal
}
};

Dalam contoh ini:

  • age adalah umum, jadi boleh diakses dari mana-mana.
  • name adalah dilindungi, jadi boleh diakses dalam Animal dan mana-mana kelas yang diwarisi dari Animal.
  • secretCode adalah privat, jadi hanya boleh diakses di dalam kelas Animal.

Jenis-jenis Warisan

C++ menawarkan beberapa jenis warisan untuk menyesuaikan keperluan berbagai. Mari kita jelajahi mereka!

Warisan Tunggal

Ini adalah bentuk paling simple, di mana kelas mengwarisi hanya satu kelas dasar. Kita telah melihat ini dengan contoh Dog kita.

Warisan Berlevel

Ini seperti garis keluarga: cucu mengwarisi dari ayah, yang mengwarisi dari kakek.

class Animal {
public:
void eat() { cout << "Makan..." << endl; }
};

class Mammal : public Animal {
public:
void breathe() { cout << "Bernafas..." << endl; }
};

class Dog : public Mammal {
public:
void bark() { cout << "Berbark..." << endl; }
};

int main() {
Dog myDog;
myDog.eat();     // Dari Animal
myDog.breathe(); // Dari Mammal
myDog.bark();    // Dari Dog
return 0;
}

Warisan Hierarki

Ini apabila beberapa kelas mengwarisi dari satu kelas dasar. Bayangkan ini sebagai saudara dalam keluarga.

class Animal {
public:
void eat() { cout << "Makan..." << endl; }
};

class Dog : public Animal {
public:
void bark() { cout << "Berbark..." << endl; }
};

class Cat : public Animal {
public:
void meow() { cout << "Bersuara..." << endl; }
};

Warisan Berbilang

Warisan berbilang adalah apabila kelas mengwarisi dari lebih daripada satu kelas dasar. Ia seperti memiliki sifat dari kedua-dua ibu bapa anda!

class FlyingCreature {
public:
void fly() { cout << "Terbang..." << endl; }
};

class SwimmingCreature {
public:
void swim() { cout << "Berenang..." << endl; }
};

class Duck : public FlyingCreature, public SwimmingCreature {
public:
void quack() { cout << "Berkwak..." << endl; }
};

int main() {
Duck myDuck;
myDuck.fly();   // Dari FlyingCreature
myDuck.swim();  // Dari SwimmingCreature
myDuck.quack(); // Dari Duck
return 0;
}

Berhati-hati juga! Warisan berbilang boleh membawa kepada masalah "berlian" yang terkenal jika tidak digunakan dengan hati-hati.

Jadual Method Warisan

Berikut adalah jadual ringkasan mengenai jenis-jenis warisan yang kita telah membincangkan:

Jenis Warisan Keterangan Contoh
Tunggal Satu kelas mengwarisi dari satu kelas dasar Dog : public Animal
Berlevel Satu kelas mengwarisi dari kelas turunan Dog : public Mammal, Mammal : public Animal
Hierarki Beberapa kelas mengwarisi dari satu kelas dasar Dog : public Animal, Cat : public Animal
Berbilang Satu kelas mengwarisi dari beberapa kelas dasar Duck : public FlyingCreature, public SwimmingCreature

Dan itu adalah semua, folks! Kita telah melihat dasar-dasar warisan C++. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan konsep ini. Happy coding, dan may the inheritance be with you!

Credits: Image by storyset