Ketika belajar tentang polimorfisme, Anda biasanya melihat sesuatu seperti ini
class Base { int prv_member; virtual void fn(){} }
class Derived : Base { int more_data; virtual void fn(){} }
Apa itu upcasting atau downcasting? Apakah (Derived*)base_ptr;
upcast atau downcast?
Saya menyebutnya upcast karena Anda akan pergi dari pangkalan ke sesuatu yang lebih spesifik. Orang lain mengatakan kepada saya itu downcast karena Anda akan turun ke hierarki sesuatu yang spesifik dengan yang atas menjadi root. Tetapi orang lain tampaknya menyebutnya apa yang saya sebut itu.
Ketika mengkonversi ptr basis ke ptr turunan apakah ini disebut upcasting atau downcasting? dan jika seseorang dapat menautkan ke sumber resmi atau menjelaskan mengapa ini disebut hebat.
virtual
tidak perlu tetapi tidak "sakit". Bisakah Anda menguraikan mengapa Anda pikir itu tidak boleh digunakan sama sekali dalam konteks itu?Jawaban:
Ini adalah downcast: lihat artikel Wikipedia di atasnya.
sumber
Dalam sebagian besar bahasa (sejauh yang saya tahu) pemeran umum dilakukan secara otomatis. Jadi, biasanya jika Anda berbicara tentang pemeran dalam hierarki, Anda merujuk pada pemeran khusus. IMHO sebagian besar orang dengan keinginan untuk memisahkan kedua jenis panggilan yang dikhususkan downcast karena mereka menganggap hierarki warisan sebagai pohon. Dan dalam ilmu komputer, root digambarkan berada di atas. Alasan di balik ini adalah konvensi, atau, lebih mungkin, kebencian yang mengakar mendalam bagi para ahli biologi di antara para ilmuwan komputer. (Semua permainan kata-kata dimaksudkan.)
EDIT: Mungkin itu adalah kebencian yang mengakar.
sumber
Pikirkan cara normal menggambar pohon dengan "alas" di bagian atas halaman dan daun di bagian bawah. Jika Anda mewakili hierarki kelas Anda dengan cara ini, dengan kelas dasar di bagian atas dan daun di suatu tempat di bawah ini, maka naik-turun dan turun-casting menjadi literal - sesuatu yang bergerak naik halaman dari daun ke arah dasar adalah naik- gips dan sesuatu yang bergerak ke bawah halaman dari pangkal ke arah daun adalah gips ke bawah.
sumber