यह समझाने के लिए सबसे आसान तरीका शायद यह है:
आभासी, आप के लिए कुछ देखने करता है एक आभासी लुकअप तालिका जोड़कर।
दूसरे शब्दों में, अगर आप आभासी कीवर्ड नहीं था, और एक विधि overrode, तब भी आप [अगर सी ++ वाक्य रचना के लिए मेरी स्मृति स्थानों में कुछ पुरानी है मुझे माफ कर दो] कि विधि मैन्युअल रूप से फोन करना होगा :
typedef doSomethingWithAnA(A::*doSomethingPtr)();
map<type_info, doSomethingWithAnA> A_doSomethingVTable;
void someOtherFuncA* thing) {
doSomethingWithAnA methodToCall = A_doSomethingVTable[typeid(thing)];
thing->(*methodToCall)();
}
अब, यह एक उच्च स्तरीय दृष्टिकोण की अधिक है:
class A { void doSomething() { cout << "1"; } }
class B: public A { void doSomething() { cout << "2"; } }
class C: public A { void doSomething() { cout << "3"; } }
void someOtherFunc(A* thing) {
if (typeid(thing) == typeid(B)) {
static_cast<B*>(thing)->doSomething();
} else if (typeid(thing) == typeid(C)) {
static_cast<C*>(thing)->doSomething();
} else {
// not a derived class -- just call A's method
thing->doSomething();
}
}
आप इस एक छोटे से, एक लुकअप तालिका का उपयोग कर (पठनीयता और प्रदर्शन, सबसे अधिक संभावना के लिए) का अनुकूलन कर सकते हैं। सी ++ कंपाइलर स्पष्ट रूप से यह जानने के लिए थोड़ा सा अनुकूलित कर सकता है कि "type_info" क्या है, और इसी तरह। तो शायद, उस "मानचित्र" और लुकअप के बजाय "methodToCall = aDoSomethingVTable [टाइपिड (चीज़)]", फिर कॉल करें, ", कंपाइलर कुछ छोटे और तेज़ डालने वाला है, जैसे" doSomethingWithAnA * A_doSomethingVTable; "इसके बाद" A_doSomethingTablething -> TYPE_NUMBER "
तो आप सही है कि सी ++ वास्तव में आभासी नहीं की जरूरत है कर रहे हैं, लेकिन यह आपके जीवन को आसान बनाने के लिए वाक्यात्मक चीनी का एक बहुत जोड़ने करता है, और यह बेहतर भी अनुकूलन कर सकते हैं
है।। ने कहा, मुझे अभी भी लगता है कि सी ++ बहुत पुरानी जटिलता है, बहुत सारी अनावश्यक जटिलताओं के साथ। वर्चुअल, उदाहरण के लिए, (और शायद ) डिफ़ॉल्ट रूप से माना जा सकता है, और अनावश्यक रूप से अनुकूलित किया जा सकता है। एक स्कैला-जैसे "ओवरराइड" कीवर्ड अधिक उपयोग किया जाएगा "वर्चुअल" से भरा है।
लगता है जैसे आपको [एक अच्छी सी ++ पुस्तक] की आवश्यकता है (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –