प्रकार का एक ऑब्जेक्ट Parent*&
पर बाध्य नहीं किया जा सकता है, उसी कारण से Child**
को Parent**
में परिवर्तित नहीं किया जा सकता है। यह अनुमति देने से प्रोग्रामर (जानबूझकर या नहीं) को बिना किसी कलाकार के प्रकार को तोड़ने की अनुमति मिल जाएगी।
class Animal {};
class DangerousShark : public Animal {};
class CuteKitten : public Animal {};
void f(Animal*& animalPtrRef, Animal* anotherAnimalPtr)
{
animalPtrRef = anotherAnimalPtr;
}
void g()
{
DangerousShark myPet;
CuteKitten* harmlessPetPtr;
f(harmlessPetPtr, &myPet); // Fortunately, an illegal function call.
}
संपादित
मुझे लगता है कि भ्रम की स्थिति से कुछ शब्द 'कन्वर्ट' और 'रूपांतरण' के ढीले प्रयोग की वजह से पैदा होती है कि।
संदर्भ पुन: असाइन नहीं किया जा सकता है, वस्तुओं के विपरीत जिन्हें पुन: असाइन किया जा सकता है, इसलिए जब हम रूपांतरण की बात करते हैं तो संदर्भों के संदर्भ में हम केवल एक नया संदर्भ शुरू करने के बारे में चिंतित हो सकते हैं।
संदर्भ हमेशा किसी ऑब्जेक्ट से बंधे रहते हैं, और ओपी के प्रश्न से यह स्पष्ट था कि वह एक ऐसा संदर्भ प्राप्त करने का लक्ष्य रख रहा है जो मौजूदा वस्तु से सीधे बंधे हो। यह केवल तभी अनुमति दी जाती है जब संदर्भ को प्रारंभ करने के लिए उपयोग किया गया ऑब्जेक्ट संदर्भ के प्रकार के साथ संदर्भ-संगत है। अनिवार्य रूप से, यह केवल तभी होता है जब प्रकार समान होते हैं, या वस्तु का प्रकार संदर्भ के प्रकार से लिया गया है और संदर्भ प्रकार कम से कम सीवी-योग्य प्रारंभिक वस्तु के रूप में योग्य है। विशेष रूप से, विभिन्न प्रकार के पॉइंटर्स संदर्भ-संगत नहीं हैं, भले ही प्रकार के संबंधों के संबंध में।
अन्य मामलों में, संदर्भ को किसी संदर्भ के साथ प्रारंभ किया जा सकता है जिसे संदर्भ प्रकार में परिवर्तित किया जा सकता है। इन मामलों में, हालांकि, संदर्भ होना चाहिए और अस्थिर नहीं होना चाहिए और रूपांतरण अस्थायी बना देगा और संदर्भ इस अस्थायी और मूल वस्तु से बंधे नहीं होगा। जैसा कि बताया गया है, यह ओपी के प्रेरक उदाहरण की आवश्यकताओं के लिए उपयुक्त नहीं है।
सारांश में, एक Child
सीधे एक Parent&
करने के लिए बाध्य किया जा सकता है, लेकिन एक Child*
सीधे एक Parent*&
करने के लिए बाध्य नहीं किया जा सकता। Parent* const&
को Child*
के साथ प्रारंभ किया जा सकता है, लेकिन संदर्भ वास्तव में Child*
ऑब्जेक्ट से प्रारंभिक अस्थायी Parent*
ऑब्जेक्ट प्रतिलिपि से जुड़ जाएगा।
स्रोत
2009-04-10 09:17:03
का संग्रह क्यों नहीं है; मुख्य() के अंत में? क्या यह 0 वापस नहीं होना चाहिए; ? – DeadHead
मैंने बस लिंक किए गए प्रश्न से कोड चिपकाया है लेकिन यह – Naveen
प्रश्न से संबंधित नहीं है, मुझे पता है कि यह वास्तव में प्रश्न से संबंधित नहीं था। सोचने के साथ संयुक्त जिज्ञासा मेरे ज्ञान में कुछ अंतर हो सकता है। – DeadHead