जावा interface
का अनुकरण करने के लिए, आप केवल शुद्ध आभासी कार्यों के साथ एक साधारण आधार का उपयोग कर सकते हैं।
आपको वर्चुअल विरासत का उपयोग करने की आवश्यकता है, अन्यथा आप बार-बार विरासत प्राप्त कर सकते हैं: एक ही कक्षा सी ++ में एक से अधिक बार बेस क्लास हो सकती है। इसका मतलब है कि इस आधार वर्ग की पहुंच इस मामले में संदिग्ध होगी। सी ++ में, एक आभासी समारोह अधिभावी केवल आभासी समारोह घोषणा के साथ वर्ग के एक व्युत्पन्न वर्ग में किया जा सकता, जावा, एक विधि के लिए overrider में जबकि:
सी ++ नहीं जावा interface
की सटीक बराबर प्रदान करता है एक बेस क्लास में interface
में घोषित किया जा सकता है।
[उदाहरण:
struct B1 {
void foo();
};
struct B2 {
virtual void foo() = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
inherits भी समारोह घोषणाओं: B1::foo()
और B2::foo()
।
B2::foo()
शुद्ध वर्चुअल है, इसलिए D::B2::foo()
भी है; B1::foo()
B2::foo()
ओवरराइड नहीं करता है क्योंकि B2
B1
का व्युत्पन्न वर्ग नहीं है।
इस प्रकार, D
एक सार श्रेणी है।
--end उदाहरण]
वैसे भी, तुम क्यों सी ++ में जावा के मनमाने ढंग से सीमा का अनुकरण करेंगे?
संपादित करें: स्पष्टीकरण के लिए जोड़ा गया उदाहरण।
सी ++ पूर्ण [एकाधिक विरासत] (http://en.wikipedia.org/wiki/Multiple_inheritance) का समर्थन करता है, इसलिए जावा में कक्षाओं और इंटरफेस के बीच कोई अंतर नहीं है। यदि आप सभी शुद्ध वर्चुअल विधियों के साथ कक्षा बनाते हैं तो यह जावा इंटरफेस के बराबर है। – DaoWen
केवल शुद्ध आभासी सदस्य कार्यों के साथ एक सार वर्ग। – oldrinb
वीसी ++ के '__interface' कीवर्ड पर भी विचार करें। एमएसडीएन की जांच करें। – MasterMastic