डॉट और एरो ऑपरेटर दोनों का उपयोग C++ में क्लास या स्ट्रक्चर के मेंबर्स को एक्सेस करने के लिए किया जाता है। वे केवल अलग-अलग परिदृश्यों में उपयोग किए जाते हैं। C++ में, क्लास, स्ट्रक्चर, या यूनियन के रूप में घोषित प्रकारों को "क्लास टाइप का" माना जाता है। इसलिए निम्नलिखित उन सभी तीनों को संदर्भित करता है।
a.b केवल तभी उपयोग किया जाता है यदि b ऑब्जेक्ट a (या ऑब्जेक्ट के रेफरेंस) का मेंबर है। तो a.b के लिए, a हमेशा एक वास्तविक ऑब्जेक्ट (या क्लास के ऑब्जेक्ट का रेफरेंस) होगा।
a->b अनिवार्य रूप से (*a).b के लिए एक संक्षिप्त संकेतन है, यानी, यदि a एक ऑब्जेक्ट का पॉइंटर है, तो a->b उस ऑब्जेक्ट की प्रॉपर्टी b को एक्सेस कर रहा है जिसे a इंगित करता है।
ध्यान दें कि डॉट को ओवरलोड नहीं किया जा सकता लेकिन -> को ओवरलोड किया जा सकता है, इसलिए हम अपनी खुद की फंक्शन (operator->()) परिभाषित कर सकते हैं जिसे तब बुलाया जाना चाहिए जब इस ऑपरेटर का उपयोग किया जाता है। तो यदि a एक ऐसे क्लास का ऑब्जेक्ट है जो operator-> को ओवरलोड करता है (ऐसे सामान्य प्रकार स्मार्ट पॉइंटर्स और इटरेटर्स हैं), तो अर्थ जो भी क्लास डिजाइनर ने कार्यान्वित किया है।
रेफरेंस, शब्दार्थ रूप से, ऑब्जेक्ट्स के उपनाम हैं, इसलिए मुझे "या पॉइंटर के रेफरेंस" को भी जोड़ना चाहिए। हालांकि, मुझे लगा कि यह मदद से अधिक भ्रमित करने वाला होगा, क्योंकि पॉइंटर्स के रेफरेंस (T*&) शायद ही कभी उपयोग किए जाते हैं।
उदाहरण कोड
#include<iostream> class A { public: int b; A() { b = 5; } }; int main() { A a = A(); A* x = &a; std::cout << "a.b = " << a.b << "\n"; std::cout << "x->b = " << x->b << "\n"; return 0; }
आउटपुट
5 5