C ++ Warisan

Dalam tutorial ini, kita akan belajar tentang pewarisan di C ++ dengan bantuan contoh.

Pewarisan adalah salah satu fitur utama dari pemrograman berorientasi objek di C ++. Ini memungkinkan kita untuk membuat kelas baru (kelas turunan) dari kelas yang ada (kelas dasar).

Kelas turunan mewarisi fitur dari kelas dasar dan dapat memiliki fitur tambahannya sendiri. Sebagai contoh,

 class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );

Di sini, Dogkelas diturunkan dari Animalkelas. Sejak Dogberasal dari Animal, anggota Animaldapat diakses oleh Dog.

Warisan di C ++

Perhatikan penggunaan kata kunci publicsaat mewarisi Anjing dari Hewan.

 class Dog : public Animal (… );

Kami juga dapat menggunakan kata kunci privatedan protectedsebagai gantinya public. Kami akan belajar tentang perbedaan antara menggunakan private, publicdan protectednanti di tutorial ini.

adalah-hubungan

Warisan adalah suatu hubungan . Kami menggunakan warisan hanya jika ada hubungan is -a antara dua kelas.

Berikut beberapa contohnya:

  • Mobil adalah kendaraan.
  • Jeruk adalah buah.
  • Seorang ahli bedah adalah seorang dokter.
  • Seekor anjing adalah binatang.

Contoh 1: Contoh Sederhana Warisan C ++

 // C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )

Keluaran

Saya bisa makan! Saya bisa tidur! Saya bisa menggonggong! Guk guk!!

Di sini, dog1 (objek kelas turunan Dog) dapat mengakses anggota kelas dasar Animal. Itu karena Dogdiwarisi dari Animal.

 // Calling members of the Animal class dog1.eat(); dog1.sleep();

Anggota yang dilindungi C ++

Pengubah akses protectedsangat relevan dalam hal pewarisan C ++.

Seperti privateanggota, protectedanggota tidak dapat diakses di luar kelas. Namun, mereka dapat diakses oleh kelas turunan dan kelas / fungsi teman .

Kita membutuhkan protectedanggota jika kita ingin menyembunyikan data suatu kelas, tetapi tetap ingin data tersebut diwarisi oleh kelas turunannya.

Untuk mempelajari lebih lanjut tentang dilindungi, lihat tutorial Pengubah Akses C ++ kami.

Contoh 2: Anggota yang dilindungi C ++

 // C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )

Keluaran

Saya bisa makan! Saya bisa tidur! Saya bisa menggonggong! Guk guk!! Saya mamalia. Warna saya hitam

Di sini, tipe variabel adalah protecteddan dengan demikian dapat diakses dari kelas turunan Dog. Kita dapat melihat ini seperti yang telah kita inisialisasi typedi Dogkelas menggunakan fungsi tersebut setType().

Di sisi lain, privatewarna variabel tidak dapat diinisialisasi Dog.

 class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );

Selain itu, karena protectedkata kunci menyembunyikan data, kita tidak dapat mengakses tipe secara langsung dari objek Dogatau Animalkelas.

 // Error: member "Animal::type" is inaccessible dog1.type = "mammal";

Mode Akses di C ++ Inheritance

Dalam tutorial kami sebelumnya, kami telah belajar tentang penentu akses C ++ seperti publik, pribadi, dan dilindungi.

Sejauh ini, kami telah menggunakan publickata kunci untuk mewarisi kelas dari kelas dasar yang sudah ada sebelumnya. Namun, kita juga dapat menggunakan kata kunci privatedan protecteduntuk mewarisi kelas. Sebagai contoh,

 class Animal ( // code ); class Dog : private Animal ( // code );
 class Cat : protected Animal ( // code );

Berbagai cara kita dapat memperoleh kelas dikenal sebagai mode akses . Mode akses ini memiliki efek berikut:

  1. publik: Jika kelas turunan dideklarasikan dalam publicmode, maka anggota kelas dasar diwarisi oleh kelas turunan sebagaimana adanya.
  2. private: Dalam hal ini, semua anggota kelas dasar menjadi privateanggota dalam kelas turunan.
  3. dilindungi: The publicanggota menjadi kelas dasar protectedanggota di kelas turunan.

Para privateanggota kelas dasar selalu privatedi kelas turunan.

Untuk mempelajari lebih lanjut, kunjungi tutorial warisan C ++ publik, pribadi, dan dilindungi.

Fungsi Anggota Menggantikan dalam Warisan

Misalkan, kelas dasar dan kelas turunan memiliki fungsi anggota dengan nama dan argumen yang sama.

Jika kita membuat objek dari kelas turunan dan mencoba mengakses fungsi anggota itu, fungsi anggota di kelas turunan akan dipanggil alih-alih yang ada di kelas dasar.

Fungsi anggota kelas turunan menggantikan fungsi anggota kelas dasar.

Pelajari lebih lanjut tentang Penggantian fungsi di C ++.

Bacaan yang Direkomendasikan: C ++ Multiple Inheritance

Artikel yang menarik...