मान लीजिए मैं एक हीरे की विरासत स्थिति इस प्रकार है:निम्न वर्ग में वर्चुअल टेबल क्यों है?
class A{
public: virtual void foo(){};
};
class B: public virtual A{
public: virtual void foo(){};
};
class C: public virtual A{
public: virtual void foo(){};
};
class D: B, C{};
अंतिम पंक्ति अस्पष्टता का हवाला देते हुए एक संकलन त्रुटि अर्जित करता है। जैसा कि मैं इसे समझता हूं, समस्या यह है कि संकलक को पता नहीं है कि डी के vtbl में कौन सा foo रखना है, लेकिन डी के लिए एक vtbl क्यों होगा यदि यह किसी भी वर्चुअल फ़ंक्शन को परिभाषित नहीं करता है?
क्या "वर्चुअल" सुरक्षा स्तर विनिर्देशक है जो आपकी कक्षा घोषणा लाइनों (जैसे कक्षा बी: वर्चुअल ए) पर भी मान्य है? – Joe
यह कोई सुरक्षा विनिर्देशक नहीं है। यह वर्चुअल बेस क्लास को दर्शाता है, जो कि हीरा की समस्या के आसपास काम करने के लिए एक कानूनी हैक है। –
आह, ठीक है, धन्यवाद। – Joe