प्रश्न:

एक ही वर्ग की दो वस्तुओं को उनके संबंधित कार्यों में एक-दूसरे के साथ इंटरैक्ट करने के लिए आप किस सिंटैक्स का उपयोग करते हैं?

मेरे पास वर्ग सैनिक में दो वस्तुएं हैं। क्लास फंक्शन अटैक (y) एक ऑब्जेक्ट का current_hp int लेता है और दूसरे ऑब्जेक्ट का atk int मान घटाता है। मैं इस तरह के तर्कों के माध्यम से ऑब्जेक्ट नामों को पारित करने में सक्षम नहीं हूं। जाहिर है यह काम नहीं कर रहा है, और कोड में आगे के संदर्भ भी काम नहीं करेंगे।

पृष्ठभूमि:

मैं ऑनलाइन पाठों से गुजर रहा हूं और मुझे एक चुनौती मिली है जो मेरे द्वारा किए गए पाठों के लिए उपयुक्त होनी चाहिए। मैंने इसे बिना किसी समस्या के किया लेकिन मैं वापस गया और कार्यों और कक्षाओं को ध्यान में रखते हुए इसे फिर से लिखा।

मुझे मेरी मदद करने के लिए कहीं भी जानकारी नहीं मिल रही है इसलिए मैं यहां आया हूं। मैं गलत चीज की तलाश कर रहा हूं लेकिन ... इसके लिए नया कोई मदद की सराहना की जाएगी।

class soldier{
private:
    int curent_hp = 0;
    int atk = 0;
    int init = 0;
public:
    bool attacked_yet = false;
    void create_soldier(){
        curent_hp = rand() % 20 + 1;
        atk = rand() % 5 + 1;
        init = rand() % 100 + 1;
    }
       int attack(y){
 // the y here being the one that is being attacked
        int attackroll = rand() % 100 + 1;
        if (attackroll < 30){
            y.curent_hp = y.curent_hp - atk;
            }
    }
};
0
Ash 27 अगस्त 2018, 02:32
2
सैनिक और y, create_soldier के बजाय आप इसे एक निर्माता बनाने पर विचार कर सकते हैं।
 – 
NoSenseEtAl
27 अगस्त 2018, 02:39

2 जवाब

आपको सैनिक को एक संदर्भ पास करना होगा इस तरह हमला किया जा रहा है:

/** Attack a target soldier
@param[in] target soldier to be attacked
*/
int attack( soldier& target )
{
  ...

वैसे, y जैसे पैरामीटर नामों का उपयोग न करें, जब तक कि आप x, y और z निर्देशांक के साथ ज्यामितीय समस्याओं पर काम नहीं कर रहे हों। सार्थक पैरामीटर नाम बहुत सारे दुःख बचाते हैं!

3
ravenspoint 27 अगस्त 2018, 03:11

एक ही वर्ग की दो वस्तुओं को उनके संबंधित कार्यों में परस्पर क्रिया करने के लिए आप किस वाक्य रचना का उपयोग करते हैं?

और Google से, 'वाक्यविन्यास' को इस प्रकार परिभाषित किया गया है:

... किसी भाषा में अच्छी तरह से बने वाक्यों को बनाने के लिए शब्दों और वाक्यांशों की व्यवस्था।

इस संदर्भ में, मुझे यकीन नहीं है कि वाक्यविन्यास से आपका क्या मतलब है।


एक शुरुआती बिंदु के रूप में, और कुछ लिखने के लिए,

  • टेलीकॉम एम्बेडेड सिस्टम में, मैंने सभी सी ++ में काम करने/जोड़ियों की रक्षा करने का काम किया।

हार्डवेयर संदर्भ:

  • लगभग सभी कार्य/सुरक्षा hw विनिमेय हैं ... कार्ड स्लॉट को केवल स्वैप करना ठीक था।

सॉफ्टवेयर संदर्भ:

  • कार्य और सुरक्षा कार्ड "... एक ही वर्ग की दो वस्तुएं" थे।

'तेज़' प्रतिक्रिया के लिए hw द्वारा सहयोग किए गए कार्डों पर काम करें और उनकी रक्षा करें, और सॉफ़्टवेयर ने अगले सेकंड के भीतर किसी भी क्रिया (hw द्वारा लेना) की खोज की।


कार्य/रक्षा का सीटीआर पर प्रभाव पड़ता है:

A) दोनों कार्ड एक दूसरे की उपस्थिति के बारे में धारणा के बिना बनाए गए हैं।

