मैं सार कक्षाओं का उपयोग करके सी ++ में इंटरफ़ेस प्रकारों को परिभाषित करने और ठोस वर्गों के साथ कार्यान्वित करने की कोशिश कर रहा हूं। जिस समस्या में मैं दौड़ रहा हूं वह यह है कि मैं दूसरे इंटरफ़ेस से उत्तराधिकारी और इंटरफ़ेस दोनों नहीं कर सकता और बेस कंक्रीट क्लास से कार्यान्वयन का वारिस कर सकता हूं।विरासत कंक्रीट कक्षाओं के साथ सी ++ में इंटरफेस लागू करना
मेरा लक्ष्य इंटरफेस के पदानुक्रम को परिभाषित करने में सक्षम होना है जो कम जटिल आधार इंटरफेस से प्राप्त हो सकता है। मैं कंक्रीट कक्षाओं से विरासत में इंटरफेस के कार्यान्वयन को बढ़ाने में भी सक्षम होना चाहता हूं (जैसे नीचे दिए गए उदाहरण में TObjectA से विरासत)।
यह मेरे पास है। मुझे जो त्रुटि मिल रही है वह है "अमूर्त वर्ग प्रकार" TObjectB "की वस्तु की अनुमति नहीं है"। मेरा मानना है कि मुझे पता है क्यों, ऐसा इसलिए है क्योंकि मैंने TOBjectB में MethodA() को लागू नहीं किया है। लेकिन मैं वास्तव में चाहता हूं कि बेस क्लास (TObjectA) द्वारा प्रदान किया गया कार्यान्वयन हो और अभी भी इंटरफ़ेस पदानुक्रम (IInterfaceA से IInterfaceB विरासत प्राप्त हो)। मैं अपने व्युत्पन्न कंक्रीट कक्षाओं में सभी विरासत इंटरफ़ेस विधियों को दोहराना नहीं चाहता हूं। मैं यह कैसे कर सकता हूँ?
class IInterfaceA
{
public:
virtual void MethodA() = 0;
};
class IInterfaceB : IInterfaceA
{
public:
virtual void MethodB() = 0;
};
class TObjectA : public IInterfaceA
{
public:
void MethodA() { cout << "Method A"; }
};
class TObjectB : public TObjectA, public IInterfaceB
{
public:
void MethodB() { cout << "Method B"; }
};
void TestInterfaces()
{
IInterfaceB* b = new TObjectB(); // error: object of abstract class type "TObjectB" is not allowed
b->MethodB();
delete b;
}
आपको वर्चुअल बेस क्लास की आवश्यकता है। जैसे [यहां देखें] (http://stackoverflow.com/questions/4605556/when-virtual-inheritance-is-a-good-design/4606206#4606206) –