C++ में Reference और Type Casting की संपूर्ण जानकारी

What is reference in C++ in Hindi

C++ में एक references एक variable के उपनाम की तरह होता है जो Data को Access करने के लिए दूसरा नाम देता है।

जब आप कोई reference बनाते हैं तो आप किसी पहले से मौजूद variable को refer करने के लिए अनिवार्य रूप से दूसरा नाम बना रहे होते हैं।
यदि आप reference का उपयोग करके Data को modify करते हैं तो यह सीधे Original variable को बदल देता है 
इसी प्रकार यदि आप Original variable को Modify करते हैं तो परिवर्तन Reference के माध्यम से भी दिखाई देगा 

इसलिए एक का उपयोग करके किया गया कोई भी परिवर्तन तुरंत दूसरे में भी दिखाई देता है यह एक ही चीज के दो अलग-अलग नाम रखने जैसा है एक को बदलने से दूसरा स्वचालित रूप से बदल जाता है क्योंकि वे मूल रूप से एक ही Data से जुड़े होते हैं

Creating references in C++ in Hindi - reference का निर्माण करना

reference का निर्माण ampersand symbol(&) का Use करके किया जाता है इस symbol की मदद से आसानी से Variable को Reference की तरह पहचाना जा सकता हैं।

Syntax:
data-type& referenceName = existingVariable;

ऊपर Syntax में
data-type:
variable के Data type को निर्दिष्ट करता है
referenceName:
reference के name को निर्दिष्ट करता है

existingVariable:
उस variable को निर्दिष्ट करता है जिसके लिए reference बनाया जाता है
Example:
double sum;
double &total = sum;

ऊपर के Example में sum, Original variable है जिसका reference, total को बनाया गया है अब आप sum variable के बदले total reference का Use कर सकते हैं
 
Program to show use of  reference
#include<iostream>
using namespace std;
int main() {
       int a = 15;
       int &b = a;
    cout<<"Value of a:"<<a<<endl;
    cout<<"Value of b:"<<b<<endl;

      b= 20;
    cout<<"Value of b after changing:"<<b<<endl;
     
cout<<"Value of a after changing :"<<a<<endl;
       return 0;
}
   
Output:
Value of a:15
Value of b:15
Value of b after changing: 20
Value of a after changing : 20

Explanation:
ऊपर Program को निम्न प्रकार से समझते हैं

1) Variable को Declare करना:
int a = 15;
एक Integer variable को declare किया जाता है और उसे 15 value assign कर Initialize करते है  

2) Reference का निर्माण करना:
int &b = a; 
एक reference variable, b का निर्माण किया जाता है जो a के समान Memory location को refer करता है
यह a के लिए उपनाम का निर्माण करने के समान है 

3) Value access करना:
cout << "Value of a:" << a << endl; और cout << "Value of b:" << b << endl; 
a और b की value को print करता है जो की 15 हो जाएगा क्योंकि वे दोनों एक ही Memory location को point करते है

4) Reference केद्वारा Modify करना:
b = 20; 
b द्वारा Refer किए जा रहे Memory location को 20 value assign करते है चूकि b, a का एक reference है इसलिए यह प्रभावी रूप से a के मान को भी Modify करता है। 

5) Modify किए गए Value को Print करना:
cout << "Value of b after changing:" << b << endl; 
b की value जो कि अब 20 है, print करता है तथा 
cout << "Value of a after changing :" << a << endl; 

a की Value जो कि अभी 20 ही है, को print करता है जो reference के माध्यम से किए गए परिवर्तन को दर्शाते है 

संक्षेप में, reference पहले से मौजूद variable को Access करने और Modify करने का एक वैकल्पिक तरीका प्रदान करते हैं। 

