Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara Warisan Tunggal dan Banyak

Warisan sangat mendukung konsep reusability yaitu kelas yang baru dibuat menggunakan kembali properti yang sudah ada. Access specifier menentukan cara anggota kelas dasar akan diwarisi oleh kelas turunan. Ada banyak cara untuk mencapai warisan single, multiple, Hierarchical, Multilevel, Hybrid. Sedangkan topik utama diskusi kami adalah perbedaan antara pewarisan tunggal dan ganda. Dalam pewarisan tunggal, kami hanya memiliki satu kelas dasar yang diwarisi oleh hanya satu kelas turunan. Dalam multiple inheritance, kami memiliki lebih dari dua kelas dasar yang secara bersama-sama diwarisi oleh satu kelas turunan.


Grafik perbandingan

Dasar untuk PerbandinganWarisan tunggalWarisan Berganda
DasarKelas turunan mewarisi kelas dasar tunggal.Kelas turunan mewarisi dua atau lebih dari dua kelas dasar.
PelaksanaanKelas turunan_kelas: kelas dasar access_specifierTurunan kelas _class: access_specifier base_class1, access_specifier base_class2, ....
Mengakses
Kelas turunan mengakses fitur-fitur kelas dasar tunggalKelas turunan mengakses fitur gabungan dari kelas dasar yang diwarisi
VisibilitasPublik, Pribadi, DilindungiPublik, Pribadi, Dilindungi
Jalankan waktuMembutuhkan sejumlah kecil waktu operasi di atas kepalaMembutuhkan overhead runtime tambahan dibandingkan dengan satu warisan

Definisi Warisan Tunggal

Dalam pewarisan tunggal, ada kelas dasar tunggal dan kelas turunan tunggal. Kelas turunan mewarisi kelas dasar baik secara publik, terproteksi dan pribadi. Anggota kelas dasar dapat diakses oleh kelas turunan sesuai dengan penentu akses yang ditentukan selama mewarisi kelas dasar.

Mari kita memiliki contoh kehidupan nyata, kita memiliki dua kelas, "kelas akun" dan "kelas rekening tabungan". Di sini "kelas akun tabungan" dapat mewarisi fitur "kelas akun", sehingga kelas "kelas akun" akan menjadi kelas dasar / super / induk untuk kelas tabungan, dan "kelas akun tabungan" akan menjadi kelas turunan.

Di sini atribut "kelas akun" adalah acc_no (pribadi) dan saldo (publik), dan fungsi anggota diinisialisasi (), get_accno () yang bersifat publik. Sekarang, "kelas akun" diwarisi menjadi "kelas akun tabungan" secara publik sehingga, semua anggota publik "kelas akun" dapat langsung diakses dengan "kelas akun tabungan". Itu dapat mengakses anggota pribadi "kelas akun" melalui fungsi anggota publik "kelas akun" tetapi tidak dapat mengaksesnya secara langsung.

Implementasi Warisan Tunggal:

 # sertakan menggunakan ruang nama std; Akun kelas {int acc_no, ; publik: saldo mengambang; membatalkan inisialisasi (int x, int y) {acc_no = x; balance = y; } int get_accno. () {return acc_no; }}; class Saving_acc: Akun publik {float intrest_rate; publik: // konstruktor dari kelas Saving_acc Saving_acc (int c) {interest_rate = c; } membatalkan tampilan () {cout < 

Definisi Multiple Inheritance

Multiple inheritance memungkinkan kelas turunan mewarisi fitur gabungan lebih dari satu kelas dasar, yaitu kita memiliki kelas turunan tunggal dan beberapa kelas basis. Setiap kelas dasar harus diwariskan dengan menyebutkan specifier akses terpisah untuk masing-masingnya. Kelas turunan dapat mengakses anggota kelas dasar berdasarkan pada specifier akses dimana kelas dasar diwarisi.

Mari kita membuatnya lebih mudah dengan contoh kita memiliki tiga kelas yaitu Sepeda, Mobil, dan Kendaraan. Sekarang, "Kendaraan" dapat mewarisi fitur "Sepeda" serta "Mobil". Jadi, "Kendaraan" menjadi kelas turunan dan "Sepeda" dan "Mobil" menjadi kelas dasar. Sekarang, "Sepeda" dan "Mobil" secara publik diwarisi oleh "Kendaraan" itu dapat mengakses semua anggota publik "Sepeda" dan "Mobil" tetapi karena kita memiliki entitas Model_no yang dilindungi dalam "Mobil" sehingga privat untuk Mobil tetapi dapat diakses oleh "Kendaraan".

Implementasi Multiple Inheritance:

 # sertakan menggunakan namespace std; kelas Bike {int engine_cost; ; publik: membatalkan set_engine_cost (int x) {engine_cost = x; }}; Mobil kelas {protected: int Model_no; publik: membatalkan set_Model_no (int p) {Model_no = p; }}; kelas Kendaraan: sepeda umum, mobil umum {int no_of_wheels publik: kendaraan (int w) {no_of_wheels = w; cout << "no of wheels" < 

Perbedaan Kunci Antara Warisan Tunggal dan Banyak

  1. Warisan tunggal adalah satu kelas turunan yang memiliki kelas basis tunggal sedangkan, dalam multiple inheritance, memiliki dua atau lebih dari dua kelas basis, tetapi kelas turunan tunggal.
  2. Multiple inheritance cukup membingungkan karena di sini satu kelas turunan mewarisi dua atau lebih kelas dasar. Jika kelas dasar memiliki atribut atau fungsi dengan nama yang sama maka untuk kelas turunan, menjadi sulit untuk mengidentifikasi atribut atau fungsi kelas dasar mana yang harus diturunkan.
  3. Masalah overhead lebih kecil dalam hal pewarisan tunggal. Tetapi dalam kasus pewarisan berganda, konstruksi atau penghancuran objek meminta konstruktor dan destruktor dari kelas induk dalam hirarki kelas yang meningkatkan overhead.
  4. Warisan tunggal lebih mengarah pada spesialisasi. Sedangkan multiple inheritance lebih ke arah generalisasi.
  5. Karena pewarisan tunggal memiliki lebih sedikit overhead, ia memiliki lebih sedikit runtime dibandingkan dengan beberapa pewarisan.

Kesimpulan

Warisan membuat pekerjaan programmer mudah seolah-olah satu kelas sudah terbentuk fitur-fiturnya dapat diadaptasi oleh yang lain jika diperlukan. Meskipun specifier akses membatasi akses ke anggota kelas dasar dengan cara tertentu, tetapi itu membuat data lebih aman. Warisan tunggal entah bagaimana lebih sederhana dan mudah diimplementasikan daripada multiple inheritance. Warisan mengurangi ukuran kode objek, tetapi juga mempengaruhi waktu program.

Top