संपादित करें: मैं अपने प्रश्न पढ़ने में भूलना :(इस सवाल आप शीर्ष लेख-फ़ाइलें विभाजित कर सकते हैं कि क्या करने के लिए एक जवाब होगा खेद
सरल उत्तर: आप C++ विभाजित कर सकते हैं - फ़ाइल, लेकिन आप विभाजित नहीं कर सकते ऊपर हेडर-फाइलें।
कारण काफी सरल है। जब भी आपके कंपाइलर को एक कन्स्ट्रक्टर को संकलित करने की आवश्यकता होती है, तो उसे यह पता होना चाहिए कि इस तरह के ऑब्जेक्ट को आवंटित करने के लिए कितनी मेमोरी की आवश्यकता है।
उदाहरण के लिए
:
class Foo {
double bar; //8 bytes
int goo; //4 bytes
}
'नए फू()' 12 बाइट्स स्मृति के आवंटन की आवश्यकता होगी। लेकिन अगर आपको कई फाइलों पर अपनी कक्षा परिभाषाओं को विस्तारित करने की अनुमति दी गई थी (यानी हेडर फाइलों को विभाजित करें), तो आप आसानी से इस पर गड़बड़ कर सकते हैं। आपका कंपाइलर कभी नहीं जानता कि क्या आपने कक्षा के बारे में सब कुछ पहले ही बताया है, या आपने नहीं किया है। आपके कोड में अलग-अलग स्थानों में आपकी कक्षा की अलग-अलग परिभाषाएं हो सकती हैं, जिससे सेगमेंटेशन दोष या अत्यधिक क्रिप्टिकल कंपाइलर त्रुटियां हो सकती हैं।
उदाहरण के लिए:
h1.h:
class Foo {
double bar; //8 bytes
int goo; //4 bytes
}
h2.h: #include "h1.h"
class Foo {
double goo; //8 bytes
}// we extend foo with a double.
foo1.cpp:
#include "foo1.h"
Foo *makeFoo() {
return new Foo();
}
foo2.cpp:
#include "foo2.h"
void cleanupFoo(Foo *foo) {
delete foo;
}
foo1.h:
#include "h1.h"
Foo *makeFoo();
foo2.h:
#include "h1.h"
#include "h2.h"
void cleanupFoo(Foo *foo)
main.cpp:
#include foo1.h
#include foo2.h
void main() {
Foo *foo = makeFoo();
cleanupFoo(foo);
}
अब
बहुत सावधानी से जाँच करता है, तो आप पहली बार संकलन क्या होता है main.cpp से main.o, फिर foo1.cpp से foo1.o और foo2.cpp foo2.o, और fi उन सभी को एक साथ लिंक करें। इसे संकलित करना चाहिए, लेकिन makeFoo() कुछ और आवंटित करता है तो cleanupFoo() को हटा दिया जाता है।
तो आपके पास यह है, .cpp फ़ाइलों को विभाजित करने के लिए स्वतंत्र महसूस करें, लेकिन शीर्षलेख फ़ाइलों पर कक्षाओं को विभाजित न करें।
यह सही लगता है कि आप कार्यान्वयन में हेडर को शामिल नहीं करना चाहते हैं। – dasblinkenlight
क्या आप पूछ रहे हैं कि क्या आप कार्यान्वयन में 'ग्राफ़ ::' टाइप करने से बच सकते हैं? – GManNickG
मुझे पता है कि यह सही है, लेकिन मैं पूछ रहा हूं कि ग्राफ :: दोहराने के बिना कोई दूसरा तरीका है या नहीं .. .. –