यहां हम देखेंगे कि C++ में स्पष्ट कीवर्ड का क्या प्रभाव होगा। उस पर चर्चा करने से पहले, आइए एक उदाहरण कोड देखें, और उसका आउटपुट जानने का प्रयास करें।
उदाहरण
#include <iostream> using namespace std; class Point { private: double x, y; public: Point(double a = 0.0, double b = 0.0) : x(a), y(b) { //constructor } bool operator==(Point p2) { if(p2.x == this->x && p2.y == this->y) return true; return false; } }; int main() { Point p(5, 0); if(p == 5) cout << "They are same"; else cout << "They are not same"; }
आउटपुट
They are same
यह ठीक काम कर रहा है क्योंकि हम जानते हैं कि यदि एक कंस्ट्रक्टर को केवल एक तर्क का उपयोग करके बुलाया जा सकता है, तो उसे रूपांतरण कंस्ट्रक्टर में बदल दिया जाएगा। लेकिन हम इस प्रकार के रूपांतरण से बच सकते हैं, क्योंकि इससे कुछ अविश्वसनीय परिणाम उत्पन्न हो सकते हैं।
इस रूपांतरण को प्रतिबंधित करने के लिए, हम कंस्ट्रक्टर के साथ स्पष्ट संशोधक का उपयोग कर सकते हैं। उस स्थिति में, इसे परिवर्तित नहीं किया जाएगा। यदि उपरोक्त प्रोग्राम का उपयोग स्पष्ट कीवर्ड का उपयोग करके किया जाता है, तो यह संकलन त्रुटि उत्पन्न करेगा।
उदाहरण
#include <iostream> using namespace std; class Point { private: double x, y; public: explicit Point(double a = 0.0, double b = 0.0) : x(a), y(b) { //constructor } bool operator==(Point p2) { if(p2.x == this->x && p2.y == this->y) return true; return false; } }; int main() { Point p(5, 0); if(p == 5) cout << "They are same"; else cout << "They are not same"; }
आउटपुट
[Error] no match for 'operator==' (operand types are 'Point' and 'int') [Note] candidates are: [Note] bool Point::operator==(Point)
हम अभी भी स्पष्ट कास्टिंग का उपयोग करके बिंदु प्रकार के लिए एक मान टाइपकास्ट कर सकते हैं।
उदाहरण
#include <iostream> using namespace std; class Point { private: double x, y; public: explicit Point(double a = 0.0, double b = 0.0) : x(a), y(b) { //constructor } bool operator==(Point p2) { if(p2.x == this->x && p2.y == this->y) return true; return false; } }; int main() { Point p(5, 0); if(p == (Point)5) cout << "They are same"; else cout << "They are not same"; }
आउटपुट
They are same