मेयर्स ने अपनी पुस्तक इफेक्टिव सी ++ में उल्लेख किया है कि कुछ परिदृश्यों में गैर-सदस्य गैर-मित्र कार्य सदस्य कार्यों की तुलना में बेहतर encapsulated हैं।मुझे सदस्यों के कार्यों के लिए गैर-सदस्य गैर-मित्र कार्यों को कब प्राथमिकता देना चाहिए?
उदाहरण:
// Web browser allows to clear something
class WebBrowser {
public:
...
void clearCache();
void clearHistory();
void removeCookies();
...
};
कई प्रयोक्ताओं, तो WebBrowser
भी एक समारोह पेश कर सकती है क्या करने के लिए इन सभी कार्यों को एक साथ प्रदर्शन करना चाहते हैं सिर्फ इतना है कि:
class WebBrowser {
public:
...
void clearEverything(); // calls clearCache, clearHistory, removeCookies
...
};
दूसरी तरह के एक परिभाषित करने के लिए है गैर-सदस्य गैर-मित्र समारोह।
void clearBrowser(WebBrowser& wb)
{
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
}
गैर सदस्य समारोह इस प्रकार बेहतर कैप्सूलीकरण के लिए अग्रणी है क्योंकि "यह काम करता है उस वर्ग के गुप्तांगों उपयोग कर सकते हैं की संख्या में वृद्धि नहीं करता है।" बेहतर है,।
कार्य clearBrowser
तरह सुविधा कार्यों क्योंकि वे एक WebBrowser
ग्राहक पहले से ही किसी अन्य तरीके से नहीं मिल सकता है किसी भी कार्यक्षमता प्रदान नहीं कर सकते हैं। उदाहरण के लिए, यदि clearBrowser
मौजूद नहीं था, तो ग्राहक clearCache
, clearHistory
, और removeCookies
स्वयं को कॉल कर सकते थे।
मेरे लिए, सुविधा फ़ंक्शन का उदाहरण उचित है। लेकिन गैर-सदस्य संस्करण उत्कृष्ट होने पर सुविधा फ़ंक्शन के अलावा कोई उदाहरण है?
अधिक आम तौर पर, का उपयोग करने के नियम क्या हैं?
मुझे लगता है कि उस विषय के वास्तविक उद्देश्य नियमों की तुलना में अधिक धर्म है। – PlasmaHH
किसी भी प्रकार के एल्गोरिदम सदस्यों के बजाय मुक्त होने से लाभान्वित होते हैं, क्योंकि आप उन्हें वस्तुओं की एक विस्तृत श्रृंखला के लिए पुन: उपयोग कर सकते हैं। इसका एक उदाहरण मुफ्त 'शुरू() '/' अंत()' फ़ंक्शंस है जो नए मानक में जोड़े गए थे (जो आपको स्थिर सरणी के साथ-साथ कंटेनरों को फिर से चालू करने की अनुमति देता है)। –
@PlasmaHH: मुझे नहीं लगता कि यह धर्म की तरह अधिक है। कुछ कार्य करने के लिए तर्क गैर-सदस्य और गैर-मित्र काफी उचित है। – Nawaz