के संदर्भ के माध्यम से वर्चुअल फ़ंक्शंस को कॉल करना यह कोड कंसोल पर उचित संदेश प्रिंट करने से इनकार करता है जब मैं इसे चलाता हूं। संदर्भों के बजाय पॉइंटर्स का उपयोग करना (-> इसके बजाए) काम करता है। मैं ओओपी के लिए नया हूं इसलिए अगर आपको यह हास्यास्पद लगता है तो मुझे माफ़ कर दो।बेस क्लास
#include <iostream>
using namespace std;
class instrument {
public:
virtual void play(){}
};
class drum : public instrument {
public:
void play(){
cout << "dum, dum" << endl;
}
};
class piano : public instrument {
public:
void play(){
cout << "pling" << endl;
}
};
int main(){
instrument i;
piano p;
drum d;
instrument &pi = i;
pi.play(); // -
pi = p;
pi.play(); // pling
pi = d;
pi.play(); // dum, dum
}
आप उस ऑब्जेक्ट से संदर्भ नहीं बदल सकते हैं जिस पर इसे प्रारंभ करने पर एक बार संदर्भित किया गया है। इस प्रक्रिया में अभी आपके फायरिंग असाइनमेंट ऑपरेटर (और ट्रिगरिंग [ऑब्जेक्ट स्लाइसिंग] (http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274634#274634)। – WhozCraig
इसे एक उत्तर दें, क्या होगा, महोदय? – jrok
एक साइड इश्यू, लेकिन आपको बेस क्लास में आभासी विनाशक बनाना होगा। –