2009-06-08 20 views
24

मैं इस डिजाइन के फैसले के बारे में उलझन में रहना चाहता हूं, जब मैं प्रोग्राम लिख रहा हूं, लेकिन मुझे 100% यकीन नहीं है जब मुझे एक सदस्य कार्य करने के लिए कार्य करना चाहिए एक वर्ग, इसे एक सामान्य फ़ंक्शन के रूप में छोड़ने के लिए, जिसमें अन्य स्रोत फ़ाइलें फ़ंक्शन को कॉल कर सकती हैं जब फ़ंक्शन घोषणा को हेडर फ़ाइल में प्रकट किया जाता है। क्या किसी वर्ग के सदस्य चर के वांछित पहुंच को अधिकांश समय निर्णय के साथ करना पड़ता है?सी ++ सदस्य कार्य बनाम नि: शुल्क कार्य

+9

कृपया यह भी ध्यान दें कि "विधि" एक सामान्य ऑब्जेक्ट उन्मुख शब्द है। सी ++ में "विधियों" नहीं हैं, बस "कार्य"। सी ++ मानक कभी भी "विधि" शब्द का उपयोग नहीं करता है। इसके बजाय, "सदस्य फ़ंक्शन" या "फ्री फ़ंक्शन" का उपयोग करना पसंद करते हैं। –

+1

ब्रायन की टिप्पणी वास्तव में जवाब होना चाहिए। यही कारण है कि यहां आने वाले अधिकांश लोग ढूंढ रहे हैं ... इस प्रश्न में विधियों का भी उल्लेख नहीं है। –

+0

सहमत हुए। शायद सवाल का शीर्षक बदलना चाहिए, यह वास्तव में भ्रामक है। – Ben

उत्तर

26

इंटरफ़ेस सिद्धांत हर्ब Sutter

द्वारा एक दसवीं कक्षा के लिए, मुफ्त कार्यों सहित सभी काम करता है, यह है कि दोनों
(क) "का उल्लेख" एक्स, और
(ख) "आपूर्ति की जाती है "एक्स
साथ तार्किक, एक्स का हिस्सा हैं, क्योंकि वे एक्स

के इंटरफेस के भाग के लिए गहराई से चर्चा में हर्ब Sutter द्वारा Namespaces and the Interface Principle पढ़ के रूप में।

संपादित
असल में, आप सी को समझने के लिए ++ जाने के लिए और सब कुछ क्या हर्ब Sutter लिखा है :) पढ़ चाहते हैं, तो

+0

आपके उत्तर के लिए धन्यवाद। लिंक काफी वर्णनात्मक है। – stanigator

+8

(+1)। मुझे स्कॉट मेयर्स द्वारा यह भी पसंद है: http://www.ddj.com/cpp/184401197। स्कॉट और हर्ब के लेख एक दूसरे के पूरक हैं, मुझे लगता है। –

+1

मैं उलझन में हूँ। लिंक किया गया आलेख नामस्थानों के बारे में है, लेकिन सवाल नामस्थानों के बारे में नहीं पूछ रहा है। यह पूछ रहा है कि "सदस्य कार्य" बनाम "नि: शुल्क कार्य" कब करें। –

0

कुछ सदस्य चर या वस्तु का एक उदाहरण के कुछ पहलू का उपयोग करने की जरूरत है, तो इसे एक विधि बनाया जाना चाहिए।

यदि यह कक्षा से निकटता से संबंधित है, लेकिन किसी भी घटना विशिष्ट जानकारी तक पहुंचने की आवश्यकता नहीं है, तो इसे एक प्रोग्रामिंग भाषा के आधार पर साझा फ़ंक्शन (या क्लास फ़ंक्शन, या स्थैतिक फ़ंक्शन बनाया जाना चाहिए))।

भले ही यह केवल एक सामान्य कार्य है, संभावना है कि आपके पास उनमें से एक से अधिक होगा और उन्हें कुछ अवधारणा के अनुसार समेकित/संगठित किया जा सकता है। फिर, आप उस अवधारणा का प्रतिनिधित्व करने वाली कक्षा बना सकते हैं, और उन्हें साझा किए गए कार्यों को बना सकते हैं।

उपरोक्त को देखते हुए, मुझे अब स्टैंडअलोन फ़ंक्शंस बनाने का कोई कारण नहीं दिखता है।

+0

सी ++ में विधियों की कोई अवधारणा नहीं है। –

+4

विधि == सदस्य फ़ंक्शन – PSkocik

2

जब मुझे राज्य को बनाए रखने की आवश्यकता होती है तो कक्षाओं का उपयोग करता हूं। यदि किसी फ़ंक्शन को बनाए रखा राज्य जानकारी तक पहुंच की आवश्यकता नहीं है, तो मैं एक नि: शुल्क फ़ंक्शन पसंद करता हूं क्योंकि यह परीक्षण और कोड पुन: उपयोग को आसान बनाता है।

यदि मेरे पास संबंधित कार्यक्षमता का एक गुच्छा है लेकिन राज्य को बनाए रखने की आवश्यकता नहीं है, तो मैं नामस्थान में नि: शुल्क फ़ंक्शंस डालना पसंद करता हूं।

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