में सी ++ असाइनमेंट ऑपरेटर मुझे समझ में नहीं आता है कि एक व्युत्पन्न कक्षा के लिए क्यों बेस क्लास के संबंधित ऑपरेटर को कॉल नहीं किया जाता है, यदि इसका अस्तित्व मौजूद नहीं है। कोड को देखें:व्युत्पन्न वर्ग
#include <iostream>
using namespace std;
class A{
protected:
void myWrite(){
cout << " Base " <<endl;
}
public:
double x,y;
A(): x{0},y{0}{};
virtual A & operator=(double g){x=g;y=g;return *this;}
virtual ~A(){};
virtual void doneit(){myWrite();}
};
class B: public A{
protected:
public:
B():A(){};
virtual ~B(){};
virtual void doneit(){myWrite();}
};
int main() {
A jj;
B pp;
pp=0.0;
return 0;
}
चूंकि यह कोड संकलित नहीं होता है। बेशक अगर मैं ए के लिए समान के लिए "ऑपरेटर =" परिभाषित करता हूं, तो सबकुछ काम करता है, लेकिन बी "ऑपरेटर =" को डिफ़ॉल्ट रूप से क्यों नहीं कहा जाता है यदि व्युत्पन्न वर्ग में से कोई परिभाषित नहीं किया गया है ?? क्या आप इस मुद्दे पर कुछ प्रकाश डालने में मदद कर सकते हैं?
जीसीसी कंपाइलर कहता है ../src/tito.cpp:40hold: त्रुटि: कोई व्यवहार्य ओवरलोडेड '=' पीपी = 0.0; ~~^~~~ ../src/tito.cpp:28:7: नोट: उम्मीदवार फ़ंक्शन (निहित प्रति असाइनमेंट ऑपरेटर) व्यवहार्य नहीं है: 1 तर्क के लिए 'डबल' से 'कॉन्स्ट बी' से कोई ज्ञात रूपांतरण नहीं कक्षा बी: सार्वजनिक ए { ^ 1 त्रुटि उत्पन्न हुई।
क्या आप समझा सकते हैं कि यह क्यों काम नहीं करता है?
है हाँ, मुख्य तर्क यह है कि माता-पिता की 'ऑपरेटर है =' तो परोक्ष बच्चे के हिस्सा आवंटित नहीं है कि यह easilly टूटी हुई वस्तुओं बना सकते हैं का उपयोग कर। – StenSoft
बहुत उपयोगी टिप्पणी के लिए धन्यवाद !! – Max