C++
घोषणा का उपयोग करना
खोज…
परिचय
एक 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
}
निर्माण करने वाले
एक विशेष मामले के रूप में, कक्षा के दायरे में उपयोग-घोषणा एक प्रत्यक्ष आधार वर्ग के निर्माणकर्ताओं को संदर्भित कर सकती है। उन कंस्ट्रक्टरों को तब व्युत्पन्न वर्ग द्वारा विरासत में मिला है और इसका उपयोग व्युत्पन्न वर्ग को शुरू करने के लिए किया जा सकता है।
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 सुविधा का उपयोग करता है, इसलिए यह निहित है।