एक कारक यह है कि उन्हें कक्षा में भी रखा जाए, या उन्हें नामस्थान में नामांकित करें (जावा में, आपको कक्षा का उपयोग करना होगा, लेकिन सी ++ नामस्थान प्रदान करता है)।
आप इसे एक वर्ग के सदस्य करते भी हैं, तो सबसे महत्वपूर्ण निर्णय आप प्रत्येक कार्य के बारे में बनाने के लिए है कि क्या यह आवश्यकता होगी या किसी राज्य कि प्राप्त या नहीं पहुंचेगी एक अपने मापदंडों और वापसी मान के माध्यम से प्रभावित करना चाहिए है। यदि ऐसा नहीं होता है, तो इसे static
बनाया जाना चाहिए, क्योंकि आप "इस" छिपे तर्क का उपयोग नहीं करेंगे।
नामस्थान के बजाय कक्षा का उपयोग करने के लिए एक तर्क यह है कि यदि आपकी उपयोगिता कक्षा को इसके कार्यान्वयन के लिए अतिरिक्त विधियों का आह्वान करने की आवश्यकता हो सकती है (उदाहरण के लिए, पुनरावर्तन, जटिल गणना आदि के मामले में)। फिर आप अपनी विधि static public
बना सकते हैं, और कुछ भी इसे static private
पर लागू किया जा सकता है। सी ++ का उपयोग करने के बाद से कई सालों रहे हैं, लेकिन मुझे नहीं लगता कि आप नामस्थान में गैर-सदस्य कार्यों को "छिपा" सकते हैं (अगर मैं गलत हूं तो कोई मुझे सही करेगा)।
फ़ंक्शन इंटरफ़ेस को डिज़ाइन करने के संदर्भ में, तर्कों की संख्या पर विचार करें। यदि बहुत से आने वाले तर्क हैं (विशेष रूप से यदि वे समान प्रकार के हैं और कुछ संबंधित हैं), तो आप कई तर्कों को पारित करने के बजाय अतिरिक्त प्रकारों का उपयोग करने पर विचार करना चाहेंगे। उदाहरण के लिए, calculateVolume(int x, int y, int z)
के बजाय, आप calculateVolume(Point3D)
जैसे कुछ करना चाह सकते हैं। इसी तरह, आपके मामले में, एक आरजीबी कक्षा का उपयोग करें। यह मूर्खतापूर्ण प्रतीत हो सकता है, लेकिन यह कुछ परेशान त्रुटियों को बचा सकता है (उदाहरण के लिए, यदि आपके पास इन्ट्स और आरजीबी लेने वाले फ़ंक्शन हैं), और समय (यदि आपको अन्य कार्यों में मानों को पास करना है)। तर्कों को पार करते समय इन प्रकारों को बनाने के लिए आप एक स्थिर फैक्ट्री विधि बना सकते हैं। उदाहरण के लिए: doSomethingWithColor(RGB.create(20,30,40))
कॉपीस्ट्रिंग() संदिग्ध लग रहा है - यह क्या करेगा? –
@Neil: एक स्ट्रिंग को ढेर में कॉपी करना, इसलिए यह दायरे से बाहर नहीं होगा ... –
किसी भी परिस्थिति में ऐसा नहीं है - यह लगभग गारंटीकृत स्मृति रिसाव है। Std :: स्ट्रिंग का प्रयोग करें। –