Introduction
Operator Overloading C++ का एक शक्तिशाली feature है, लेकिन इसे पूरी तरह स्वतंत्र रूप से उपयोग नहीं किया जा सकता। Program की consistency और readability बनाए रखने के लिए C++ में कुछ नियम और सीमाएँ (restrictions) निर्धारित की गई हैं।
इन restrictions का उद्देश्य यह सुनिश्चित करना है कि operator overloading का उपयोग logical और नियंत्रित तरीके से हो, ताकि program का behavior predictable बना रहे।
Definition
Restrictions on Operator Overloading वे नियम हैं जो यह निर्धारित करते हैं कि किन परिस्थितियों में और किस प्रकार operators को overload किया जा सकता है।
मुख्य Restrictions
1. केवल Existing Operators को ही Overload किया जा सकता है
C++ में नए operators बनाए नहीं जा सकते, केवल पहले से मौजूद operators को ही redefine किया जा सकता है।
उदाहरण:
-
+,-,*→ overload कर सकते हैं -
$,#→ नए operator नहीं बना सकते
2. Operator की Priority और Associativity नहीं बदली जा सकती
Operator की precedence (priority) और associativity वही रहती है, चाहे उसे overload किया जाए या नहीं।
उदाहरण:
a + b * c→ पहले*ही execute होगा
3. Operator के Operands की संख्या नहीं बदली जा सकती
Unary operator unary ही रहेगा और binary operator binary ही रहेगा।
उदाहरण:
++→ केवल एक operand+→ केवल दो operands
4. कुछ Operators Overload नहीं किए जा सकते
कुछ operators को C++ में overload करने की अनुमति नहीं है।
उदाहरण:
::(scope resolution).(member access).*(pointer to member)?:(ternary operator)sizeof
5. कम से कम एक Operand User-defined Type होना चाहिए
Operator overloading तभी संभव है जब कम से कम एक operand class (object) का हो।
उदाहरण:
-
object + object -
int + int(already built-in)
6. Operator Function के रूप में ही Implement होता है
Operator overloading हमेशा function के माध्यम से किया जाता है, चाहे वह member function हो या friend function।
7. Default Behavior पूरी तरह replace नहीं होता
Operator का original behavior completely हटाया नहीं जाता, बल्कि user-defined types के लिए नया behavior define किया जाता है।
Example (Valid Overloading)
#include <iostream>
using namespace std;
class Number {
public:
int value;
Number(int v) {
value = v;
}
Number operator+(Number n) {
return Number(value + n.value);
}
};
int main() {
Number n1(5), n2(10);
Number n3 = n1 + n2;
cout << n3.value;
return 0;
}
Output:
15
Invalid Case Example
int main() {
int a = 5, b = 10;
// a + b को redefine नहीं कर सकते
}
Summary of Restrictions
- नए operators नहीं बनाए जा सकते
- precedence और associativity नहीं बदलती
- operands की संख्या fix रहती है
- कुछ operators overload नहीं होते
- user-defined type जरूरी है
निष्कर्ष
Operator overloading में flexibility होने के बावजूद कुछ निश्चित restrictions लागू होती हैं, जो program को predictable और consistent बनाए रखती हैं। इन नियमों का पालन करना सही और प्रभावी programming के लिए आवश्यक है।