c++ - Inheritance with no additional data members -


इस कोड पर विचार करें:

  class basic {public: Basic () {... } मूल (const मूल और अन्य) {...} वर्चुअल ~ बेसिक () {...} आभासी शून्य foo () = 0; निजी: int x, y, z; }; क्लास DeriveA: सार्वजनिक बेसिक {सार्वजनिक: DerivedA (): {...} वर्चुअल ~ DerivedA () {...} वर्चुअल void foo () {...}} वर्ग DerivedB: सार्वजनिक बेसिक {सार्वजनिक: DerivedB () { ...} आभासी ~ derivedB () {...} आभासी शून्य foo () {...}}   

असल में, DeriveA और DerivedB वर्गों में कोई अतिरिक्त डेटा सदस्य नहीं है, उनका एकमात्र उद्देश्य शुद्ध वर्चुअल foo फ़ंक्शन से मूल वर्ग को ओवरराइड करना है।

मैं व्युत्पन्न वर्गों के लिए कॉपी-कन्स्ट्रक्टर और ऑपरेटर = को लागू करना चाहता हूं।

मेरी योजना है:

1) कॉपी-कन्स्ट्रक्टर:

कॉपी-कन्स्ट्रक्टरों को उस तरह से वर्गीकृत वर्गों में कार्यान्वित करना: मूल वर्ग के लिए स्वैप लागू करना:

  शून्य स्वैप (बेसिक और अन्य) {std} के लिए स्वैप लागू करना  

:: स्वैप (एक्स, अन्य। X); Std :: swap (y, अन्य। Y); std :: swap (z, other.z); }

ओवरलोडिंग ऑपरेटर = 'व्युत्पन्न' वर्गों के लिए: <पूर्व> DeriveA & amp; ऑपरेटर = (कन्स्ट्रेंट DeriveA एंड अन्य) {Derived tmp (अन्य); (* इस) .swap (tmp); वापसी (* यह); }

DerivedB

के लिए भी यही मेरा प्रश्न: क्या यह एक अच्छा अभ्यास है? क्या मुझे व्युत्पन्न वर्गों के लिए स्वैप लागू करना चाहिए? क्या इस तरह के विरासत में ऐसे तरीकों को लागू करने के लिए कोई बेहतर तरीके हैं? क्या मेरी वास्तुकला दूसरों के लिए अच्छी तरह से समर्थित है?

ps मेरे अंग्रेजी के लिए खेद है।

मुझे एक वैकल्पिक सुझाव प्रदान करें: डिफ़ॉल्ट प्रतिलिपि कन्स्ट्रक्टर का उपयोग करें और असाइनमेंट ऑपरेटरों को कॉपी करें और संकलक आपके लिए काम करने दें! आपकी कक्षा में कोई भी उथले राज्य नहीं है, इसलिए डिफ़ॉल्ट संस्करण आपको ठीक वही कर देगा, और संकलक द्वारा सही तरीके से उत्पन्न होने की अधिक संभावना है, कहीं आप नकल पेस्ट को मिटाना न भूलें, एक सूक्ष्म बग शुरू कर दें। / P>

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -