पहली पंक्ति आप पर पशु वर्ग के सदस्य ही कॉल करने की अनुमति एक:
Animal *a = new Dog();
a->eat(); // assuming all Animal can eat(), here we will call Dog::eat() implementation.
a->bark(); // COMPILATION ERROR : bark() is not a member of Animal! Even if it's available in Dog, here we manipulate an Animal.
हालांकि (दूसरों के द्वारा बताया के रूप में), में a
के रूप में इस cas अभी भी एक पशु है, तो आप प्रदान नहीं कर सकते a
एक अधिक विशिष्ट बच्चे वर्ग कुत्ता है कि के लिए पूछ एक समारोह के एक पैरामीटर के रूप में:
:
void toy(Dog* dog);
toy(a); // COMPILATION ERROR : we want a Dog!
दूसरी पंक्ति आप बच्चे को कक्षा के विशिष्ट कार्यों उपयोग करने की अनुमति
Dog *a = new Dog();
a->bark(); // works, but only because we're manipulating a Dog
तो बेस क्लास का उपयोग अपने वर्ग पदानुक्रम के "जेनेरिक" इंटरफ़ेस के रूप में करें (जिससे आप अपने सभी जानवरों को खाने के लिए अनुमति दे सकते हैं() कैसे परेशान करते हैं)।
इस विशिष्ट मामले के लिए यह वही काम करेगा। लेकिन मान लें कि आपके पास एक और कक्षा बिल्ली है जो पशु से विरासत में होती है। आप एक बिल्ली को उस समारोह में नहीं पारित कर सकते हैं जो कुत्ते (आसानी से) की अपेक्षा करता है, लेकिन आप एक बिल्ली को एक पशु को पास कर सकते हैं। पॉलिमॉर्फिज्म एक से अधिक व्युत्पन्न वर्ग – DaClown