यहां एक प्रश्न है जो सी ++ वर्ग कार्यान्वयन में बार-बार आता है। मैं इस बारे में उत्सुक हूं कि लोगों के विचार यहां क्या हैं। आप कौन सा कोड पसंद करते हैं और क्यों?सी ++ निजी कार्य: चाहे फ़ंक्शन पैरामीटर द्वारा कक्षा सदस्य चर को पास करना है, या
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(void);
CMyClass m_Member1;
};
void A::publicCall(void)
{
f();
}
void A::f(void)
{
// do some stuff populating m_Member1
}
या विकल्प के साथ
:
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(CMyClass &x);
CMyClass m_Member1;
};
साथ
void A::publicCall(void)
{
f(m_Member1);
}
void A::f(CMyClass &x)
{
// do some stuff to populate x,
// locally masking the fact that it's really m_Member1
}
मुझे लगता है कि मैं हमेशा एक दूसरे क्योंकि तब f
तो किसी पर काम कर सकते हैं पसंद करते हैं 0 का उदाहरणलेकिन, उसने कहा, मेरे पास बहुत सारे कोड हैं जहां पहला f
से पहले पूरी तरह वैध है, केवल m_Member1
पर काम करेगा और मैं इसे कोड को और अधिक पठनीय बनाने के लिए वास्तव में दो कार्यों में तोड़ रहा हूं।
हां, यह "उत्तर" प्रश्न से अधिक चर्चा प्रश्न है, लेकिन मुझे तर्क में अधिक दिलचस्पी है। मैं एक उत्तर के रूप में एक प्रतिक्रिया के रूप में चिह्नित करूंगा जो अच्छी तर्क या एक अच्छा मानदंड देता है।
इसके अलावा, ध्यान रखें कि यह सिर्फ एक खिलौना उदाहरण है। कक्षा वास्तविकता में इससे बड़ी होगी और इस प्रकार संगठन महत्वपूर्ण है।
अपने दूसरे मामले में, आप 'f' स्थिर बना सकते हैं, और यह पहले मामले में लगभग समान कोड बनाएगा। –
@ केरेक एसबी, यह सच है और यह एक महान बिंदु है। हकीकत में, इस वर्ग के सदस्य होने के लिए 'f()' की आवश्यकता नहीं है। यह अपने स्वयं के स्टैंडअलोन उपयोगिता समारोह हो सकता है। अब यह कहने के लिए पर्याप्त है कि 'एफ() 'इस वर्ग के संदर्भ को छोड़कर विशेष रूप से उपयोगी नहीं है। –
सीएम क्लास के किसी भी उदाहरण पर पहला एफ क्यों संचालित नहीं हो सकता है? – aib