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

What is operator overloading in C++ in Hindi 

C++ में Operator overloading, +, -, *, / जैसे Operators को Custom Data types जैसे Classes के साथ ज्यादा प्राकृतिक तरीके के साथ कार्य करने का एक तरीका है।
सरल शब्दों में कहें तो Operators जैसे +, -, *, / सामान्य रूप से, केवल Numbers के साथ कार्य करता है परंतु Operator overloading को आप, अपने स्वयं के Custom Data types(Classes) के साथ काम करवा सकते हैं।

यह Code को पढ़ना और समझना आसान बना देता है।
यह Developers को Custom Data type के साथ कार्य करने की अनुमति देता है

Definition of Operator overloading in C++ in Hindi

"Operator overloading एक ऐसी प्रक्रिया है जो एक Data type के लिए C++ Operator को एक अतिरिक्त अर्थ प्रदान करती है"

Why Operator overloading is required in C++ in Hindi - Operator overloading की जरुरत क्यों है?


Operator overloading की जरुरत है क्योंकि यह Custom objects के साथ कार्य करना आसान और सहज बनाता है।

इन Objects पर कोई Operations perform करने के लिए लंबे और जटिल Functions calls का Use करने के बदले आप Simple Operators जैसे +, -, और == का उपयोग कर सकते हैं।

यह आपके Code को छोटा और समझने में आसान बनाता है, ठीक उसी तरह जब आप इन Operators का उपयोग Numbers या Strings के साथ करते हैं।
उदाहरण के लिए आपके पास दो Complex number के लिए एक Class है, तब आप Overload + operator, का Use करके उन दोनो Complex numbers को उसी तरह Add कर सकते हैं जिस तरह आप Regular number के साथ करते हैं, जो आपके Code को ज्यादा प्राकृतिक और संगत बनाने में मदद करता है।

Rules of Operator overloading in Hindi - C++ में Operator overloading के नियम 

1) आप new operators, नहीं बना सकते केवल आपको पहले से मौजूद Operator को Redefine करना होता है।

2) आप केवल Built in types के लिए ही Operator को Overload नहीं कर सकते

3) कुछ Operator जैसे "sizeof" . (dot), :: (scope), और ?: (ternary) को Overload नहीं कर सकते हैं।

4) Unary operators (जैसे -)  एक Class के अंदर और बाहर change हो सकतें है लेकिन Binary operators (जैसे +), केवल एक Class के बाहर  ही Change हो सकते हैं। 

5) Unary operators (जैसे - या ++) एक Object के साथ कार्य करते है और Binary operators (जैसे + या ==) दो Objects के साथ कार्य करते है आप इनकी संख्या को बदल नही सकते है।

6) Overloaded operators को एक Class के Member functions या Friend functions की तरह Define कर सकते हैं।

7) जिस Order में Operators का मूल्यांकन किया जाता है उसे बदला नहीं जा सकता।

8) Overloaded operators को अभी भी Normal Syntax rules का पालन करना चाहिए, जिससे उनका उपयोग सहज हो सके।

9) चीजों को उस समय बदलने से रोकने के लिए जब उन्हें नहीं बदलना चाहिए, "const" का सही ढंग से उपयोग करें।

Operator overloading के Syntax 

Syntax:
    return-type operator symbol(parameters list) {
         //function body 
  }

ऊपर Syntax में return-type, function का return type हैं, operator एक keyword है, symbol, वह operator (+,_,*,<,++,-- आदि) है जिसे हम Overload करना चाहते है तथा parameters list, function द्वारा Use होने वाला Parameters है 

Types of Operator overloading in C++ in Hindi

C++ में Operator overloading को मुख्यत: निम्न भागो में बांटा जा सकता है।
@@@@@@@
1)  Unary Operators overloading
2)  Binary operators overloading

Unary Operators overloading

ऐसा Operator जो Mathematical operations को perform करने के लिए एक Operand को रखता है unary Operators कहलाता है तथा ऐसे Operators की Overloading Unary Operators overloading कहलाती है।

Unary ऑपरेटर्स के निम्न उदाहरण है
1) Increment(++) और Decrement(--)Operator
2) Unary minus operator(-)
3) Logical not operator(!)
4) Address of(&) आदि 

Unary operator को जब एक Member functions की तरह Declare किया जाता है तब यह कोई Arguments नही लेता तथा जब इसे एक Global function के रूप में Declare किया जाता है तब यह एक Argument लेता है।

Syntax of Unary Operators overloading

