अक्सर सम्मेलन द्वारा, एक निजी सदस्य के नाम पर अतिरिक्त अंडरस्कोर होता है, या _pri
जैसे कुछ जोड़ा जाता है। या संभवतः एक टिप्पणी। यह तकनीक यह सुनिश्चित करने के लिए कंपाइलर-लागू जांच नहीं करती है कि कोई भी उन क्षेत्रों को अनुपयुक्त रूप से एक्सेस नहीं करता है, लेकिन struct
को पढ़ने वाले किसी को भी चेतावनी के रूप में कार्य करता है कि सामग्री कार्यान्वयन के विवरण हैं और उन्हें उन पर नज़र डालना या पोक नहीं करना चाहिए।
एक और आम तकनीक आपकी संरचना को अपूर्ण प्रकार के रूप में बेनकाब करना है। उदाहरण के लिए, अपने हेडर फाइल में, आप हो सकता है:
struct my_struct;
void some_function(struct my_struct *);
और कार्यान्वयन में, या कुछ आंतरिक हेडर जो पुस्तकालय के उपभोक्ताओं के लिए सुलभ नहीं है, तुम हो:
struct my_struct
{
/* Members of that struct */
};
आप कर सकते हैं शून्य पॉइंटर्स के साथ समान चाल भी करें, जो कोड के "निजी" हिस्से में सही स्थान पर आते हैं। यह दृष्टिकोण कुछ लचीलापन खो देता है (उदाहरण के लिए, आपके पास एक अनिर्धारित प्रकार का स्टैक-आवंटित उदाहरण नहीं हो सकता है), लेकिन यह स्वीकार्य हो सकता है।
यदि आप निजी और सार्वजनिक सदस्यों का मिश्रण करना चाहते हैं, तो आप उपरोक्त की तरह ही काम कर सकते हैं, लेकिन निजी संरचना सूचक को सार्वजनिक के सदस्य के रूप में स्टोर कर सकते हैं, और इसे लाइब्रेरी के सार्वजनिक उपभोक्ताओं में अधूरा छोड़ दें ।
हालांकि, यह कुछ संकेत प्रदान करता है, जो प्रदर्शन को नुकसान पहुंचा सकता है। वहाँ कुछ (आम तौर पर गैर-पोर्टेबल है, लेकिन उचित compilers पर काम करेंगे) कर रहे हैं टाइप-punning चालें आप भी उपयोग कर सकते हैं:
struct public_struct
{
int public_member;
int public_member2;
/* etc.. */
};
struct private_struct
{
struct public_struct base_members;
int private_member1;
int private_member2;
};
void some_function(struct public_struct *obj)
{
/* Hack alert! */
struct private_struct *private = (struct private_struct*)obj;
}
यह भी मान लिया है कि आप ढेर पर या स्थिर भंडारण में इन वस्तुओं की दुकान नहीं कर सकते हैं , या संकलन समय पर आकार प्राप्त करें।
सूचना छिपाने और encapsulation ओओडी भविष्यवाणी करता है। –