मैं सी ++ में private
एक्सेस विनिर्देशक की वैधता का प्रयास कर रहा था। यहाँ जाता है:सी ++ निजी वास्तव में निजी है?
इंटरफ़ेस:
// class_A.h
class A
{
public:
void printX();
private:
void actualPrintX();
int x;
};
कार्यान्वयन:
// class_A.cpp
void A::printX()
{
actualPrintX();
}
void A::actualPrintX()
{
std::cout << x:
}
मैं यह एक स्थिर पुस्तकालय (ए/उदारीकरण) करने के लिए बनाया। अब हमारे पास class_A.h और classA.a (या classA.lib) जोड़ी है। मैंने class_A.h संपादित किया और इससे private:
हटा दिया।
एक और classTester.cpp में:
#include "class_A.h" // the newly edited header
int main()
{
A a;
a.x = 12; // both G++ and VC++ allowed this!
a.printX(); // allowed, as expected
a.actualPrintX(); // allowed by G++, VC++ gave a unresolved linker error
return 0;
}
मुझे पता है कि एक पुस्तकालय के हेडर छेड़छाड़ के बाद सभी दांव बंद कर रहे हैं (मेरा मतलब है, प्रणाली अखंडता, आदि) विधि यद्यपि hacky जा रहा है, यह वास्तव में है अनुमति? क्या इसे अवरुद्ध करने का कोई तरीका है? या मैं यहाँ कुछ गलत कर रहा हूँ?
मुझे पता है कि चेशर बिल्ली (पिंपल - निजी इम्प्लायर http://en.wikipedia.org/wiki/Cheshire_Cat_Idiom_%28programming_technique%29) डिज़ाइन यहां संभव है और यह भी कि एक्सेस विनिर्देशक संकलक द्वारा संकलित-समय गार्ड हैं । – legends2k
पृथ्वी पर क्यों आप इसे पुनर्निर्माण नहीं कर सकते? –
@ डोमिनिक: मेरा इरादा यह देखना था कि क्या होता है यदि मैं कक्षा के निजी हिस्सों तक पहुंचने की कोशिश कर रहा हूं। – legends2k