मेरे पास एक ऐसा फ़ंक्शन है जो प्रत्येक विशेषता द्वारा ऑब्जेक्ट की तुलना करता है यह देखने के लिए कि वे समान हैं या नहीं। लेकिन मैं बस सोच रहा था, क्या ऑब्जेक्ट की तुलना उनके ऑब्जेक्ट से तुलना करना बेहतर होगा कि यह जांचने के बजाय कि वे बिल्कुल वही वस्तुएं हैं या नहीं?क्या आप समानता के लिए पते से वस्तुओं की तुलना कर सकते हैं?
उत्तर
आप तय करना चाहिए कि क्या अपनी कक्षाओं तुल्यता या पहचान का समर्थन करने के लिए हैं। समतुल्यता मान, जैसे संख्याओं की विशिष्ट संपत्ति है। पहचान इकाइयों, जैसे लोगों की विशिष्ट संपत्ति है।
समानता आमतौर पर कक्षा के डेटा सदस्यों की तुलना करके निर्धारित की जाती है; पते की तुलना पहचान की जांच करने का एक उचित तरीका है।
हालांकि पहचान समकक्षता में शामिल होती है, अक्सर परीक्षण करने के लिए तेज़ होता है (अक्सर बहुत अधिक होता है) और स्वयं के साथ कुछ की तुलना करना अक्सर पर्याप्त होता है, जब आप समकक्ष का समर्थन करना चाहते हैं तो यह पहचान के लिए शॉर्ट-कट के रूप में भी परीक्षण के लायक हो सकता है। –
हालांकि ऑप्टिमाइज़ेशन –
के साथ अवधारणाओं को भ्रमित नहीं करते हैं, मुझे लगता है कि यह इस मामले में इसके लायक है, क्योंकि स्वयं में यह काम करता है कि दोनों अवधारणाओं के बीच संबंध दिखाता है: एक वस्तु हमेशा अपने आप के बराबर होनी चाहिए, अगर ऐसा नहीं है, तो आप कर रहे हैं यह गलत है। –
संपादित करें: सावधान रहें: यदि आप इसे सही तरीके से काम करना चाहते हैं तो आप अपने फ़ंक्शन पर मान (ऑब्जेक्ट) पास नहीं कर सकते हैं। आपको या तो (शायद कॉन्स) संदर्भ या पॉइंटर्स पास करने की आवश्यकता है।
bool AreEqual(const Class& a, const Class& b)
{
return &a == &b;
}
:
आप सिर्फ जानना चाहता दोनों संदर्भ या संकेत एक ही वस्तु (समान नहीं वस्तुओं, लेकिन एक ही) को इंगित कि क्या चाहते हैं, पतों की तुलना करना सही बात, वास्तव में है
ध्यान दें कि &
ऑपरेटर को ऊपर Class
कक्षा के लिए ओवरलोड किया जा सकता है। के बाद से सी ++ 11 समारोह टेम्पलेट std::addressof
कि तथ्य से निपटने के लिए उपलब्ध है:
#include <memory> //std::addressof
bool AreEqual(const Class& a, const Class& b)
{
return std::addressof(a) == std::addressof(b);
}
मुझे लगता है कि आप एक ही और समान के बीच एक उचित भेद करना लगता है।
एक ही पते पर इंगित करने वाले दो पॉइंटर्स का अर्थ है कि वे एक ही वस्तु को इंगित करते हैं। तो हाँ: एक ही पते का मतलब एक ही वस्तु है और इसलिए बराबर है (हालांकि समानता केवल तभी समझ में आती है जब हम 1 से अधिक ऑब्जेक्ट के बारे में बात करते हैं)।
वही गुणों का अर्थ एक ही वस्तु का जरूरी नहीं है। जैसे आपके पास दो उपयोगकर्ता "जॉन डो" नाम से दो उपयोगकर्ता हो सकते हैं। उनका प्रतिनिधित्व करने वाली वस्तुएं अभी भी अलग-अलग वस्तुएं होंगी, इसलिए इन्हें एक दूसरे के रूप में उपयोग नहीं किया जा सकता है। हालांकि, यदि आपके पास प्वाइंट क्लास है, तो {1, 2}
के दो अलग-अलग उदाहरण वास्तव में एक ही चीज़ का प्रतिनिधित्व करते हैं और इन्हें एक दूसरे के रूप में उपयोग किया जा सकता है।
value objects और reference objects or entities के बीच अंतर का एक बड़ा मुद्दा है, इसलिए मैं इसे देखने का सुझाव देता हूं।
उदा। यदि आपके पास प्वाइंट क्लास है, तो {1, 2}
के दो अलग-अलग उदाहरण वास्तव में एक ही चीज़ का प्रतिनिधित्व करते हैं, पहले उपयोगकर्ता उदाहरण के विपरीत।
यदि आपके पास ऑब्जेक्ट्स हैं जिनके लिए तुलना समय लेने वाली है, तो पॉइंटर्स की तुलना ऑब्जेक्ट समकक्ष निर्धारित करने के लिए एक तेज़ तरीका के रूप में उपयोग की जा सकती है (यानी, यदि पॉइंटर्स बराबर हैं, तो वस्तुएं बराबर हैं, अन्यथा वे बराबर हो सकते हैं)
- 1. आप आईपी पते की तुलना कैसे करेंगे?
- 2. समानता के लिए बहुभुज की तुलना
- 3. linq के साथ दो सूचियों की वस्तुओं की तुलना कैसे कर सकते हैं?
- 4. क्या आप रेल 3 खोज में किसी दिनांक की तुलना से अधिक कर सकते हैं?
- 5. क्या आप फ्लोटिंग पॉइंट मानों की तुलना शून्य से कर सकते हैं?
- 6. की तुलना jQuery वस्तुओं
- 7. वस्तुओं के सरणी की तुलना
- 8. समानता एल्गोरिदम की तुलना करें
- 9. समानता के लिए स्कैला फ़ंक्शन मानों की तुलना कैसे करें
- 10. एएसपी.नेट एमवीसी 3: क्या आप वस्तुओं की एक सरणी पोस्ट और बाध्य कर सकते हैं?
- 11. मैं समानता के लिए वाक्यांशों की तुलना कैसे करूं?
- 12. दो वस्तुओं की तुलना।
- 13. समानता के लिए XmlDocument की तुलना करना (सामग्री के अनुसार)
- 14. वस्तुओं की तुलना
- 15. वस्तुओं की तुलना करें?
- 16. जेएसएफ वैलिडेटर समानता के लिए स्ट्रिंग्स की तुलना
- 17. क्या आप जावास्क्रिप्ट से HTTP पैच अनुरोध कर सकते हैं?
- 18. रुबी के ऐरे कैसे हैं समानता के लिए तत्वों की तुलना करें?
- 19. सी में आप क्या नहीं कर सकते हैं जिसे आप उद्देश्य-सी में कर सकते हैं?
- 20. कक्षा वस्तुओं की तुलना करें
- 21. समानता के लिए दो अंग्रेजी तारों की तुलना
- 22. समानता के लिए दो enum * प्रकार * की तुलना?
- 23. स्मॉलटॉक - समानता के लिए दो तारों की तुलना करें
- 24. समानता के लिए दो numpy arrays की तुलना, तत्व-वार
- 25. क्या आप अनुरोध चर से टाइमज़ोन निर्धारित कर सकते हैं?
- 26. क्या आप जावास्क्रिप्ट से सी # फ़ंक्शन कॉल कर सकते हैं?
- 27. समानता के लिए .NET परीक्षण सरणी और केवल समान संदर्भ नहीं कर सकते हैं?
- 28. समानता के लिए सरणियों की तुलना करें, तत्वों
- 29. समानता के लिए आईईईई फ्लोट और युगल की तुलना
- 30. ऑक्टवे/MATLAB: समानता के लिए structs की तुलना कैसे करें?
यदि दो वस्तुओं का एक ही पता है, तो वे वही हैं। यद्यपि यदि दो वस्तुओं में एक ही गुण हैं, तो वे जरूरी नहीं हैं ... – SinisterMJ
ठीक है, क्या आप यह जांचना चाहते हैं कि ऑब्जेक्ट बराबर हैं, या वे एक ही वस्तु हैं या नहीं? यह वही नहीं है। – juanchopanza
आह मुझे लगता है कि मैंने अपना शीर्षक गलत कहा है, मैं यह मांग रहा हूं कि वे एक ही वस्तु हैं और समान मूल्य वाले अलग-अलग वस्तुएं नहीं हैं; – user1527216