Upcasting / downcasting nedir?


16

Çok biçimlilik hakkında bilgi edinirken genellikle böyle bir şey görürsünüz

class Base { int prv_member; virtual void fn(){} }
class Derived : Base { int more_data;  virtual void fn(){} }

İniş veya iniş nedir? Mı (Derived*)base_ptr;bir hava bacası veya havalandırma bacası?

Üfleme diyorum çünkü üssünden daha spesifik bir şeye gidiyorsun. Diğer insanlar bana bunun bir mahzun olduğunu söyledi çünkü üst kısım kök olan belirli bir şeye hiyerarşiye iniyorsunuz. Ama diğer insanlar buna dediğim şeyi söylüyorlar.

Temel bir ptr türetilmiş bir ptr'e dönüştürülürken buna yukarı veya aşağı doğru denir mi? ve eğer birisi resmi bir kaynağa bağlanabilirse ya da neden buna neden çağırdığını açıklayabilirse.



3
Bu bir kopya değil. Bu soru ne olduğunu sorar, diğeri isimleri kimin bulduğunu sorar.
Robert Harvey

1
@RobertHarvey "ve eğer birisi resmi bir kaynağa bağlanabilirse ya da neden bunun neden daha büyük olduğunu açıklayabilirse." , ancak kabul edildi, bu sorunun sadece bir parçası olarak düşünülebilir .
Steven Jeuris

Bunun için dikkat sanal Türetilmiş sınıfta. Derived sınıfını bir kez daha türetmezseniz, bunu yazmak istemezsiniz. void fn () {...} yeterlidir.
appoll

JustaPro: ekleme virtualgereksizdir ancak "incinmez". Neden bu bağlamda kullanılmaması gerektiğini düşündüğünüzü açıklayabilir misiniz?
Nik Bougalis

Yanıtlar:


17
Is (Derived*)base_ptr; an upcast or downcast?

Bu bir mahzun: Wikipedia'nın makalesine bakın .

Olarak nesne yönelimli programlama , downcasting veya tip arıtma eylemidir döküm bundan türetilen sınıflardan birine bir temel sınıf bir referans.

Birçok programlama dilinde, başvurulan nesnenin türünün gerçekten yayınlanmakta olan türden veya türetilmiş türden olup olmadığını RTTI üzerinden kontrol etmek ve böylece durum böyle değilse bir hata vermek mümkündür.

Başka bir deyişle, temel sınıfın ( üst sınıf ) bir değişkeni türetilmiş sınıfın ( alt sınıf ) bir değerine sahip olduğunda, alt çizgi mümkündür ...


9

Çoğu dilde (bildiğim kadarıyla) genelleme dökümleri otomatik olarak yapılır. Yani, genellikle bir hiyerarşi içindeki bir kadrodan bahsediyorsanız, uzman bir kadroya atıfta bulunursunuz. IMHO, iki türü ayırma arzusu olan çoğu insan, kalıtım hiyerarşisini bir ağaç olarak düşündükleri için uzman döküm downcast'i çağırır. Ve bilgisayar biliminde kökün en üstte olduğu resmedilmiştir. Bunun sebebi ya bir sözleşmedir ya da büyük olasılıkla bilgisayar bilimcileri arasında biyologlar için köklü bir nefrettir. (Tüm punklar amaçlanmıştır.)

EDIT: Belki de en köklü bir nefrettir.


LOL + 1 olmalıdır :).

2

Sayfanın üst kısmındaki "taban" ve alt kısımdaki yaprakları olan bir ağaç çizmenin normal yolunu düşünün. Sınıf hiyerarşinizi bu şekilde temsil ediyorsanız, taban sınıfı üstte ve aşağıda bir yerde yapraklar varsa, o zaman yukarı ve aşağı döküm değişmez olur - sayfayı yapraktan tabana doğru hareket ettiren bir şey yukarı döküm ve sayfayı tabandan bir yaprağa doğru hareket ettiren bir şey aşağıya dönük bir dökümdür.


2
Fakat ağaçlar yukarı çıkar ve gövdeleri topraktan dışarı çıkar. (Bu yüzden upcast düşünmeye devam

@ acidzombie24: Ancak bilgisayar bilimi kitaplarında, ağaçların normalde tarif ettiğim gibi çizildiğini ve kökleri üstte olduğunu göreceksiniz.
Jerry Coffin

Biliyorum ama sadece komik oluyordum. Ağaçlar (gerçek olanlar) ve taban (temel gibi ve ayaklarımın altında) bunu düşünmek için çok kötü yollardır :(. +1

5
@ acidzombie24: Bunları Avustralya'daki ağaçlar gibi düşünün.
Martin York
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.