क्या दूसरा मामला लागू करने का एकमात्र बिंदु यह है कि यदि मैं ऑब्जेक्ट के बिना कोलिडेबल से प्राप्त करना चाहता हूं? यदि ऐसा है, तो दूसरा मामला कभी भी अनुकूल होगा जब दूसरा मामला अधिक लचीलापन प्रदान करता है।किस प्रकार की विरासत अधिक बेहतर है?
दोनों कोलेडबल्स के पास केवल एक शुद्ध वर्चुअल फ़ंक्शन है और ऑब्जेक्ट उन ऑब्जेक्ट्स के लिए बेस क्लास है जिन्हें स्क्रीन पर खींचा जा सकता है (मेरे मामले में)।
^मान लिया जाये कि मैं निम्नलिखित कोड सही तरीके से समझने रहा हूँ (मैं भी यकीन नहीं कर रहा हूँ TBH)
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
संपादित करें:
मैट के आधार पर/सेठ
class Object
class Collidable
class Clickable
class Trackable
class BlowUppable
class Actor : public Object, public Collidable, public Clickable, public Trackable,
public BlowUppable
class SomeObjectThatIsTakenForGrantedThatEverythingElseIsInherited : public Actor
पहले उदाहरण दूसरा मामला है और दूसरा उदाहरण पहला मामला है। मुझे लगता है कि एकमात्र उपयोग मैं पहले मामले के लिए देखता हूं।
@ लचियन
यह उत्तर मूल से एक अलग सवाल होने जा रहा है क्योंकि आपका जवाब न तो था।
इस मामले में, क्या किसी वस्तु से किसी वस्तु को बदलने का कोई अंतर है? प्रत्येक मामले में, टकराव की जांच करने के लिए, किसी ऑब्जेक्ट को ध्वज होना चाहिए कि टकराव की जांच की जानी चाहिए या नहीं। आपके मामले में, सदस्य को चेक किया जा सकता है अगर इसकी शून्य या नहीं, लेकिन व्युत्पन्न मामले में, ऑब्जेक्ट स्वयं ही बताता है कि यह टकरा सकता है या नहीं। एक सरणी/पेड़ में, मैं या तो व्युत्पन्न वस्तु को एक तर्क के रूप में पास कर सकता हूं या get() विधि का उपयोग कर तर्क के रूप में हिटबॉक्स पास कर सकता हूं।
गहराई में अधिक होने के लिए, मैं एक वर्ग है - दूसरे मामले
class Hitbox : public Object, public Collidable
और अभिनेता वर्ग का उपयोग कर एक सदस्य के रूप में यह है
class Actor : public Object
{
Hitbox *box;
};
वस्तुओं है कि टक्कर एक hitbox होता इसके बजाए और यह आपकी पोस्ट को सटीक रूप से दर्शाता है। लेकिन मुझे अभी भी क्या मिल रहा है कि जब मैं फिर से आपके उदाहरण की समीक्षा करता हूं, तो क्या इसका मतलब यह है कि हिटबॉक्स के बजाय एक कोलाइडबल सदस्य होना चाहिए?
class Hitbox
{
Collidable *collision;
};
मैं क्या है: एक सदस्य
अभिनेता पहले से ही पीछा कर रहा है के रूप में
इनहेरिट Collidable या
Have Collidable:
एक अभिनेता के एक HitBox जो टक्कर
क्या HitBox करना चाहिए संभालती रखती है आपका सम्मेलन क्या हिटबॉक्स एक ही करना चाहिए?
यदि आपने पहले किया था तो आपको 'CollidableTrackableClickableBlowuppableObject' नहीं होना चाहिए; यह केवल एक वर्ग होगा जो 'कोलाइडेबल', 'ट्रैक करने योग्य', 'क्लिक करने योग्य' और 'ब्लोउपबल' से विरासत में मिला है, जैसा कि पहले तरीके से है, लेकिन आप पहले 'ऑब्जेक्ट' का उत्तराधिकारी नहीं होंगे। मुझे यकीन नहीं है कि पहला व्यक्ति अधिक उपयोगी है; क्या स्क्रीन पर सभी क्लिक करने योग्य नहीं हो सकते हैं? यदि आपके पास सभी अलग हैं, तो आप यह नहीं बता सकते कि आपका 'ऑब्जेक्ट' क्लिक करने योग्य है या यदि आपका 'क्लिक करने योग्य' ड्रायबल है। दूसरी तरफ, आप जानते हैं कि 'क्लिक करने योग्य' खींचने योग्य है। –
आपको एक नहीं होना होगा ... अगर आपने _second_ किया था तो मेरा कहना था। –