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!
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:
- Umum
- Dilindungi
- 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 dalamAnimal
dan mana-mana kelas yang diwarisi dariAnimal
. -
secretCode
adalah privat, jadi hanya boleh diakses di dalam kelasAnimal
.
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