Syntax:
return_type class class_name::operator symbol () {
    // Operator body
}
Program Unary operator overloading
#include<iostream> 
using namespace std;
class myDemo {
    int x, y;
public:
    void getData(int a, int b) {
        x = a;
        y = b;
    }
       void displayData()
       void operator++();
};
void myDemo::displayData() {
    cout << "X = " << x << endl;
    cout << "Y = " << y << endl;
}
void myDemo::operator++() {
    x = ++x;
    y = ++y;
}
int main() {
      myDemo obj;
    obj.getData(20, 30);
    obj.displayData();    
        ++obj;
       obj.displayData();
        ++obj;
    obj.displayData();
    return 0;
}
Output:
X = 20
Y = 30
X = 21
Y = 31
X = 22
Y = 32

Explaination:
1) `myDemo` class के पास दो Private integer members, `x` और `y` है।

2) `getData` function, `x` और `y` के लिए Value set करता है।

3)`displayData` function x` और `y` की Values को Print करता है।

4)`operator++()` function `x` और`y` में 1 Increment करने के लिए `++` operator को overload करता है।

5) `main()`, myDemo` class का एक object बनाया जाता है और उसे getData का Use करके 20 और 30 Values के साथ Initialize किया जाता है।

6) `displayData` के Use करके Initial Value को Display किया जाता है।

7) `++obj` statement `x` और `y` में 1 Increment करता है।

8) प्रत्येक Increment के बाद update values को Display किया जाता है।

Program Unary operator overloading by using friend function
#include<iostream> 
using namespace std;
class myScore{
    int score;
public:
    void getScore(int s) {
        score= s;
    }
    void displayScore();
    // Declare friend function for operator overloading
    friend void operator++(myScore &obj);
};
void myScore::displayScore() {
    cout << "Score = " << score<< endl;
}
// Define the friend function for operator overloading
void operator++(myScore &obj) {
    obj.score = ++obj.score;
}
int main() {
    myScore obj;
    obj.getScore(90);
    // Score before operator overloading 
    obj.displayScore();
    ++obj;
    // Score after 1st time operator overloading 
    obj.displayScore();
    ++obj;
    // Score after 2nd time operator overloading 
    obj.displayScore();
    return 0;
}
Output:
Score = 90
Score = 91
Score = 92

Explaination:
1) Class को Define करना: 
 `myScore` class के पास एक Private integer member `score` और Public methods `getScore`और `displayScore` हैं जो क्रमश: Score को Set तथा Display करेगा।

2) Friend Function को Declare करना: 
Class, के अंदर एक friend function `operator++` नाम से Declare किया जाता है।

यह function को Private member `score` को Access तथा Modify करने की अनुमति देता है।

3) Display Function:
 `displayScore` method, 'score' की Current value को Print करता है।

4) Friend Function को Class के बाहर Define करना: 
Class, के बाहर friend function `operator++` को Define किया जाता है।
यह function `myScore` object के `score` को increment करता है।

5) Main Function: 
 `main` function, में `myScore` का एक object(obj) का निर्माण किया जाता है, इसके Score को 90 Set किया जाता है और score को प्रदर्शित किया जाता है।

`++` operator का Use score को increment के लिए दो बार किया जाता है तथा Update हो रहे score को प्रत्येक Increment के बाद प्रदर्शित किया जाता है।

Binary operators overloading 

ऐसा Operator जो दो Operands को रखते है Binary Operator कहलाते है तथा ऐसे Operator की Overloading Binary operator कहलाती है।

C++ में Binary operator overloading, User defined data types जैसे classes, structures के साथ कार्य करते समय आपको Binary operators के व्यवहार को redefine करने की अनुमति देता है।

Binary operator overloading आपको Operators जैसे +, -, *, /, ==, !=, <, > आदि को स्वयं के Data types के साथ उपयोग करने में सक्षम बनाता है।

Program for Binary Operator overloading
#include<iostream> 
using namespace std;
class Demo{
    int num;
public:
    Demo(int n) {
        num= n;
    }
    // Overload the + operator
    Demo operator+( Demo d2) {
        return Demo(num+ d2.num);
    }
    void displayData() {
        cout << "Number: " << num<< endl;
    }
};
int main() {
    Demo d1 (10);
    Demo d2 (20);
    // Display initial values
    d1.displayData();
    d2.displayData();
    // Use overloaded + operator
    Demo d3 = d1 + d2;
    d3.displayData();
    return 0;
}
Output:
Number: 10
Number: 20
Number: 30

