What is C++ Language References
C++ References - सी ++ संदर्भ
What is C++ Language References
अब तक, हमने पढ़ा है कि C++ दो प्रकार के वेरिएबल्स का समर्थन करता है:
एक साधारण चर एक चर है जिसमें किसी प्रकार का मान होता है। उदाहरण के लिए, हम int प्रकार का एक चर बनाते हैं, जिसका अर्थ है कि चर प्रकार पूर्णांक का मान धारण कर सकता है।
पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल के एड्रेस को स्टोर करता है। यह सूचक जिस मान को इंगित करता है उसे पुनर्प्राप्त करने के लिए इसे संदर्भित किया जा सकता है।
एक और चर है जो सी ++ का समर्थन करता है, यानी संदर्भ। यह एक चर है जो दूसरे चर के लिए उपनाम के रूप में व्यवहार करता है।
How to create a reference -कैसे एक संदर्भ बनाने के लिए ?
एम्परसेंड (&) ऑपरेटर का उपयोग करके संदर्भ बनाया जा सकता है। जब हम एक Variable बनाते हैं, तो यह कुछ मेमोरी स्थान लेता है। हम चर का एक संदर्भ बना सकते हैं; इसलिए, हम चर या संदर्भ के नाम का उपयोग करके मूल चर तक पहुँच सकते हैं। उदाहरण के लिए,
int a=10;
अब, हम उपरोक्त वेरिएबल का रेफरेंस वेरिएबल बनाते हैं।
int &ref=a;
उपरोक्त कथन का अर्थ है कि 'रेफरी' 'ए' का एक रेफरेंस वेरिएबल है, यानी हम 'ए' वेरिएबल के स्थान पर 'रेफरी' वेरिएबल का उपयोग कर सकते हैं।
C++ provides two types of references: C++ दो प्रकार के संदर्भ प्रदान करता है
- गैर-स्थिरांक मानों के संदर्भ
- उपनाम के रूप में संदर्भ
गैर-स्थिरांक मानों के संदर्भ
इसे रेफरेंस टाइप वेरिएबल के साथ & ऑपरेटर का उपयोग करके घोषित किया जा सकता है।
#include <iostream>
using namespace std;
int main()
{
int a=10;
int &value=a;
std::cout << value << std::endl;
return 0;
}
Output:-
10
उपनाम के रूप में संदर्भ
उपनाम के रूप में सन्दर्भ चर का दूसरा नाम है जिसे संदर्भित किया जा रहा है।
उदाहरण के लिए,
int a=10; // 'a' is a variable.
int &b=a; // 'b' reference to a.
int &c=a; // 'c' reference to a.
आइए एक साधारण उदाहरण देखें।
#include <iostream>
using namespace std;
int main()
{
int a=70; // variable initialization
int &b=a;
int &c=a;
std::cout << "Value of a is :" <<a<< std::endl;
std::cout << "Value of b is :" <<b<< std::endl;
std::cout << "Value of c is :" <<c<< std::endl;
return 0;}
उपरोक्त कोड में, हम एक वेरिएबल 'a' बनाते हैं जिसमें '70' मान होता है। हमने दो संदर्भ चर घोषित किए हैं, यानी, बी और सी, और दोनों एक ही चर 'ए' का जिक्र कर रहे हैं। इसलिए, हम कह सकते हैं कि 'a' वेरिएबल को 'b' और 'c' वेरिएबल द्वारा एक्सेस किया जा सकता है।
Output:-
Value of a is :70
Value of b is :70
Value of c is :70
संदर्भ के गुण
संदर्भ के गुण निम्नलिखित हैं:
प्रारंभ
घोषणा के समय इसे प्रारंभ किया जाना चाहिए।
#include <iostream>
using namespace std;
int main()
{
int a=10; // variable initialization
int &b=a; // b reference to a
std::cout << "value of a is " <<b<< std::endl;
return 0;
}
उपरोक्त कोड में, हमने एक रेफरेंस वेरिएबल बनाया है, यानी 'बी'। घोषणा के समय, 'ए' चर 'बी' को सौंपा गया है। यदि हम घोषणा के समय असाइन नहीं करते हैं, तो कोड ऐसा दिखाई देगा:
int &b;
&b=a;
उपरोक्त कोड संकलन-समय त्रुटि फेंक देगा क्योंकि घोषणा के समय 'ए' असाइन नहीं किया गया है।
Output:-
value of a is 10
रीअसाइनमेंट
इसे पुन: असाइन नहीं किया जा सकता है जिसका अर्थ है कि संदर्भ चर को संशोधित नहीं किया जा सकता है।
#include <iostream>
using namespace std;
int main()
{
int x=11; // variable initialization
int z=67;
int &y=x; // y reference to x
int &y=z; // y reference to z, but throws a compile-time error.
return 0;}
उपरोक्त कोड में, 'y' संदर्भ चर 'x' चर का जिक्र कर रहा है, और फिर 'z' को 'y' को असाइन किया गया है। लेकिन यह पुनर्मूल्यांकन संदर्भ चर के साथ संभव नहीं है, इसलिए यह एक संकलन-समय त्रुटि फेंकता है।
संकलन-समय त्रुटि
main.cpp: In function 'int main()':
main.cpp:18:9: error: redeclaration of 'int& y'
int &y=z; // y reference to z, but throws a compile-time error.
^
main.cpp:17:9: note: 'int& y' previously declared here
int &y=x; // y reference to x
^
फंक्शन पैरामीटर्स
संदर्भों को फ़ंक्शन पैरामीटर के रूप में भी पारित किया जा सकता है। यह तर्क की प्रतिलिपि नहीं बनाता है और पैरामीटर के लिए उपनाम के रूप में व्यवहार करता है। यह प्रदर्शन को बढ़ाता है क्योंकि यह तर्क की प्रतिलिपि नहीं बनाता है।
आइए एक सरल उदाहरण के माध्यम से समझते हैं।
#include <iostream>
using namespace std;
int main()
{
int a=9; // variable initialization
int b=10; // variable initialization
swap(a, b); // function calling
std::cout << "value of a is :" <<a<< std::endl;
std::cout << "value of b is :" <<b<< std::endl;
return 0;
}
void swap(int &p, int &q) // function definition
{
int temp; // variable declaration
temp=p;
p=q;
q=temp;
}
उपरोक्त कोड में, हम 'a' और 'b' के मानों की अदला-बदली कर रहे हैं। हमने स्वैप () फ़ंक्शन में वेरिएबल्स 'ए' और 'बी' को पास कर दिया है। स्वैप () फ़ंक्शन में, 'पी' 'ए' का जिक्र कर रहा है और 'क्यू' 'बी' का जिक्र कर रहा है। जब हम 'p' और 'q' के मानों की अदला-बदली करते हैं, तो इसका अर्थ है कि 'a' और 'b' के मानों की भी अदला-बदली होती है।
Output:-
value of a is :10
value of b is :9
संदर्भों की मदद से हम नेस्टेड डेटा तक आसानी से पहुँच सकते हैं।
#include <iostream>
using namespace std;
struct profile
{
int id;
};
struct employee
{
profile p;
};
int main()
{
employee e;
int &ref=e.p.id;
ref=34;
std::cout << e.p.id << std::endl;
}
उपरोक्त कोड में, हम कर्मचारी की प्रोफ़ाइल संरचना की 'आईडी' तक पहुँचने का प्रयास कर रहे हैं। हम आम तौर पर e.p.id कथन का उपयोग करके इस सदस्य तक पहुँचते हैं, लेकिन यह एक कठिन कार्य होगा यदि हमारे पास इस सदस्य की एकाधिक पहुँच है। इस स्थिति से बचने के लिए, हम एक रेफरेंस वेरिएबल बनाते हैं, यानी रेफ, जो 'e.p.id' का दूसरा नाम है।
Output:-
34