Saturday 15 September 2012

c++ - Is it possible to implement an interface through inheritance? -


<पूर्व> struct I {आभासी शून्य foo () = 0; वर्चुअल शून्य बार () = 0; }; संरचना एक {शून्य foo () {}; }; संरचना बी: सार्वजनिक ए, सार्वजनिक I {void bar () {}; };

क्या इस छद्म कोड को सी ++ में मान्य होना चाहिए? वर्तमान में मुझे लिंक के समय foo () के लिए एक अनिर्धारित संदर्भ त्रुटि मिल रही है।

यदि यह काम नहीं करना है, तो एक इंटरफ़ेस बनाने के लिए एक तकनीक की अनुशंसा करें, जो कार्यान्वित हो जाती है उदाहरण के तौर पर, विरासत से।

यह निर्भर करता है कि आप "वैध" से क्या कहते हैं। आपको लापता वापसी प्रकार जोड़ना होगा, और शायद कुछ अन्य वाक्यविन्यास समस्याओं को ठीक करने के लिए, इसे संकलित करना होगा।

यदि आपका मतलब है, "है B एक गैर-सार वर्ग जो कि शुद्ध वर्चुअल फ़ंक्शंस दोनों को सही ढंग से ओवरराइड करते हैं, वे I में घोषित करते हैं? यह foo ओवरराइड नहीं करता; एक ही नाम के फ़ंक्शन को प्राप्त करना ओवरराइडिंग के रूप में नहीं गिना जाता है।

यदि आप A :: foo को I :: foo , तो आपको ओवरराइड प्रदान करने के लिए B में एक आवरण जोड़ना होगा:

  void foo () {A :: foo ();} // संभालना अनुपलब्ध वापसी का प्रकार शून्य है  

No comments:

Post a Comment