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, Dog
kelas berasal dari Animal
kelas. Oleh kerana Dog
berasal Animal
, anggota Animal
dapat diakses Dog
.

Perhatikan penggunaan kata kunci public
semasa mewarisi Anjing dari Haiwan.
class Dog : public Animal (… );
Kami juga boleh menggunakan kata kunci private
dan protected
bukannya public
. Kami akan mengetahui perbezaan antara penggunaan private
, public
dan protected
kemudian 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 Dog
diwarisi dari Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
Ahli yang dilindungi C ++
Pengubah akses protected
sangat relevan berkaitan dengan warisan C ++.
Seperti private
ahli, protected
ahli tidak dapat diakses di luar kelas. Walau bagaimanapun, mereka dapat diakses oleh kelas turunan dan kelas / fungsi rakan .
Kami memerlukan protected
ahli 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 protected
dan boleh diakses dari kelas turunan Dog
. Kita dapat melihat ini semasa kita memulakan type
di Dog
kelas menggunakan fungsi setType()
.
Sebaliknya, private
warna 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 protected
kata kunci menyembunyikan data, kita tidak dapat mengakses jenis langsung dari objek Dog
atau Animal
kelas.
// 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 public
kata kunci untuk mewarisi kelas dari kelas asas yang sudah ada sebelumnya. Walau bagaimanapun, kami juga boleh menggunakan kata kunci private
dan protected
untuk 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:
- umum: Sekiranya kelas turunan dinyatakan dalam
public
mod, maka anggota kelas asas diwarisi oleh kelas turunan sama seperti mereka. - peribadi: Dalam kes ini, semua anggota kelas asas menjadi
private
ahli dalam kelas turunan. - dilindungi: The
public
ahli-ahli kelas asas menjadiprotected
ahli di kelas yang diperolehi.
Yang private
ahli-ahli kelas asas sentiasa private
dalam 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