c++ - Overloading operator in class -
वर्ग 'वर्ग_मैट्रिक्स' का ऑब्जेक्ट एक पूर्णांक मैट्रिक्स संग्रहीत करता है।
क्या यह मैं कैसे देख सकता हूँ अगर दो मैट्रिक्स समान हैं? मैं दो 2 डी सरणियों की तुलना '==' से अधिक लोड करके करना चाहता हूं, यह जांचने के लिए कि हर तत्व 2 मैट्रिक्स के बीच समान है।
उदाहरण: मुझे निम्न कार्य करने की आवश्यकता है:
स्क्वायरबैट्रिक्स ए, बी; अगर (a == b) {return 1;}
दोनों ए और बी गतिशील 2 डी सरणियाँ हैं।
हालांकि, मुझे एक त्रुटि मिल रही है: अप्रत्याशित प्रारंभकर्ता 'ऑपरेटर' से पहले मैं इसे कैसे ठीक करूं? इसके अलावा, यह कैसे सिंटैक्स की तरह दिखना चाहिए?
// हैडर फ़ाइल बूल ऑपरेटर == (स्क्वायरमैट्रिक्स सरणी 1, स्क्वायरमैट्रीक्स सरणी 2); //.cpp फ़ाइल बोल स्क्वायरबाटिक्स ऑपरेटर == (स्क्वायरअगैट्रिक्स एरे 1, स्क्वायरमैट्रिक्स एआरएआर 2) {अगर (सरणी 1.size! = Array2.size) {वापसी झूठी; } के लिए (int i = 0; i & lt; array1.size; i ++) {for (int j = 0; j & lt; array1.size; j ++) {if (array1 [i] [j]! = Array2 [i] [जे]) {वापसी झूठी; }}} सच हो; }
अधिकांश बाइनरी ऑपरेटरों को दो अलग-अलग तरीकों से ओवरलोड किया जा सकता है एक सदस्य फ़ंक्शन के रूप में है, और दूसरा एक वैश्विक (फ्री) फ़ंक्शन के रूप में है।
सदस्य फ़ंक्शन संस्करण एक पैरामीटर ले जाएगा जैसे एक अभिव्यक्ति: x == y
को x.operator == (y) के रूप में व्याख्या किया जाएगा
।
नि: शुल्क फ़ंक्शन संस्करण दो पैरामीटर लेता है x == y
की तरह एक अभिव्यक्ति को ऑपरेटर == (x, y)
के रूप में व्याख्या की जाती है।
आपको यह तय करने की आवश्यकता है कि आप किसके हैं उपयोग करने जा रहा है, और मापदंडों की संख्या को उचित रूप से परिभाषित करता है। अभी, ऐसा लगता है कि आपके पास केवल एक पैरामीटर लेते हुए एक मुफ्त फ़ंक्शन है, जो एक ऑपरेटर के लिए काम करेगा, लेकिन कोई द्विआधारी ऑपरेटर नहीं होगा।
जब आप एक मुफ्त फ़ंक्शन के रूप में अधिभार देते हैं, तो यह सामान्य रूप से सममित । विशेष रूप से, एक निशुल्क फ़ंक्शन ऑपरेटर के लिए सही प्रकार के बाएं या दाएं ऑपरेंड को सही प्रकार में परिवर्तित कर सकता है। एक सदस्य फ़ंक्शन ओवरलोड केवल सही ऑपरेंड को ऑपरेटर के लिए सही प्रकार में परिवर्तित कर सकता है।
Comments
Post a Comment