C++ में, हम फ़ंक्शन ओवरलोडिंग का उपयोग कर सकते हैं। अब सवाल यह आता है कि क्या हम main() फ़ंक्शन को भी ओवरलोड कर सकते हैं?
आइए एक प्रोग्राम देखें ताकि विचार मिल सके।
उदाहरण: main() ओवरलोड करने का प्रयास
#include <iostream>
using namespace std;
int main(int x) {
cout << "x का मान: " << x << "\n";
return 0;
}
int main(char *y) {
cout << "स्ट्रिंग y का मान: " << y << "\n";
return 0;
}
int main(int x, int y) {
cout << "x और y का मान: " << x << ", " << y << "\n";
return 0;
}
int main() {
main(10);
main("Hello");
main(15, 25);
return 0;
}
आउटपुट
यह कुछ त्रुटियां उत्पन्न करेगा। यह कहेगा कि main() फ़ंक्शन की घोषणा में कुछ विरोधाभास (conflict) है।
कारण: C++ मानक के अनुसार, main() फ़ंक्शन को ओवरलोड नहीं किया जा सकता। प्रोग्राम का प्रवेश बिंदु (entry point) केवल एक होना चाहिए, और इसकी सिग्नेचर निश्चित होनी चाहिए:
int main()int main(int argc, char* argv[])याint main(int argc, char** argv)
समाधान: main को क्लास मेंबर के रूप में उपयोग करें
इस प्रतिबंध को दूर करने के लिए, हम उन्हें क्लास मेंबर के रूप में उपयोग कर सकते हैं। C++ में main C की तरह प्रतिबंधित कीवर्ड नहीं है।
उदाहरण
#include <iostream>
using namespace std;
class my_class {
public:
int main(int x) {
cout << "x का मान: " << x << "\n";
return 0;
}
int main(char *y) {
cout << "स्ट्रिंग y का मान: " << y << "\n";
return 0;
}
int main(int x, int y) {
cout << "x और y का मान: " << x << ", " << y << "\n";
return 0;
}
};
int main() {
my_class obj;
obj.main(10);
obj.main("Hello");
obj.main(15, 25);
return 0;
}
आउटपुट
x का मान: 10 स्ट्रिंग y का मान: Hello x और y का मान: 15, 25
मुख्य बिंदु
- ग्लोबल
main()को ओवरलोड नहीं किया जा सकता - यह प्रोग्राम एंट्री पॉइंट है। mainC++ में रिज़र्व्ड कीवर्ड नहीं है (C के विपरीत), इसलिए इसे क्लास मेंबर, नेमस्पेस फ़ंक्शन आदि के रूप में उपयोग किया जा सकता है।- कमांड-लाइन आर्गुमेंट्स के लिए, मानक
int main(int argc, char* argv[])सिग्नेचर का उपयोग करें। - यदि एकाधिक एंट्री पॉइंट्स की आवश्यकता है, तो अलग-अलग नामों वाले फ़ंक्शन्स का उपयोग करें और उन्हें main से कॉल करें।