खोज…


परिचय

एक using घोषणा वर्तमान दायरे में एक एकल नाम का परिचय देती है जिसे पहले कहीं और घोषित किया गया था।

वाक्य - विन्यास

  • टाइपनेम ( ऑप्ट ) का उपयोग करते हुए नेस्टेड-नेम- स्पेसियर अयोग्य-आईडी ;
  • प्रयोग :: अयोग्य-आईडी ;

टिप्पणियों

एक प्रयोग-घोषणा एक प्रयोग निर्देश से अलग है, जो संकलक को किसी भी नाम को देखते समय एक विशेष नामस्थान में देखने के लिए कहता है। using namespace - using namespace साथ एक प्रयोग-निर्देश शुरू होता है।

एक का उपयोग कर-घोषणा भी एक उपनाम घोषणा है, जो के रूप में एक ही तरीके से एक मौजूदा प्रकार के लिए एक नया नाम देता है से अलग है typedef । एक उपनाम की घोषणा में एक समान चिह्न होता है।

नाम स्थान से अलग-अलग नाम आयात करना

एक बार using नाम पेश करने का प्रयोग किया जाता है cout नाम स्थान से std के दायरे में main समारोह, std::cout वस्तु के रूप में भेजा जा सकता है cout अकेले।

#include <iostream>
int main() {
    using std::cout;
    cout << "Hello, world!\n";
}

नाम छिपाने से बचने के लिए एक बेस क्लास से सदस्यों को फिर से घोषित करना

यदि कक्षा के दायरे में उपयोग-घोषणा होती है, तो इसे केवल बेस क्लास के सदस्य को फिर से भेजने की अनुमति है। उदाहरण के लिए, वर्ग गुंजाइश पर using std::cout का using std::cout की अनुमति नहीं है।

अक्सर, redeclared नाम वह होता है जिसे अन्यथा छिपाया जाता है। उदाहरण के लिए, नीचे दिए गए कोड में, d1.foo केवल Derived1::foo(const char*) को संदर्भित करता है और एक संकलन त्रुटि उत्पन्न होगी। फ़ंक्शन Base::foo(int) छिपा हुआ है जिसे बिल्कुल नहीं माना जाता है। हालाँकि, d2.foo(42) ठीक है क्योंकि उपयोग-घोषणा में Base::foo(int) को Derived2 में foo नामक संस्थाओं के सेट में Derived2 । नाम देखने से foo s और ओवरलोड रिज़ॉल्यूशन दोनों का पता चलता है Base::foo

struct Base {
    void foo(int);
};
struct Derived1 : Base {
    void foo(const char*);
};
struct Derived2 : Base {
    using Base::foo;
    void foo(const char*);
};
int main() {
    Derived1 d1;
    d1.foo(42);  // error
    Derived2 d2;
    d2.foo(42);  // OK
}

निर्माण करने वाले

सी ++ 11

एक विशेष मामले के रूप में, कक्षा के दायरे में उपयोग-घोषणा एक प्रत्यक्ष आधार वर्ग के निर्माणकर्ताओं को संदर्भित कर सकती है। उन कंस्ट्रक्टरों को तब व्युत्पन्न वर्ग द्वारा विरासत में मिला है और इसका उपयोग व्युत्पन्न वर्ग को शुरू करने के लिए किया जा सकता है।

struct Base {
    Base(int x, const char* s);
};
struct Derived1 : Base {
    Derived1(int x, const char* s) : Base(x, s) {}
};
struct Derived2 : Base {
    using Base::Base;
};
int main() {
    Derived1 d1(42, "Hello, world");
    Derived2 d2(42, "Hello, world");
}

उपरोक्त कोड में, Derived1 और Derived2 दोनों के पास ऐसे कंस्ट्रक्टर हैं जो तर्कों को सीधे Base के संबंधित कंस्ट्रक्टर के पास Derived2 हैं। Derived1 स्पष्ट रूप से अग्रेषण करता है, जबकि Derived2 , Derived2 की C ++ 11 सुविधा का उपयोग करता है, इसलिए यह निहित है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow