2011-12-10 12 views
12

मैंने पढ़ा है कि कक्षाओं और संरचनाओं (कार्यों के अलावा) के बीच मुख्य अंतर यह है कि कक्षा के सदस्य निजी रूप से डिफ़ॉल्ट होते हैं, जबकि संरचना सदस्य सार्वजनिक रूप से डिफ़ॉल्ट होते हैं।सी ++ निजी संरचना

इसका तात्पर्य है कि संरचना के सदस्य निजी हो सकते हैं। मेरा सवाल है: क्या आपके पास निजी संरचना के सदस्य हो सकते हैं? और यदि आप कर सकते हैं, निजी सदस्यों का उपयोग करने का उद्देश्य क्या है? आप उन्हें कैसे एक्सेस करेंगे?

+0

आप निजी वर्ग के सदस्यों तक पहुंचने के तरीके में निजी संरचना सदस्यों तक पहुंचेंगे। यदि आप structs और कक्षाओं के बारे में सोचते हैं तो प्रश्न केवल तभी समझ में आता है। उनके बारे में बहुत ज्यादा समान सोचने की कोशिश करें। –

उत्तर

19

हाँ संरचनाओं में निजी सदस्य हो सकते हैं, आपको बस इसके लिए एक्सेस विनिर्देशक का उपयोग करने की आवश्यकता है।

struct Mystruct 
{ 
    private: 
     m_data; 

}; 

संरचना और वर्ग के बीच एकमात्र अंतर हैं:

  • पहुँच विनिर्देशक struct के लिए वर्ग और जनता के लिए निजी करने के लिए डिफ़ॉल्ट
  • विरासत struct के लिए वर्ग और जनता के लिए निजी करने के लिए डिफ़ॉल्ट

आप उन्हें कैसे एक्सेस कर सकते हैं?
जैसे आप कक्षा के निजी सदस्यों तक पहुंचते हैं। अर्थात्: वे केवल संरचनाओं सदस्य कार्यों के भीतर और व्युत्पन्न संरचना में नहीं पहुँचा जा सकता है आदि

1

केवलstruct और class के बीच का अंतर डिफ़ॉल्ट पहुंच है (कुछ अजीब टेम्पलेट स्थितियों के अपवाद के साथ, Alf की टिप्पणी नीचे देखें) । इसका मतलब है आप एक कक्षा में के रूप में एक ही तरह से निजी सदस्यों पहुँच सकते हैं:

struct foo { 
    int get_X() { return x; } 
    void set_X(int x_) { x = x_; } 
private: 
    int x; 
}; 

चाहे आप का उपयोग struct या class, तो, विशुद्ध रूप से शैली की बात है। मैं struct का उपयोग करता हूं जब सभी सदस्य सार्वजनिक होते हैं (उदाहरण के लिए, यदि यह कोई सदस्य चर नहीं है और केवल सार्वजनिक कार्य नहीं है)।

+4

अच्छी तरह से, कीवर्ड के संबंध में टेम्पलेट पैरामीटर सूची में भी एक अंतर है, उदा। 'टेम्पलेट <टेम्पलेट < class Foo > कक्षा बार>'। आप इसे 'struct' के साथ नहीं लिख सकते हैं। :-) –

+0

@ AlfP.Steinbach, दिलचस्प। मैं हमेशा 'टाइपनाम' के साथ टेम्पलेट्स लिखता हूं इसलिए मैंने कभी नहीं देखा :) – bdonlan

+2

आप इसके लिए 'टाइपनाम' का उपयोग नहीं कर सकते (यह वाक्यविन्यास त्रुटि होगी)। चीयर्स, –

0

एक चीज जो यह उपयोगी बनाती है वह यह है कि आप structs में मित्र कुंजी शब्द का भी उपयोग कर सकते हैं, इसलिए निजी सदस्यों का केवल उन विशिष्ट कार्यों या वर्गों द्वारा उपयोग और संशोधित किया जा सकता है या आप इसे संशोधित करने में सक्षम नहीं होना चाहते हैं । इस प्रकार उपयोगकर्ता स्वयं उन वर्गों को संशोधित नहीं कर सकता है। वे कम से कम दृश्य स्टूडियो में ऑटो भरने की विशेषताओं में भी दिखाई नहीं देंगे।

संबंधित मुद्दे