मैं स्कूल में थोड़ी देर प्रोग्रामिंग कर रहा हूं, और मैं अपनी पहली स्वतंत्र बड़ी परियोजना पर काम कर रहा हूं। मैं प्रोग्रामिंग के बारे में बहुत सारी चीजें खोज रहा हूं जिसे मैं पहले नहीं जानता था और यह बहुत अच्छा रहा है।पॉइंटर्स और संदर्भों के बारे में मेरी धारणाएं सीधे प्राप्त करना
हालांकि, अधिक से अधिक, मुझे लगता है कि मैं अब सी ++ को एक भाषा के रूप में समझता हूं जितना मैं इसमें डालता हूं। मैं जारी रखने से पहले सीधे संदर्भ और पॉइंटर्स के बारे में मेरी कुछ (गलत) अवधारणाएं प्राप्त करना चाहता हूं, और मुझे आशा है कि यदि आप गलत हैं तो मुझे स्टैक ओवरफ्लो, मुझे सही कर सकता है।
अग्रिम धन्यवाद, और यहां हम जाते हैं!
1. कक्षाओं के बीच कनवर्ट करते समय, वास्तव में परिवर्तित होने पर वर्चुअल टेबल होता है।
उदाहरण:
class A{
public:
A() : x(0) {};
int x;
virtual void doStuff() {
cout << x <<endl;
}
};
class B : public A{
public:
B() : y(1) {};
int y;
virtual void doStuff() {
cout << y <<endl;
}
};
अगर मैं एक करने के लिए ग्रुप बी के ख एक वस्तु बदल दिया था, क्या आंतरिक रूप से क्या होगा ख की आभासी मेज खारिज किया जा जाएगा, और बदल दिया प्रकार का एक इसी आभासी तालिका के साथ है ए, और वाई के विनाशक को बुलाया जाएगा क्योंकि अब इसका कोई संदर्भ नहीं है। इसी तरह, बी में डूस्टफ बी :: डूस्टफ के बजाय ए :: डूस्टफ के फ़ंक्शन पते को इंगित करने के लिए किया जाएगा। एक्स को इंगित करने वाला पता हालांकि वही रहेगा।
2. कौन-सा मतलब है कि बहुरूपता का लाभ लेने के लिए एक ही रास्ता संकेत और संदर्भ
बिंदु 1 का एक परिणाम के रूप में, कक्षाओं होगा की आभासी तरीकों में बहुरूपता का लाभ लेने के लिए एक ही रास्ता के माध्यम से संदर्भ और पॉइंटर्स का उपयोग करने के लिए, क्योंकि यदि हम मूल्य से गुजरते हैं, तो वर्ग स्वयं स्वचालित रूप से बेस क्लास में परिवर्तित हो जाएंगे।
उदाहरण:
void doALotOfStuff(A a1, A a2) {
a1.doStuff();
a2.doStuff();
}
int main(){
A a;
B b;
doALotOfStuff(a,b);
return 0;
}
प्रिंट आउट होता
0
0
क्योंकि संकलक ए में परिवर्तित करने के लिए ख
3. इसके अलावा कोड उत्पन्न होगा, लाभ लेने के लिए एक ही रास्ता सरणी और एसटीएल कंटेनर के साथ इस तरह के बहुरूपता के पॉइंटर्स का उपयोग करना होगा क्योंकि संदर्भों को संग्रहीत नहीं किया जा सकता
क्योंकि संदर्भ आबंटित नहीं हैं के बाद से वेक्टर काम नहीं होता है, यह इस प्रकार है कि अगर मैं आधार वर्ग का एक वेक्टर करना चाहते थे, मैं आदेश के तत्वों में से वर्चुअल टेबल बचाने के लिए एक के संकेत का एक वेक्टर बनाने के लिए की आवश्यकता होगी टाइप बी
क्षमा करें अगर यह टीएल था; डीआर, लेकिन यह थोड़ी देर के लिए मुझे परेशान कर रहा है जब मैं अपने प्रोजेक्ट पर कुछ क्लास डिज़ाइन कर रहा था, और मुझे एहसास हुआ कि मैं वास्तव में या तो उपयोग करने से दूर नहीं जा सका पुस्तकालय इंटरफेस और बहुरूपता के मुद्दों के कारण पॉइंटर्स या संदर्भ।
आह ठीक है, एक को साफ़ करने के लिए धन्यवाद। – Xzhsh