मैंने देखा है कि हेडर फ़ाइल में क्या है और cpp फ़ाइल में क्या जाता है, इस बारे में C ++ में कई अलग-अलग प्रतिमान हैं। AFAIK, ज्यादातर लोग, विशेष रूप से एक सी पृष्ठभूमि के लोग, करते हैं:
foo.h
class foo {
private:
int mem;
int bar();
public:
foo();
foo(const foo&);
foo& operator=(foo);
~foo();
}
foo.cpp
#include foo.h
foo::bar() { return mem; }
foo::foo() { mem = 42; }
foo::foo(const foo& f) { mem = f.mem; }
foo::operator=(foo f) { mem = f.mem; }
foo::~foo() {}
int main(int argc, char *argv[]) { foo f; }
हालाँकि, मेरे व्याख्याता आमतौर पर शुरुआती लोगों को इस तरह से C ++ सिखाते हैं:
foo.h
class foo {
private:
int mem;
int bar() { return mem; }
public:
foo() { mem = 42; }
foo(const foo& f) { mem = f.mem; }
foo& operator=(foo f) { mem = f.mem; }
~foo() {}
}
foo.cpp
#include foo.h
int main(int argc, char* argv[]) { foo f; }
// other global helper functions, DLL exports, and whatnot
मूल रूप से जावा से आ रहा है, मैं भी कई कारणों से हमेशा इस दूसरे तरीके से अटक गया हूं, जैसे कि मुझे केवल एक जगह पर कुछ बदलना है अगर इंटरफ़ेस या विधि के नाम बदलते हैं, तो मुझे कक्षाओं में चीजों का अलग-अलग इंडेंटेशन पसंद है जब मैं उनके कार्यान्वयन को देखो, और मुझे लगता है कि foo
तुलना में अधिक पठनीय नाम मिलते हैं foo::foo
।
मैं किसी भी तरह से प्रो और कोन को इकट्ठा करना चाहता हूं। शायद अभी भी अन्य तरीके हैं?
मेरे रास्ते का एक नुकसान निश्चित रूप से कभी-कभार आगे की घोषणाओं की जरूरत है।
foo.cpp
अब आपकीfoo
कक्षा से कोई लेना-देना नहीं है और इसे खाली छोड़ दिया जाना चाहिए (हो सकता है, लेकिन#include
आपकी बिल्ड सिस्टम को खुश करने के लिए)।