जबकि मैं this question के स्वीकृत उत्तर को पढ़ रहा था, मेरे पास निम्न प्रश्न था:"केवल एक कार्यान्वयन" नियम का अपवाद?
आमतौर पर, शीर्षलेख फ़ाइलों (.hpp
या जो कुछ भी) में विधियों को परिभाषित किया जाता है, और स्रोत फ़ाइलों में कार्यान्वयन (.cpp
या जो भी हो)।
कभी भी "स्रोत फ़ाइल" (#include <source_file.cpp>
) को शामिल करने के लिए खराब प्रथाओं में से एक मुख्य कारण यह है कि इसके तरीकों के कार्यान्वयन को डुप्लिकेट किया जाएगा, जिसके परिणामस्वरूप त्रुटियों को जोड़ दिया जाएगा।
जब कोई लिखता है:
#ifndef BRITNEYSPEARS_HPP
#define BRITNEYSPEARS_HPP
class BritneySpears
{
public:
BritneySpears() {}; // Here the constructor has implementation.
};
#endif /* BRITNEYSPEARS_HPP */
वह कन्स्ट्रक्टर के कार्यान्वयन (यहां एक "खाली" कार्यान्वयन, लेकिन अभी भी) दे रहा है।
लेकिन फिर इस हेडर फ़ाइल को कई बार (विभिन्न स्रोत फ़ाइलों पर उर्फ) सहित क्यों लिंक समय पर "डुप्लिकेट परिभाषा" त्रुटि उत्पन्न नहीं करेगा?
इनलाइन और एक परिभाषा नियम के बारे में एक और जवाब यहां दिया गया है: http://stackoverflow.com/questions/908830/isnt-cs-inline-totally-optional/910686#910686 –
बीटीडब्ल्यू, ब्रिटनीस्पीर्स के आपके कोड में कमजोर संबंध है। वास्तविक जीवन की तरह :) –
अकेले ब्रिटनी छोड़ें –