2010-04-29 10 views
6

मान लें मैं एक वर्ग एक है:सी ++ ओओपी: कक्षा में कौन से कार्यों को रखा जाए?

class a 
{ 
public: 
    void load_data(); 
private: 
    void check_data(); 
    void work_data(); 
    void analyze_data(); 
} 

उन कार्यों सभी वर्ग या उसके सदस्यों में से एक के साथ कुछ करना।

हालांकि इस समारोह:

bool validate_something(myType myData) 
{ 
    if (myData.blah > 0 && myData.blah < 100) 
    { 
     return true; 
    } 
    return false; 
} 
  • वर्ग से संबंधित है और केवल यह द्वारा बुलाया जाएगा, तो यह कहीं और

  • की जरूरत नहीं किया जाएगा कुछ भी नहीं है वर्ग या अपने सदस्यों के साथ - बस एक छोटा सा "उपयोगिता" समारोह

कहाँ +०१२३३७६२८८ डाल करने के लिए? कक्षा के अंदर या बाहर?

+0

आप इसे एक स्थिर सदस्य बना सकते हैं – Tim

उत्तर

4

इसे एक निजी स्थिर कक्षा सदस्य बनाएं। मैं इन गैर-वर्ग के सदस्यों को बनाने और उन्हें कार्यान्वयन फ़ाइल में एक नामहीन नेमस्पेस में डालता था, लेकिन ऐसा लगता है कि वे लगभग हमेशा वर्ग के सदस्यों की आवश्यकता होती है (या कहीं और स्थानांतरित होने की आवश्यकता होती है - शायद एक सत्यापन के लिए लाइब्रेरी, आपके उदाहरण में), जैसे कोड बदलता है, इसलिए अब मैं लगभग हमेशा उन्हें स्थिर सदस्य बना देता हूं।

के उपयोग के नोटिस कृपया "लगभग" इस उत्तर :-)

+1

इम्प्ल फ़ाइल में नामहीन नेमस्पेस में होने के विरोध में एक फ़ंक्शन * की आवश्यकता क्यों स्थिर सदस्य होनी चाहिए? या क्या आप इसे राज्य डेटा प्राप्त करने की आवश्यकता होने पर काम को बचाने के लिए करते हैं? –

+0

और आप उन्हें केवल सदस्य कार्यों के बजाय 'स्थिर' सदस्य क्यों बनाते हैं? –

+0

@ जॉन यह मेरा अनुभव है कि कार्यान्वयन फ़ाइल में सहायक कार्यों को हमेशा कक्षा में माइग्रेट करने की आवश्यकता होती है। यह शुद्ध योग्यता है। –

0

यदि यह विधि एक उपयोगिता है जिसका उपयोग केवल कक्षा द्वारा किया जा रहा है, तो मैं इसे कक्षा का एक निजी तरीका बनाउंगा। इस तरह, यह encapsulated है और अपने सार्वजनिक एपीआई "प्रदूषण" नहीं है।

0

यह मानते हुए कि MyType भी एक struct/वर्ग है, तुम क्यों MyType की एक विधि validate_something नहीं बनाते हैं भर में एक क्वालीफायर के रूप में?

0

जैसा कि मैं समझता हूं, यह एक विधि नहीं है। बस इसका उपयोग करने वाली विधियों की परिभाषाओं के ऊपर, सीपीपी फ़ाइल में इसकी परिभाषा डालें। यदि आपके पास आपकी कक्षा में आपकी सभी विधि परिभाषाएं हैं, तो आपको कक्षा परिभाषा के ऊपर शीर्षलेख में फ़ंक्शन का प्रोटोटाइप रखना होगा, लेकिन परिभाषा अभी भी एक सीपीपी फ़ाइल में हो सकती है।

10

एक समारोह

  • नहीं वर्ग के बाहर की आवश्यकता है, और,
  • वर्ग के सदस्यों का उपयोग करने की जरूरत नहीं है (या शायद पैरामीटर के रूप में सदस्यों के साथ एक मुक्त समारोह के रूप में समझ में आता है)
  • है

तो मैं इसे कार्यान्वयन फ़ाइल में एक निजी नेमस्पेस के अंदर एक नि: शुल्क फ़ंक्शन बनाना चाहता हूं। मैं निजी कार्यों का उपयोग नहीं करना पसंद करता क्योंकि वे हेडर फ़ाइल में कार्यान्वयन विस्तार का पर्दाफाश करते हैं (और अभी तक नील की समस्याओं का सामना नहीं किया है) और मैं कार्यान्वयन परिवर्तनों के लिए पुन: संकलन से बचना पसंद करता हूं।

संबंधित मुद्दे