मैंने हमेशा हेडर फाइलों के बारे में सोचा है कि एक वर्ग का वर्णन करने वाले 'सार्वजनिक इंटरफेस' के रूप में, इस मामले में निजी क्षेत्रों और कार्यों को सीपीपी फ़ाइल में रखना बेहतर होगा।सी ++, निजी कार्यों को वास्तव में हेडर फ़ाइल में होना आवश्यक है?
मैं समझता हूं कि निजी क्षेत्रों को हेडर में होना आवश्यक है ताकि अन्य वर्ग बता सकें कि कक्षा का एक उदाहरण कितना मेमोरी उपभोग करेगा, लेकिन यह मेरे लिए हुआ क्योंकि मैं एक निजी सहायक कार्य लिखने वाला था, यह कि फ़ंक्शन को स्थिर बनाया जा सकता है, इस मामले में इसे 'कक्षा का हिस्सा' होने की कोई आवश्यकता नहीं थी, यह वर्ग परिभाषा की .cpp फ़ाइल में नियमित रूप से नियमित रूप से कार्य हो सकता था।
यह तो मेरे लिए हुआ है कि सभी निजी कार्यों के संभावित बजाय वर्ग क्षेत्रों के लिए संकेत/संदर्भ को स्वीकार कक्षा में परिभाषित किया जा करने की उम्मीद से स्थिर होने के लिए फिर से लिखा जा सकता है।
यह हेडर फ़ाइल में किसी भी निजी फ़ंक्शन को घोषित करने की आवश्यकता को खत्म कर देगा।
मैं तो अब मैं पूछना चाहता हूँ परंपराओं का पालन करना चाहते हैं, यह सी में एक स्थापित सम्मेलन माना ++, कि गैर स्थिर निजी कार्यों हेडर फाइल में होना चाहिए? स्थिर कार्यों या स्थैतिक स्थिरांक के बारे में क्या?
संपादित मैं कुछ कोड में डाल करने के लिए समझाने के लिए कि मैं क्या कर रहा हूँ जा रहा हूँ पर हो रही है:
हेडर फाइल:
#ifndef SOME_CLASS_H
#define SOME_CLASS_H
class SomeClass
{
private:
int x;
public:
void combineWithX(int y);
};
#endif
.cpp फ़ाइल
#include "SomeClass.h"
void someHelper(int* x)
{
*x = (*x) + 1;
}
void SomeClass::combineWithX(int y)
{
someHelper(&x);
x += y;
}
ध्यान दें कि में someHelper(int* x)
सीपीपी फ़ाइल निजी सदस्य एक्स को भावना में संदर्भित करती है, लेकिन सीधे नहीं, और इसलिए हेडर में दिखाई देने की आवश्यकता नहीं है। मुझे आश्चर्य है कि इस तरह की चीज को 'खराब शैली' माना जाता है
ध्यान दें कि निजी कार्यों को कक्षा के अंदर से मित्रता की आवश्यकता होगी, अन्यथा वे निजी सदस्यों तक नहीं पहुंच पाएंगे। अगर उन्हें निजी सदस्यों की आवश्यकता नहीं है, तो शायद उन कार्यों को स्वयं सदस्य नहीं होना चाहिए। –
चूंकि आप एक बार बंद होने के लिए कक्षा को फिर से खोल नहीं सकते हैं (सी ++ 11 9.2-पी 2), हां, आपके सदस्य के कार्यों * और * उस वर्ग के सदस्य वर्र्स * को इसकी घोषणा में संगत होना है। आप निश्चित रूप से एक [pimpl] कर सकते हैं (http://stackoverflow.com/questions/843389/the-pimpl-idiom-in-practice) - वांछित अगर पूरक। – WhozCraig
@WhozCraig धन्यवाद, मैंने आपका लिंक उधार लिया (मूल रूप से मैं एक बदतर प्रश्न से जुड़ा हुआ) –