यह वास्तव में इस बात पर निर्भर करता है कि कॉल के बाईं ओर या दाएं हाथ की तरफ operator==
(या अन्य ऑपरेटर) पर जा रहा है या नहीं। यदि एक वर्ग अभिव्यक्ति के दायीं तरफ होने वाला है- और एक प्रकार के लिए एक अंतर्निहित रूपांतरण प्रदान नहीं करता है जिसे बाएं हाथ की तुलना में तुलना की जा सकती है- आपको operator==
को एक अलग कार्य के रूप में या एक के रूप में लागू करने की आवश्यकता है कक्षा के friend
। यदि ऑपरेटर को निजी कक्षा डेटा तक पहुंचने की आवश्यकता है, तो को friend
के रूप में घोषित किया जाना चाहिए।
उदाहरण के लिए,
class Message {
std::string content;
public:
Message(const std::string& str);
bool operator==(const std::string& rhs) const;
};
आप
Message message("Test");
std::string msg("Test");
if (message == msg) {
// do stuff...
}
नहीं बल्कि दूसरी तरह के आसपास
if (msg == message) { // this won't compile
आप एक दोस्त की घोषणा करने की जरूरत है एक स्ट्रिंग के लिए एक संदेश की तुलना कर सकते operator==
कक्षा
012 के अंदर अगर वे अकेले वर्ग डेटा का उपयोग नहीं करता है
class Message {
std::string content;
public:
Message(const std::string& str);
bool operator==(const std::string& rhs) const;
friend bool operator==(const std::string& lhs, const Message& rhs);
};
या उचित प्रकार
class Message {
std::string content;
public:
Message(const std::string& str);
bool operator==(const std::string& rhs) const;
operator std::string() const;
};
या एक अलग समारोह की घोषणा है, जो एक दोस्त होने की जरूरत नहीं है के लिए एक अंतर्निहित रूपांतरण ऑपरेटर की घोषणा
bool operator==(const std::string& lhs, const Message& rhs);
स्रोत
2011-06-06 17:40:40
गैर-सदस्य कार्य जिन्हें निजी वर्ग के सदस्यों तक पहुंच की आवश्यकता है, वे मित्र बनने की आवश्यकता है। – AJG85
@ AJG85: सच है, लेकिन मुझे लगता है कि प्रश्न कब सदस्यों को चुनना है, और जब गैर-सदस्यों को चुनना है (यदि आवश्यक हो तो उन्हें दोस्त बनाना)। –
हम यह थोड़ा सा व्यक्तिपरक होगा लेकिन मैं स्कॉट मेयर्स सलाह का पालन करता हूं और जब संभव हो तो गैर-सदस्य गैर-मित्र कार्यों को प्राथमिकता देने का प्रयास करता हूं। मैं ज्यादातर मामलों में एक दोस्त पर एक सदस्य समारोह पसंद करेंगे। किसी मित्र फ़ंक्शन के लिए सबसे अच्छा मामला शायद उस मामले में है जहां आप एक सार्वजनिक इंटरफ़ेस चाहते हैं जिसमें बाएं हाथ की निहित प्रचार हो। – AJG85