यह मुझे थोड़ा आश्चर्यचकित कर रहा था, लेकिन मैं कुछ कोड के साथ खेल रहा था और पाया कि कम से कम मेरे कंप्यूटर पर, जब कोई फ़ंक्शन संदर्भ द्वारा अभिभावक वर्ग स्वीकार करता है और आप एक बच्चे के उदाहरण को पास करते हैं, तो टुकड़ा करने की समस्या नहीं होती है ' टी नहीं होता है। उदाहरण के लिए:क्या संदर्भ से गुज़रना हमेशा स्लाइसिंग मुद्दे से बचता है?
#include <iostream>
class Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Parent::DoSomething" << endl;
}
};
class Child : public Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Child::DoSomething" << endl;
}
};
void performSomething(Parent& parent)
{
parent.doSomething();
}
int main(int argc, char** argv)
{
Child myChild;
performSomething(myChild);
return 0;
}
यह प्रिंट Child::DoSomething
प्रिंट करता है।
जैसा मैंने कहा, मैं थोड़ा आश्चर्यचकित था। मेरा मतलब है, मुझे पता है कि संदर्भ से गुजरना गुजरने वाले पॉइंटर्स (लेकिन मेरी समझ में अधिक सुरक्षित) है, लेकिन मुझे नहीं पता था कि ऐसा करने पर मुझे अभी भी पॉलिमॉर्फिक भलाई रखना है।
मैं बस यह सुनिश्चित करना चाहता हूं, क्या ऐसा होना चाहिए या यह उन लोगों में से एक है जो यह "मेरी मशीन पर काम करता है" उदाहरणों के प्रकार?
यह "स्लाइसिंग" नहीं है। साथ ही, क्या वह कोड भी संकलित करता है? 'Std;' का उपयोग क्या है? –
इसे 'नामस्थान std' का उपयोग करने का अर्थ है। मुझे लगा कि मैं इस बिंदु को प्राप्त करने में सक्षम था, लेकिन साइट पर समग्र लाभ के लिए कोड साफ़ कर दिया। – Anthony