नोट: यदि दूसरा कभी स्थापित नहीं होता है, तो सिस्टम अभी भी 'रिकवरी' व्यवहार के बिना काम करेगा।

मोटे तौर पर इसी तरह कि कैसे दो सैनिक कभी नहीं लड़ेंगे जब उनमें से केवल 1 मौजूद था।

बी) जब नियंत्रक कोड दूसरा (एक जोड़ी का) बनाने के लिए तैयार होता है, तो यह जानता है कि पहला वर्क/प्रोटेक्ट कार्ड तैयार है। यह बस दूसरे का निर्माण करता है, और फिर पहले भाई के बारे में नवीनतम निर्माण में एक संदर्भ पास करता है।

ग) सहोदर संदर्भ प्राप्त होने पर, दोनों का दूसरा उद्देश्य दोनों उदाहरणों को अद्यतन करेगा। मैं आमतौर पर दूसरे कार्ड ctor के पूरा होने के तुरंत बाद (त्रुटियों के बिना) दूसरे कार्ड का संदर्भ देता था।

नोट: सी ++ में, संदर्भ या सूचक प्रदान किए जाने पर, एक ही ऑब्जेक्ट क्लास के भाई-बहन के उदाहरणों की दूसरी तक पूर्ण पहुंच होती है।


मैंने युद्ध सिमुलेशन प्रयास (दूरसंचार से पहले) में भी योगदान दिया।

आगे की बातचीत (एक लड़ाई की) प्रत्येक सैनिक द्वारा व्यक्तिगत रूप से ली जा सकती है, यदि आपका नियंत्रक प्रत्येक सैनिक को प्रोत्साहन प्रदान करता है, अर्थात एक समारोह का आह्वान करता है।

आप यह भी पा सकते हैं कि, एक प्रोत्साहन प्राप्त करने पर, यह आसान हो सकता है जब एक सैनिक उदाहरण दोनों सैनिक उदाहरणों पर एकल उत्तेजना संबंधी कार्रवाई करता है।


एक युद्ध सिम प्रयास में मैंने कुछ समय पहले काम किया था, सभी सिम क्रियाओं को हथियार की आग (और, उस स्थिति में, एक लेजर सिग्नल) से प्रेरित किया गया था। दूरी और हथियार प्रकार (टैंक बनाम ar15) ने हिट होने पर घातकता को प्रभावित किया (जैसा कि लेजर सेंसर द्वारा पता लगाया गया)।

उस सॉफ़्टवेयर को बहुत सरल बनाया गया था क्योंकि प्रत्येक प्रतिभागी (और सिम में नोड) एक हथियार और लक्ष्य दोनों था।

आपके प्रयास में शुभकामनाएँ।


शायद अंतिम टिप्पणी:

मैं आम तौर पर कार्यों के लिए वस्तुओं को पास नहीं करता हूं। इसके बजाय मैं वस्तुओं के कार्यों का आह्वान करता हूं। इस मुद्दे के बारे में कई लेख हैं। मैं सिफारिश कर सकता हूं:

देखें: https://pragprog.com/articles/tell-dont-ask

यह भी देखें: https://martinfowler.com/bliki/TellDontAsk.html बताओ-डोंट-आस्क एक सिद्धांत है जो लोगों को यह याद रखने में मदद करता है कि ऑब्जेक्ट-ओरिएंटेशन डेटा को उन कार्यों के साथ बंडल करने के बारे में है जो उस पर काम करते हैं ... मार्टिन फाउलर

0
2785528 27 अगस्त 2018, 04:05