वे Variable के Memory location के साथ Interact करने का अधिक सीधा तरीका प्रदान करते हैं।
Program to show use of  reference
#include<iostream>
using namespace std;
int main() {
       double sum;
       double &total = sum;
       sum = 50000;
    cout<<"Total: "<<total<<endl; cout<<"Sum:"<<sum<<endl;
//First change
     sum = sum+ 30000;
   cout<<"After 1st change value of total:"<<total<<endl;
    cout<<"After 1st change value of sum:"<<sum<<endl;

//Second change
 total = 0;
cout<<"After 2nd change value of total:"<<total<<endl;
    cout<<"After 2nd change value of sum:"<<sum<<endl;
     return 0;
}
Output:
Total: 50000
Sum:50000
After 1st change value of total: 80000
After 1st change value of sum:80000
After 2nd change value of total: 0
After 2nd change value of sum:0

Differences between references and pointer in Hindi

1) 
Pointer
अन्य variable के Memory address को store करते है

Reference
Reference अन्य पहले से मौजूद variable के लिए उपनाम की तरह कार्य करता है परंतु स्वयं का Address स्टोर नहीं करता 

2)
Pointer:
यह Null हो सकता है जो यह सूचित करता है कि यह कोई valid memory location को point नहीं कर रहा है

Reference
यह null नही हो सकता
इसमें किसी valid object का reference होना चाहिए 

3)
Pointer
 `*` operator का Use करके Define किया जाता है
Example int *ptr

Reference:
`&` operator का Use करके Define किया जाता है 

4) 
Pointer:
Memory location पर Value को Access करने के लिए इसे Reference की ओर point करने के लिए Dereferencing operator * की आवश्यकता होती है

Reference
इसे एक सामान्य variable की तरह सीधे ही Access किया जाता है dereferencing की आवश्यकता नही होती

5)
Pointer
पूरे Program में विभिन्न Memory locations को point करने के लिए पुन: असाइन किया जा सकता है
 
Reference
इसे Initialize करने के बाद किसी भिन्न variable को refer करने के लिए पुन: असाइन किया जा सकता है

6)
Pointer
इसका उपयोग functions को value या reference के द्वारा arugements pass करने के लिए हो सकता है

Reference
Function arguments को reference के द्वारा & operator का Use करके pass किया जा सकता है ताकि सीधे ही original variable में संशोधन किया जा सके

7)
Pointer
यह Pointer arithmetic जैसे ptr++`, `ptr + 1` को support करता है

Reference
यह Arithmetic operations को support नही करता है

Type casting/Type conversion in C++ in Hindi

C++ में Type casting एक Value को एक Data type से दूसरे मे Convert करने का Mechanism है

यह सुनिश्चित करने में मदद करता है कि विभिन्न प्रकार के Variables के बीच Operations को सही ढंग से नियंत्रित किया जाता है 

C++ में Type casting के प्रकार

Type casting के निम्न प्रकार होते है

Implicit Casting:

Implicit Casting को Automatic conversion के नाम से भी जाना जाता है Implicit Casting तब होती है जब Compiler बिना कुछ किए स्वचालित रूप से एक Variable को एक प्रकार से दूसरे प्रकार में बदल देता है। 

Implicit casting आपके Code को सरल और पढ़ने मेंआसान बनाता है क्योंकि आपको इसे Manually बदलने की आवश्यकता नही है

हालाँकि, आपको सावधान रहने की आवश्यकता है क्योंकि स्वचालित परिवर्तन कभी-कभी अप्रत्याशित परिणाम दे सकते हैं

Program for Implicit Casting from integer to double 
#include<iostream> 
using namespace std;

int main() {
 int p= 7;
float q = 3.0;
float result = p/q;

    cout << "Result of division: " << result << endl;
    return 0;
}

Output:
Result of division: 2.33333

 Explanation:
1) Variable Declare करना:
int p= 7;
float q = 3.0;
एक `int` variable `p` तथा एक `double` variable q को Declare कर दोनों को Value assign किया जाता है 

2) Division के दौरान Implicit Casting :
   - `float result = p / q;`: `p / q` expression में, एक `int` को एक `float`द्वारा Divide किया जाता है

C++, मे जब एक `int` को एक `float`से divide किया जाता है , यह सुनिश्चित करने के लिए कि Division सही ढंग से किया गया है, int को स्पष्ट रूप से `float` में बदला जाता है।

इसलिए `p` जिसकी value `7` है उसका implicitly cast `7.0f`, हो जाता है
अर्थात कुछ इस तरह का expression `7.0f / 3.0f`

Division का result एक `float` value, है जिसे `result` variable को assign किया जाता है

3) Output:
cout << "Result of division: " << result << endl;`: 
अंत मे Console में result को print किया जाता है 
Example Output:
Result of division: 2.33333

