Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Menguasai Warisan C++: Membangun Kelas Canggih dengan Kode yang Dapat Digunakan Ulang

Warisan C++

Dalam tutorial ini, kita akan mempelajari warisan dalam C++ dengan bantuan contoh.

Warisan adalah salah satu fitur kunci Pemrograman Berorientasi Objek dalam C++. Ini memungkinkan kita untuk membuat kelas baru (kelas turunan) dari kelas yang sudah ada (kelas dasar).

Kelas turunan mewarisi fitur dari kelas dasar dan dapat memiliki fitur tambahan miliknya sendiri. Misalnya,

 class Animal { // fungsi eat() // fungsi sleep() }; class Dog : public Animal { // fungsi bark() };

Di sini, kelas Dog diturunkan dari kelas Animal. Karena Dog diturunkan dari Animal, anggota dari Animal dapat diakses oleh Dog.

Menguasai Warisan C++: Membangun Kelas Canggih dengan Kode yang Dapat Digunakan Ulang

Perhatikan penggunaan kata kunci public saat mewarisi Dog dari Animal.

 class Dog : public Animal {...};

Kami juga dapat menggunakan kata kunci private dan protected sebagai gantinya public. Kami akan mempelajari perbedaan antara penggunaan private, public dan protected nanti dalam tutorial ini.


Hubungan is-a

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

Berikut beberapa contohnya:


Contoh 1: Contoh Sederhana Warisan C++

 // Program C++ untuk menunjukkan warisan #include <iostream> using namespace std; // kelas dasar class Animal { public: void eat() { cout << "Saya bisa makan!" << endl; } void sleep() { cout << "Saya bisa tidur!" << endl; } }; // kelas turunan class Dog : public Animal { public: void bark() { cout << "Saya bisa menggonggong! Guk guk!!" << endl; } }; int main() { // Buat objek dari kelas Dog Dog dog1; // Panggil anggota dari kelas dasar dog1.eat(); dog1.sleep(); // Panggil anggota dari kelas turunan dog1.bark(); return 0; }

Output

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

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

 // Panggil anggota dari kelas Animal dog1.eat(); dog1.sleep();

Anggota protected C++

Modifikasi akses protected sangat relevan ketika berkaitan dengan warisan C++.

Seperti anggota private, anggota protected tidak dapat diakses di luar kelas. Namun, mereka dapat diakses oleh kelas turunan dan kelas/fungsi teman.

Kita membutuhkan anggota protected jika kita ingin menyembunyikan data dari kelas, tetapi masih ingin data tersebut diwarisi oleh kelas turunannya.

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


Contoh 2 : Anggota protected C++

 // Program C++ untuk menunjukkan anggota protected #include <iostream> #include <string> using namespace std; // kelas dasar class Animal { private: string color; protected: string type; public: void eat() { cout << "Saya bisa makan!" << endl; } void sleep() { cout << "Saya bisa tidur!" << endl; } void setColor(string clr) { color = clr; } string getColor() { return color; } }; // kelas turunan class Dog : public Animal { public: void setType(string tp) { type = tp; } void displayInfo(string c) { cout << "Saya adalah " << type << endl; cout << "Warnaku adalah " << c << endl; } void bark() { cout << "Saya bisa menggonggong! Guk guk!!" << endl; } }; int main() { // Buat objek dari kelas Dog Dog dog1; // Panggil anggota dari kelas dasar dog1.eat(); dog1.sleep(); dog1.setColor("hitam"); // Panggil anggota dari kelas turunan dog1.bark(); dog1.setType("mamalia"); // Menggunakan getColor() dari dog1 sebagai argumen // getColor() mengembalikan data string dog1.displayInfo(dog1.getColor()); return 0; }

Output

 Saya bisa makan! Saya bisa tidur! Saya bisa menggonggong! Guk guk!! Saya adalah mamalia Warnaku adalah hitam

Di sini, variabel type adalah protected dan oleh karena itu dapat diakses dari kelas turunan Dog. Kita dapat melihat ini karena kita telah menginisialisasi type di dalam kelas Dog menggunakan fungsi setType().

Di sisi lain, variabel private color tidak dapat diinisialisasi di dalam Dog.

 class Dog : public Animal { public: void setColor(string clr) { // Kesalahan: anggota "Animal::color" tidak dapat diakses color = clr; } };

Juga, karena kata kunci protected menyembunyikan data, kita tidak dapat mengakses type langsung dari objek dari kelas Dog atau Animal.

 // Kesalahan: anggota "Animal::type" tidak dapat diakses dog1.type = "mamalia";

Mode Akses dalam Warisan C++

Dalam tutorial sebelumnya, kita telah mempelajari pengubah akses C++ seperti public, private, dan protected.

Sampai sekarang, kita telah menggunakan kata kunci public untuk mewarisi kelas dari kelas dasar yang sudah ada. Namun, kita juga dapat menggunakan kata kunci private dan protected untuk mewarisi kelas. Misalnya,

 class Animal { // kode }; class Dog : private Animal { // kode };
 class Cat : protected Animal { // kode };

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

  1. public: Jika kelas turunan dideklarasikan dalam mode public, maka anggota kelas dasar diwarisi oleh kelas turunan sebagaimana adanya.
  2. private: Dalam kasus ini, semua anggota kelas dasar menjadi anggota private di kelas turunan.
  3. protected: Anggota public dari kelas dasar menjadi anggota protected di kelas turunan.

Anggota private dari kelas dasar selalu private di kelas turunan.

Untuk mempelajari lebih lanjut, kunjungi tutorial warisan public, private, protected C++ kami.


Penggabungan Fungsi Anggota dalam Warisan

Asumsikan, 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 tersebut, fungsi anggota di kelas turunan dipanggil daripada di kelas dasar.

Fungsi anggota kelas turunan menggantikan fungsi anggota kelas dasar.

Pelajari lebih lanjut tentang Penggabungan Fungsi dalam C++.


Bacaan yang Direkomendasikan: Warisan Ganda C++


Bahasa C

  1. Kata Kunci Static C#: Menguasai Variabel, Metode, dan Kelas Statis
  2. Memahami Kelas Bersarang C#: Definisi, Penggunaan, dan Warisan
  3. Menguasai Operator C++: Panduan Lengkap dengan Contoh Praktis
  4. Kelas & Objek C++: Panduan Praktis Pemrograman Berorientasi Objek
  5. Menguasai Warisan C++: Public, Protected & Private Dijelaskan
  6. Menguasai Template Kelas C++: Panduan Praktis
  7. Menguasai Warisan Python: Konsep, Sintaks, dan Contoh Praktis
  8. Memahami Kelas Penyimpanan C++: Cakupan, Umur, dan Penggunaan
  9. Memahami Polimorfisme C++: Panduan Praktis
  10. Menguasai Abstraksi Data C++: Sederhanakan Desain dengan Pemisahan Antarmuka-Implementasi