Explanation:
1) Class को Define करना:
class Demo{
    int num;
public:
    Demo(int n) {
        num= n;
    }
  `Demo` class के पास एक Private integer member `num ` नाम से है और उसे Initialize करने के लिए एक Constructor, अर्थात Demo(int n)  है।

2) Operator Overloading: 
Demo operator+( Demo d2) {
        return Demo(num+ d2.num);
    }
Demo class के दो Objects की num Values को Add करने के लिए `operator+` function को Define किया जाता है।
ऊपर के Statement को निम्न भागों में बांटते है

1) Function Header: 
 Demo operator+(Demo d2)

a) `operator+` function का Use यह Define करने में किया जाता है कि जब `+` operator का Use 'Demo' class के दो Objects(d1, d2) के साथ किया जाएगा तो यह कैसे कार्य करेगा। 

b) Parameter `d2`:
   (Demo d2)
 Function एक argument, `d2`, लेता है जो Demo class का अन्य object है यह Addition में Right side के operand को represent करता है।

2) Function की Body:
   return Demo (num + d2.num)

a) `num` को Access करना: 
`num', Current object का एक Private member variable है जो एक integer value(10) को रखता है।

b) `d2.num` को Access करना: 
चुकि `d2`, `Demo` class का एक object है जिसे एक Argument, `d2.num` की तरह Pass किया जाता है ताकि ' d2' की ' num' की value(20) को Access किया जा सके।

c) Values को Add करना:
Expression `num + d2.num` Current object के `num` value(10) को d2 object के 'num', value (20) के साथ Add करता है।

d) `Demo` Object का निर्माण करना: `Demo (num+ d2.num)` 
Demo class के Constructor का Use करके एक नए `Demo` object का निर्माण किया जाता है।
यह नया Object, दोनो Objects के 'num' Values के Sum के साथ Initialize किया जाता है 

e) नए Object को return करना:
नए बनाएं गए ' Demo' object को function से return किया जाता है।

3) Display function का Use करना:  
void displayData() {
        cout << "Number: " << num<< endl;
    }
`display` function 'num' की Value को Print करता है।

4) Main Function
int main() {
    Demo d1 (10);
    Demo d2 (20);

    // Display initial values
    d1.displayData();
    d2.displayData();
    // Use overloaded + operator
    Demo d3 = d1 + d2;
    d3.displayData();
    return 0;
}
`main`, में दो `Demo` objects (`d1` और `d 2`) को Initial values(10 तथा  20) के साथ बनाया गया है तथा उनकी Values को displayData(); के द्वारा प्रदर्शित किया जाता है।

Overloaded `+` operator का Use `d1` और `d2`, की Values (10, 20)को Add करने तथा Result को `d3` में Store करने के लिए किया जाता है उसके बाद `d3` को Value(30) को प्रदर्शित किया जाता है। 

Operator जो Overloaded नही हो सकते

1) Size of operator(sizeof)
2) Conditional or Ternary Operator(?:)
3) Scope Resolution Operator (::)
4) Class member selector Operator(.)
5) Member Pointer Selector Operator (.*)
6) Object type Operator(typeid)

Advantages of operators overloading in C++ in Hindi

C++ में operator overloading के निम्न फायदे हैं

1) Operator overloading, code को पढ़ने और समझना आसान बनाते हैं।

2) Operators overloading , Custom data types के साथ कार्य करना आसान बनाते हैं जैसे कि आप built-in types के साथ कार्य करते है।

3) यह ज्यादा Expressive code लिखने में मदद करते हैं जिससे Code क्या करता है यह स्पष्ट हो जाता है।

4) Overloaded operators, Code को दिखने में ज्यादा प्राकृतिक और पढ़ने में आसान बनाता है।

5) आप Overloaded operators को अपने प्रोग्राम के विभिन्न भागों में Use कर सकते हैं, जो आपको उसी Code को फिर से लिखने की जरूरत को कम कर देता है।
 
6) Class के अंदर operators कैसे कार्य करता है इसके logic को छुपा दिया जाता है अतः Users को इसके विवरण को जानने की जरूरत नहीं है।

7) किसी Operator के काम करने के तरीके में बदलाव एक ही स्थान पर किया जा सकता है, जिससे Code को बनाए रखना आसान हो जाता है।

8) Operator overloading अतिरिक्त function call की जरूरत को कम करता है जो Code को सरल बना देता है।

 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++ में Reference और Type Casting की संपूर्ण जानकारी

> 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 सहित 

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

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

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

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

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

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

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