Program for Implicit Casting in Mixed-Type Expressions
#include<iostream> 
using namespace std;

int main() {
    char myLetter = 'C';  
// ASCII value of 'C' is 67
    int result = myLetter + 1;  

    cout << "Result: " << result << endl;
    return 0;
}
 
Output:
Result: 68

Explanation:
एक `char` variable `myLetter` है जिसकी Value `'C'` है (ASCII value 67) का Use एक Addition operation में किया गया है

Compiler `myLetter` में 1 जोड़ने के पहले उसे `एक `int` में implicitly convert कर देता है जिससे result `68` मिलता है

Explicit Casting

Explicit Casting में आप cast operator का उपयोग करके Compiler को एक Value को, एक Data type से दूसरे में परिवर्तित करने के लिए  Manually निर्देश देते हैं। 

इसका उपयोग करना उस समय अच्छा होता है जब आप विभिन्न Data types के साथ गणना करना चाहते हैं या आपको conversion process पर अधिक नियंत्रण की आवश्यकता होती है।

Program for Explicit Casting 
#include<iostream>
using namespace std;
         int main() {
         float myNum = 6.78;  
         int result;  
         result= int(myNum);  
         cout<<"Result: "<<result<<endl;
   return 0;
}   
Output:
Result: 6

Explaination:
ऊपर Program में floating-point variable myNum को explicitly, एक integer बदलने के लिए Compiler को निर्देशित किया गया है

Types of Explicit Casting in C++ in Hindi

C++ में Explicit casting मुख्यत: 3 प्रकार के होते हैं
जो निम्न है

1) Static Cast 
यह सबसे सामान्य प्रकार का Explicit cast है जो यह मानते हुए कि Conversion valid है, एक Compiler को सीधे ही एक Value को एक Data type से अन्य Data type में Convert करने को कहता है
 
2) Dynamic Cast 
C++ में इसका उपयोग मुख्य रूप से Object-oriented programming (OOP) में किया जाता है। यह आपको Base class object, के Pointers या References को Pointer या Derived class objects के References में सुरक्षित रूप से परिवर्तित करने की अनुमति देता है।

सरल शब्दों मे कहे तो
Dynamic Cast आपको Runtime पर Base class से Pointer या Reference को Derived class में सुरक्षित रूप से जांचने और परिवर्तित करने में मदद करता है।

3) Reinterpret Cast 
Reinterpret Cast , C++ में एक प्रकार का Casting operator जो आपको किसी भी Pointer type को किसी अन्य Pointer type में परिवर्तित करने की अनुमति देता है, भले ही प्रकार पूरी तरह से एक दूसरे से संबंधित नही है । 

reinterpret_cast को low level cast माना जाता है क्योंकि यह किसी भी प्रकार की सुरक्षा को अनदेखा करता है, यदि गलत तरीके से उपयोग किया जाता है तो reinterpret_cast गंभीर त्रुटियों का कारण बन सकता है। 

इसका उपयोग केवल तभी किया जाना चाहिए जब आप पूरी तरह से समझते हों कि आप क्या कर रहे हैं और आपको इसकी आवश्यकता क्यों है।

Advantages of Type casting in C++ in Hindi


1) Type casting, विभिन्न Data types के साथ कार्य करना आसान बनाता है 

2) यह आपको Memory को बचाने मे मदद करता है

3) Type casting आवश्यक है जबआप C++ के साथ C libraries या APIs का Use कर रहे होते हैं जो आपको C Code में अपेक्षित प्रकारों से मेल खाने के लिए Data types को परिवर्तित करने की अनुमति देता है। 

4) Object-oriented programming, में Type casting आपको Base और Derived classes के बीच Polymorphism Use करने की अनुमति देता है जो आपके Code को ज्यादा लचीला और पुन: उपयोग करने की अनुमति देता है 


5) Type casting यह सुनिश्चित करता है कि Mathematical operations जैसे Integers को float में सही ढंग से Convert किया गया है ताकि सही परिणाम प्राप्त किया जा सके
 
6)Type Casting Argument को आपेक्षित प्रकार मे convert करने के द्वारा सही Overloaded function चुनने में मदद करता है
 
7) जब आप Hardware के साथ कार्य करते हुए Type casting आपको Raw Data के साथ सही तरीके से interpret करने की अनुमति देता है  

8) जहां असुरक्षित Type casts, risky, है वहीं C++ सुरक्षित Type cast जैसे `static_cast` और `dynamic_cast` offer करता है जो Compile time या Runtime पर Type की शुद्धता सुनिश्चित करने में मदद करता है। 

 Related Posts

> C++ क्या है? उसके इतिहास, गुण, उपयोग, फायदे और नुकसान 

> Basic structure of C++ Program 

> C++ में Tokens क्या है? और उसके प्रकार

> C++ Variables क्या है?, उसके प्रकार, उसे कैसे Declare, Define करते हैं

> C++ में Constants क्या है? उसके प्रकारों की संपूर्ण जानकारी

> C++ में Basic Input और Output (cin,cout,cerr) की जानकारी

> Data type in C++ की संपूर्ण जानकारी 

> C+ में Operators और उसके प्रकार जानें Practical सहित 

> C++ में Conditional और उसके प्रकारों को जानें Practical सहित 

> C++ में Looping statements और उसके प्रकार Practical सहित 

> C++ में Jump Statements और उसके प्रकारों की संपूर्ण जानकारी Practical सहित

> C++ में Array क्या है? और उसके प्रकारों की जानकारी Practical सहित

> C++ में Function क्या है उसके प्रकार, उपयोग प्रोग्राम सहित 

> C++ में Structure क्या है Practical सहित

> OOPs Concepts in C++ in Hindi- C++ में OOPs के बारे में

> Oops के फायदे और नुकसान की जानकारी 

> OOP और POP के बीच अंतर 

> C++ में Class और Object की सम्पूर्ण जनकारी

> C++ में Array of Objects क्या है? 

> C++ में Pointers, Pointer to an objects, Pointer to an Array की संपूर्ण जानकारी हिंदी में।

C++ में Passing objects क्या है

> C++ में Access specifier की संपूर्ण जानकारी 

> C++ में Static Data Members और Member Functions के बारे में Practical सहित 

> C++ में Memory allocation और Memory management operators (new और delete) Practical सहित 

> Friend Function in C++ in Hindi 

> Friend Class in C++ in Hindi Practical सहित 

> Inline function in C++ in Hindi 

> Function Overloading in C++ in Hindi Practical सहित 

> Operator Overloading in C++ in Hindi Practical सहित 

> C++ में Constructor क्या है और उसके प्रकारों की संपूर्ण जानकारी

> C++ में Destructor क्या है ?उसकी संपूर्ण जानकारी

> C++ मे Inheritance क्या है उसके प्रकारों को जानें प्रोग्राम सहित

> C++ में Polymorphism क्या है? और उसके प्रकारों को जानें

> C++ में Virtual function की संपूर्ण जानकारी

> C++ में File handling की संपूर्ण जानकारी 

> C++ में Exception handling  की संपूर्ण जानकारी