पॉलीमॉर्फिक बेस क्लास पॉइंटर्स से व्युत्पन्न क्लास इंस्टेंस को कॉपी करना
कई लोगों के लिए, यह प्रोग्रामिंग पहेली मायावी साबित हुई है। आइए इसमें शामिल जटिलताओं का पता लगाएं और एक कुशल समाधान खोजें।
निम्नलिखित परिदृश्य पर विचार करें: आपके पास बेस, व्युत्पन्न1, व्युत्पन्न2, आदि कक्षाएं हैं, जहां व्युत्पन्न कक्षाएं बेस से प्राप्त होती हैं। बेस ऑब्जेक्ट के लिए एक सूचक को देखते हुए, लक्ष्य अंतर्निहित व्युत्पन्न ऑब्जेक्ट की एक गतिशील रूप से आवंटित प्रतिलिपि बनाना है, "अस्थायी का रिटर्निंग पता" जैसे मुद्दों से बचना है।
परंपरागत रूप से, इसे एक लिटनी के माध्यम से संबोधित किया गया है सशर्त कथनों के भीतर टाइपिड्स या डायनामिक_कास्ट की। हालाँकि, हम एक अधिक सुंदर समाधान की तलाश में हैं। प्रकार। यह विधि ऑब्जेक्ट की एक प्रति लौटाती है। यदि बेस अमूर्त नहीं है, तो आप इसके कॉपी कंस्ट्रक्टर को लागू कर सकते हैं, लेकिन इस दृष्टिकोण में स्लाइसिंग का जोखिम होता है यदि इसे व्युत्पन्न कक्षाओं में ठीक से लागू नहीं किया जाता है।
कोड पुन: उपयोग के लिए सीआरटीपी मुहावरा
कोड डुप्लिकेशन से बचने के लिए, सीआरटीपी (क्यूरियसली रिकरिंग टेम्पलेट पैटर्न) मुहावरे को नियोजित किया जा सकता है। निम्नलिखित सामान्य टेम्पलेट पर विचार करें:
टेम्पलेट
वर्ग व्युत्पत्ति सहायक : सार्वजनिक आधार
{
जनता:
वर्चुअल बेस* क्लोन() स्थिरांक
{
नई व्युत्पन्न वापसी(static_cast
templateclass DerivationHelper : public Base { public: virtual Base* clone() const { return new Derived(static_cast (*this)); } };
यह समाधान कई लाभ प्रदान करता है:
सरलता: कोड संक्षिप्त और लागू करने में आसान है।
एक्स्टेंसिबिलिटी: नए व्युत्पन्न वर्गों को जोड़ने के लिए बेस क्लास को संशोधित करने की आवश्यकता नहीं है। प्रदर्शन: वर्चुअल फ़ंक्शन कॉल अपेक्षाकृत कुशल हैं।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3