kelas dasar virtual
Dalam proses pewarisan yang telah saya pelajari sebelumnya, saya ingin tahu apakah Anda pernah memikirkan situasi ini: dalam hubungan pewarisan berganda, jika kelas turunan mewarisi dari dua kelas induk, dan kedua kelas induk ini kebetulan mewarisi dari satu kelas turunan. Diwarisi dari basis kelas. Itu akan merepotkan, karena Anda mungkin mewarisi dua salinan dari anggota yang sama!
Hal ini mengarah pada apa yang disebut masalah ambiguitas . Mari kita mulai belajar!
Izinkan saya memberi Anda contoh yang menggambarkan pewarisan berganda semacam ini! Saya memikirkannya dan mendapatkan contoh ini: Dulu ada sebuah keluarga kaya. Awalnya, ada dua anak laki-laki. Tuan laki-laki bertanggung jawab dan menyimpan kunci pintu Beberapa tahun kemudian, mereka tumbuh dewasa dan tuan laki-lakinya sudah tua, jadi dia mencocokkan dua kunci lagi dan memberikannya kepada kedua putranya masing-masing, dan membiarkan mereka mengambil alih bisnis keluarga. Setelah bertahun-tahun, kedua putranya juga menikah. dan ada seorang laki-laki dan perempuan masing-masing cucu, yang meneruskan garis keluarga. Yang disebut orang sejahtera, kelak mereka sudah dewasa, dan sudah saatnya menyerahkan kuncinya. Pada zaman dahulu, kuncinya tentu saja diberikan kepada anak laki-laki, jadi tentu saja kuncinya diberikan kepada cucunya Pada saat ini, ayah cucu dan pamannya (yaitu, kedua putra pemilik asli) harus memberikan kunci kepada cucu tersebut, sehingga ia memiliki dua kunci. Cucu kecil itu melihat ke dua kunci di tangannya dan berkata, "Satu sudah cukup! Dua... bukankah ini sia-sia?"
Setelah membaca cerita ini, akan lebih mudah bagi semua orang untuk memahami warisan. Tokoh protagonis laki-laki asli dalam cerita tersebut, Kakek, adalah kelas dasar. Sun Tzu merupakan kelas turunan terakhir karena mewarisi dari dua kelas turunan. Dan kedua kelas turunan ini memiliki anggota yang sama (kunci, karena keduanya mewarisi kelas dasar yang sama - kakek). Kelas turunan terakhir Sun Tzu mempunyai dua anggota duplikat (kunci), yang merupakan sumber ambiguitas!
Di bawah ini, kami mengikuti contoh ini dan menulis kode secara spesifik, Anda dapat merujuknya:
/***************************************//Des: Demo tutorial C++ //Penulis: Huang/ /Hak Cipta:www.dotcpp.com//Tanggal:2017/12/18********************************* * *******/#include<iostream>usingnamespacestd;classGrandfather{public:intkey;public:};classfather1:publicGrandfather{};classfather2:publicGrandfather{};classGrandson:publicfather1,publicfather2{};intmain(){ CucuA ;//A.key=9;return0;}
Kode tersebut merupakan manifestasi dari cerita tadi. Untuk kemudahan deskripsi, empat kelas yang ditentukan kosong saja. Artinya, kelas Cucu mewarisi dua kelas ayah dan akan memiliki dua anggota kunci. Jika Anda mencoba menggunakan kunci ini saat ini, harap perhatikan bahwa kunci tersebut telah dideklarasikan sebagai tipe publik saat mencoba menetapkan nilai dalam fungsi utama , akan ada pesan kesalahan "tidak unik, ambigu", yaitu terjadi apa yang disebut masalah ambiguitas, dan semua orang dapat memahaminya dengan baik.
Lalu bagaimana cara menghindari masalah ini? Inilah saatnya Anda perlu menggunakan kelas dasar virtual ! Yang disebut kelas dasar virtual adalah memodifikasinya dengan virtual sebelum mewarisi tipe publik saat mewarisi. Misalnya, dalam contoh ini, kelas ayah hanya perlu menambahkan virtual tambahan saat mewarisi kelas kakek kelas dan kelas dasar hanya akan memelihara salinan objek kelas dasar. Hindari banyak salinan dan ambiguitas.
Metode definisinya adalah dengan menambahkan deklarasi virtual saat menurunkan dua kelas induk:
kelasAyah1:publik virtualKakekkelasAyah2:publik virtualKakek
Sisanya tetap tidak berubah. Anda dapat mengujinya di komputer Anda sendiri untuk memahami timbulnya ambiguitas dan penggunaan kelas dasar virtual.