Bunu yapmanın iki yolu vardır. Öncelikle, nesnenin türü hakkında bilgi içeren type_info
yapısını döndüren typeid
işlecini kullanabilirsiniz. Eğer typeid(*ptr)
kullanmak zorunda ve burada değil typeid(ptr)
Base* ptr = /* ... */
if (typeid(*ptr) == typeid(DerivedType)) {
/* ... ptr points to a DerivedType ... */
}
Uyarı: Örneğin. typeid(ptr)
'u kullanırsanız, Base*
için type_info
nesnesine geri dönersiniz, çünkü bu işaretçi, ne gösterdiğinden bağımsız olarak Base*
türüne sahiptir. Unutulmaması gereken
önemli bir nokta nedir ptr
yerleri en tamDerivedType
olarak ise bu kontrol edecektir. ptr
, DerivedType
'dan türeyen bir nesneye işaret ediyorsa (belki EvenMoreDerivedType
), bu kod düzgün çalışmayacaktır.
Biraz daha sağlam olan bir tür nesneye işaret edip etmediğinizi kontrol etmenin alternatif bir yolu, dynamic_cast
işlecini kullanmaktır. dynamic_cast
, çalışma zamanında kontrol edilen bir eşlemeyi gerçekleştirir; bu, satır başarılı olursa ve NULL aksi takdirde geçerli bir işaretçi verecektir. Örneğin:
Bu
EvenMoreDerivedType
gibi bir şey de
ptr
eğer noktaları, döküm hala
EvenMoreDerivedType
devralır, çünkü
DerivedType
gelen başarılı olacağından avantajına sahiptir
Base* ptr = /* ... */;
DerivedType* derived = dynamic_cast<DerivedType*>(ptr);
if (derived) {
/* ... points to a DerivedType ... */
}
.
son bir düşünce olarak, bazen böyle bir kod bakın:
Base* ptr = /* ... */
if (DerivedType* derived = dynamic_cast<DerivedType*>(ptr)) {
/* ... points to a DerivedType ... */
}
Bu if
ifadesinin gövdesine derived
işaretçisi yerel kapsamları ve sıfırdan farklı değerler C++ true
için değerlendirmek gerçeğini kullanır. Kişisel olarak bunu okumayı ve daha az hataya yatkınlığı daha kolay buluyorum, ancak her şey sizin için en kolay olanla birlikte.
Bu yardımcı olur umarız!
'childObject' türünün türü nedir? Bunu C++'da yapmanın genel bir yolu yoktur, çünkü çalışma zamanında bir tür kavramı yoktur. –
Tamam, ben soru – Homam
düzenleyeyim Ne tür childObject.GetType() hakkında bir şey söylemiş olmasına rağmen, bu kod korkunç, çünkü tür karşılaştırma üzerinde dalları. OOP'un ortadan kaldırması gereken şey budur. –