मैं वर्ग बी में ऑब्जेक्ट प्रकार है कि एसी ++ 11
class A
{
};
class B : public A
{
};
और मैं तीन वस्तुओं है से विरासत जाँच हो रही है।
A* a = new A();
A* a2 = new B();
B* b = new B();
मैं चाहते हैं अगर जांच एक ग्रुप ए की वस्तु है, a2 ग्रुप बी (नहीं ए) की वस्तु है, और ख प्रकार बी की वस्तु है
मैंने कोशिश की तुलना आपके द्वारा लिखा गया है, लेकिन यह मुझे सही जवाब नहीं देता है।
cout << (typeid(*a) == typeid(A)) << endl; // -> 1
cout << (typeid(*a2) == typeid(A)) << endl; // -> 1
cout << (typeid(*b) == typeid(A)) << endl; // -> 0
cout << (typeid(*a) == typeid(B)) << endl; // -> 0
cout << (typeid(*a2) == typeid(B)) << endl; // -> 0
cout << (typeid(*b) == typeid(B)) << endl; // -> 1
मैंने गतिशील कास्टिंग करने की कोशिश की, लेकिन मुझे संकलन त्रुटि मिली।
B* derived = dynamic_cast<B*>(a);
if (derived) {
cout << "a is B";
}
derived = dynamic_cast<B*>(a2);
if (derived) {
cout << "a2 is B";
}
derived = dynamic_cast<B*>(b);
if (derived) {
cout << "b is B";
}
typename.cpp: In function 'int main(int, char**)':
typename.cpp:27:36: error: cannot dynamic_cast 'a' (of type 'class A*') to type 'class B*' (source type is not polymorphic)
B* derived = dynamic_cast<B*>(a);
^
typename.cpp:31:34: error: cannot dynamic_cast 'a2' (of type 'class A*') to type 'class B*' (source type is not polymorphic)
derived = dynamic_cast<B*>(a2);
मैंने स्थिर कास्टिंग का उपयोग किया, लेकिन मुझे जवाब गलत मिला।
B* derived = static_cast<B*>(a);
if (derived) {
cout << "a is B"; // -> YES
}
derived = static_cast<B*>(a2);
if (derived) {
cout << "a2 is B"; // -> YES
}
derived = dynamic_cast<B*>(b);
if (derived) {
cout << "b is B"; // -> YES
}
कैसे मैं सही ढंग से C++11 में ऑब्जेक्ट प्रकार की पहचान कर सकते हैं?
'* ए 'प्रकार' ए' और '* बी' प्रकार की घोषणा के अनुसार' बी' प्रकार है। –
डायनामिक कास्ट केवल वर्चुअल के साथ काम करेगा लेकिन आपके कोड में कोई वर्चुअल फ़ंक्शन नहीं है। –
आपके कोड के समान सर्वश्रेष्ठ न्यूनतम समाधान: http://coliru.stacked-crooked.com/view?id=7150bf0db7988cf1d2988aba99c72392-3b440a87a52fe2ae7c853c82f4c5144f – chris