Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में डॉट (.) ऑपरेटर और -> में क्या अंतर है?


डॉट और एरो ऑपरेटर दोनों का उपयोग C++ में क्लास के मेंबर्स को एक्सेस करने के लिए किया जाता है। वे केवल अलग-अलग परिदृश्यों में उपयोग किए जाते हैं। C++ में, क्लास, स्ट्रक्चर, या यूनियन के रूप में घोषित प्रकारों को "क्लास टाइप का" माना जाता है। इसलिए निम्नलिखित उन सभी तीनों को संदर्भित करता है।

  • a.b केवल तभी उपयोग किया जाता है यदि b ऑब्जेक्ट (या ऑब्जेक्ट के रेफरेंस) a का मेंबर है। इसलिए a.b के लिए, a हमेशा एक वास्तविक ऑब्जेक्ट (या क्लास के ऑब्जेक्ट का रेफरेंस) होगा।
  • a->b अनिवार्य रूप से (*a).b के लिए एक संक्षिप्त नोटेशन है, यानी यदि a एक ऑब्जेक्ट का पॉइंटर है, तो a->b उस ऑब्जेक्ट की प्रॉपर्टी b को एक्सेस कर रहा है जिस पर a इंगित करता है।

ध्यान दें कि . ओवरलोडेबल नहीं है। -> एक ओवरलोडेबल ऑपरेटर है, इसलिए हम अपना खुद का फ़ंक्शन (operator->()) परिभाषित कर सकते हैं जिसे इस ऑपरेटर के उपयोग पर कॉल किया जाना चाहिए। इसलिए यदि a एक ऐसे क्लास का ऑब्जेक्ट है जो operator-> को ओवरलोड करता है (ऐसे सामान्य प्रकार स्मार्ट पॉइंटर्स और इटरेटर्स हैं), तो अर्थ वही है जो क्लास डिजाइनर ने कार्यान्वित किया है।

[1] रेफरेंस, अर्थपूर्ण रूप से, ऑब्जेक्ट्स के उपनाम हैं, इसलिए मुझे #3 में "या पॉइंटर का रेफरेंस" भी जोड़ना चाहिए था। हालांकि, मुझे लगा कि यह भ्रमित करने से अधिक सहायक होगा, क्योंकि पॉइंटर्स के रेफरेंस (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
  1. - C# में इंटरफ़ेस और एब्स्ट्रैक्ट क्लास में क्या अंतर है?

    इंटरफ़ेस प्रॉपर्टीज, मेथड्स, और इवेंट्स को परिभाषित करते हैं, जो इंटरफ़ेस के सदस्य हैं। इंटरफ़ेस में केवल सदस्यों की घोषणा होती है। व्युत्पन्न क्लास की जिम्मेदारी है कि वह सदस्यों को परिभाषित करे।एब्स्ट्रैक्ट क्लास कुछ हद तक उसी उद्देश्य की पूर्ति करते हैं, हालांकि, वे ज्यादातर तब उपयोग किए जाते हैं

  1. - C# में इंटरफ़ेस और क्लास में क्या अंतर है?

    एक इंटरफ़ेस फील्ड्स या मेथड कार्यान्वयन के बिना एक क्लास है। यह उन मेथड्स को लागू नहीं कर सकता जो यह परिभाषित करता है।एक क्लास आमतौर पर इंटरफ़ेस में परिभाषित मेथड्स को लागू करती है।इंटरफ़ेसइंटरफ़ेस प्रॉपर्टीज, मेथड्स, और इवेंट्स को परिभाषित करते हैं, जो इंटरफ़ेस के सदस्य हैं। इंटरफ़ेस में केवल सदस्य

  1. - Python में = और == ऑपरेटर्स में क्या अंतर है?

    Python में `=` सिंबल को असाइनमेंट ऑपरेटर के रूप में परिभाषित किया गया है। इसके बाईं ओर एक वेरिएबल और दाईं ओर एक एक्सप्रेशन की आवश्यकता होती है। दाईं ओर के एक्सप्रेशन का मान बाईं ओर के वेरिएबल को असाइन किया जाता है। एक्सप्रेशन और वेरिएबल का नाम परस्पर विनिमेय नहीं हैं। >>> a = 10 >>&g