Warisan C ++

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

Warisan adalah salah satu ciri utama pengaturcaraan berorientasikan Objek dalam C ++. Ini membolehkan kita membuat kelas baru (kelas turunan) dari kelas yang ada (kelas asas).

Kelas yang diturunkan mewarisi ciri dari kelas asas dan boleh mempunyai ciri tambahan sendiri. Sebagai contoh,

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

Di sini, Dogkelas berasal dari Animalkelas. Oleh kerana Dogberasal Animal, anggota Animaldapat diakses Dog.

Warisan dalam C ++

Perhatikan penggunaan kata kunci publicsemasa mewarisi Anjing dari Haiwan.

 class Dog : public Animal (… );

Kami juga boleh menggunakan kata kunci privatedan protectedbukannya public. Kami akan mengetahui perbezaan antara penggunaan private, publicdan protectedkemudian dalam tutorial ini.

adalah-hubungan

Warisan adalah hubungan is-a . Kami menggunakan warisan hanya jika hubungan antara-dua wujud.

Berikut adalah beberapa contoh:

  • Sebuah kereta adalah kenderaan.
  • Jeruk adalah buah.
  • Pakar bedah adalah doktor.
  • Seekor anjing adalah haiwan.

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; )

Pengeluaran

Saya boleh makan! Saya boleh tidur! Saya boleh menyalak! Woof woof!!

Di sini, dog1 (objek kelas turunan Dog) dapat mengakses anggota kelas asas Animal. Ini kerana Dogdiwarisi dari Animal.

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

Ahli yang dilindungi C ++

Pengubah akses protectedsangat relevan berkaitan dengan warisan C ++.

Seperti privateahli, protectedahli tidak dapat diakses di luar kelas. Walau bagaimanapun, mereka dapat diakses oleh kelas turunan dan kelas / fungsi rakan .

Kami memerlukan protectedahli sekiranya ingin menyembunyikan data kelas, tetapi masih mahu data tersebut diwarisi oleh kelas yang berasal.

Untuk mengetahui lebih lanjut mengenai dilindungi, rujuk tutorial Pengubah Akses C ++ kami.

Contoh 2: Ahli 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; )

Pengeluaran

Saya boleh makan! Saya boleh tidur! Saya boleh menyalak! Woof woof!! Saya mamalia Warna saya hitam

Di sini, jenis pemboleh ubah protecteddan boleh diakses dari kelas turunan Dog. Kita dapat melihat ini semasa kita memulakan typedi Dogkelas menggunakan fungsi setType().

Sebaliknya, privatewarna pemboleh ubah tidak dapat diinisialisasi dalam Dog.

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

Juga, kerana protectedkata kunci menyembunyikan data, kita tidak dapat mengakses jenis langsung dari objek Dogatau Animalkelas.

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

Akses Mod dalam Warisan C ++

Dalam tutorial sebelumnya, kami telah mengetahui mengenai penentu akses C ++ seperti awam, swasta, dan dilindungi.

Setakat ini, kami telah menggunakan publickata kunci untuk mewarisi kelas dari kelas asas yang sudah ada sebelumnya. Walau bagaimanapun, kami juga boleh menggunakan kata kunci privatedan protecteduntuk mewarisi kelas. Sebagai contoh,

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

Pelbagai cara yang kita dapat memperoleh kelas dikenali sebagai mod akses . Mod akses ini mempunyai kesan berikut:

  1. umum: Sekiranya kelas turunan dinyatakan dalam publicmod, maka anggota kelas asas diwarisi oleh kelas turunan sama seperti mereka.
  2. peribadi: Dalam kes ini, semua anggota kelas asas menjadi privateahli dalam kelas turunan.
  3. dilindungi: The publicahli-ahli kelas asas menjadi protectedahli di kelas yang diperolehi.

Yang privateahli-ahli kelas asas sentiasa privatedalam kelas yang diperolehi.

Untuk mengetahui lebih lanjut, kunjungi tutorial warisan awam, peribadi, terlindung C ++ kami

Fungsi Anggota Yang Terlalu dalam Warisan

Andaikan, kelas asas dan kelas turunan mempunyai fungsi anggota dengan nama dan argumen yang sama.

Sekiranya kita membuat objek kelas turunan dan cuba mengakses fungsi anggota itu, fungsi anggota dalam kelas turunan akan dipanggil dan bukan pada kelas asas.

Fungsi anggota kelas turunan mengatasi fungsi anggota kelas asas.

Ketahui lebih lanjut mengenai Pengalihan fungsi di C ++.

Bacaan yang Disyorkan: C ++ Multiple Inheritance

Artikel menarik...