Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में इंटरफेस कैसे घोषित करें?

एक इंटरफेस किसी विशेष कार्यान्वयन के लिए प्रतिबद्ध हुए बिना C++ क्लास के व्यवहार या क्षमताओं का वर्णन करता है।

C++ इंटरफेस को एब्स्ट्रैक्ट क्लासेस का उपयोग करके लागू किया जाता है और इन एब्स्ट्रैक्ट क्लासेस को डेटा एब्स्ट्रैक्शन के साथ भ्रमित नहीं किया जाना चाहिए जो संबंधित डेटा से कार्यान्वयन विवरण को अलग रखने की एक अवधारणा है।

कम से कम एक फंक्शन को प्योर वर्चुअल फंक्शन घोषित करके एक क्लास को एब्स्ट्रैक्ट बनाया जाता है। एक प्योर वर्चुअल फंक्शन को इसकी घोषणा में "= 0" रखकर निर्दिष्ट किया जाता है -

class Box {
public:
    // प्योर वर्चुअल फंक्शन
    virtual double getVolume() = 0;
private:
    double length; // बॉक्स की लंबाई
    double breadth; // बॉक्स की चौड़ाई
    double height; // बॉक्स की ऊंचाई
};

एब्स्ट्रैक्ट क्लास (जिसे अक्सर ABC कहा जाता है) का उद्देश्य एक उपयुक्त बेस क्लास प्रदान करना है जिससे अन्य क्लासेस इनहेरिट कर सकें। एब्स्ट्रैक्ट क्लासेस का उपयोग ऑब्जेक्ट्स को इंस्टेंशिएट करने के लिए नहीं किया जा सकता और ये केवल इंटरफेस के रूप में काम करती हैं। एब्स्ट्रैक्ट क्लास के ऑब्जेक्ट को इंस्टेंशिएट करने का प्रयास करने पर संकलन त्रुटि होती है।

इस प्रकार, यदि ABC के सबक्लास को इंस्टेंशिएट करने की आवश्यकता है, तो उसे प्रत्येक वर्चुअल फंक्शन को लागू करना होगा, जिसका अर्थ है कि यह ABC द्वारा घोषित इंटरफेस का समर्थन करता है। एक डेराइव्ड क्लास में प्योर वर्चुअल फंक्शन को ओवरराइड करने में विफलता, फिर उस क्लास के ऑब्जेक्ट्स को इंस्टेंशिएट करने का प्रयास, एक संकलन त्रुटि है।

क्लासेस जिनका उपयोग ऑब्जेक्ट्स को इंस्टेंशिएट करने के लिए किया जा सकता है, उन्हें कंक्रीट क्लासेस कहा जाता है।

निम्नलिखित उदाहरण पर विचार करें जहां पैरेंट क्लास बेस क्लास को getArea() नामक फंक्शन को लागू करने के लिए एक इंटरफेस प्रदान करती है -

उदाहरण कोड

#include <iostream>
using namespace std;

class Shape { // बेस क्लास
public:
    // इंटरफेस फ्रेमवर्क प्रदान करने वाला प्योर वर्चुअल फंक्शन
    virtual int getArea() = 0;
    void setWidth(int w) {
        width = w;
    }
    void setHeight(int h) {
        height = h;
    }
protected:
    int width;
    int height;
};

class Rectangle: public Shape { // डेराइव्ड क्लासेस
public:
    int getArea() {
        return (width * height);
    }
};

class Triangle: public Shape {
public:
    int getArea() {
        return (width * height)/2;
    }
};

int main(void) {
    Rectangle Rect;
    Triangle Tri;
    Rect.setWidth(5);
    Rect.setHeight(7);
    // ऑब्जेक्ट का क्षेत्रफल प्रिंट करें।
    cout << "Total Rectangle area: " << Rect.getArea() << endl;
    Tri.setWidth(5);
    Tri.setHeight(7);
    // ऑब्जेक्ट का क्षेत्रफल प्रिंट करें।
    cout << "Total Triangle area: " << Tri.getArea() << endl;
    return 0;
}

आउटपुट

Total Rectangle area: 35
Total Triangle area: 17

आप देख सकते हैं कि कैसे एक एब्स्ट्रैक्ट क्लास ने getArea() के संदर्भ में एक इंटरफेस को परिभाषित किया और दो अन्य क्लासेस ने उसी फंक्शन को लागू किया लेकिन आकृति के लिए विशिष्ट क्षेत्रफल की गणना करने के लिए अलग एल्गोरिदम के साथ।

डिजाइन रणनीति

एक ऑब्जेक्ट-ओरिएंटेड सिस्टम सभी बाहरी एप्लिकेशन के लिए उपयुक्त एक सामान्य और मानकीकृत इंटरफेस प्रदान करने के लिए एक एब्स्ट्रैक्ट बेस क्लास का उपयोग कर सकता है। फिर, उस एब्स्ट्रैक्ट बेस क्लास से इनहेरिटेंस के माध्यम से, डेराइव्ड क्लासेस बनाई जाती हैं जो समान रूप से काम करती हैं।

क्षमताएं (यानी, पब्लिक फंक्शन्स) जो बाहरी एप्लिकेशन द्वारा प्रदान की जाती हैं, एब्स्ट्रैक्ट बेस क्लास में प्योर वर्चुअल फंक्शन्स के रूप में प्रदान की जाती हैं। इन प्योर वर्चुअल फंक्शन्स के कार्यान्वयन उन डेराइव्ड क्लासेस में प्रदान किए जाते हैं जो एप्लिकेशन के विशिष्ट प्रकारों से मेल खाते हैं।

यह आर्किटेक्चर सिस्टम के परिभाषित होने के बाद भी नए एप्लिकेशन को सिस्टम में आसानी से जोड़ने की अनुमति देता है।

  1. C++ में new का उपयोग करके 2D ऐरे कैसे घोषित करें C++ में new का उपयोग करके 2D ऐरे कैसे घोषित करें

    एक डायनामिक 2D ऐरे मूल रूप से ऐरे के पॉइंटर्स का ऐरे होता है। यहां 3 x 4 आयाम वाले 2D ऐरे का एक आरेख है। एल्गोरिदम Begin ऐरे के आयाम घोषित करें। new का उपयोग करके 2D ऐरे a[][] को डायनामिक रूप से आवंटित करें। ऐरे को तत्वों से भरें। ऐरे प्रिंट करें। इसे हटाकर मेमोरी साफ़ करें। End

  1. - Java 9 में JShell में क्लास और इंटरफेस कैसे घोषित करें?

    JShell में डिक्लेरेशन JShell main() मेथड की आवश्यकता के बिना या हमारे कोड को निष्पादित करने से पहले इसे कंपाइल करने की आवश्यकता के बिना Java और Java API को त्वरित प्रोटोटाइपिंग, डीबगिंग, और सीखने के लिए एक इंटरैक्टिव शेल प्रदान करता है। क्लास डिक्लेरेशन हम Java भाषा में जैसे कोड लिखते हैं वैसे ही क

  1. - Python क्लास में ग्लोबल वेरिएबल कैसे डिक्लेयर करें?

    ग्लोबल वेरिएबल वह वेरिएबल है जिसका ग्लोबल स्कोप होता है, अर्थात यह पूरे प्रोग्राम में विजिबल और एक्सेसिबल होता है, जब तक कि इसे शैडो न किया जाए। सभी ग्लोबल वेरिएबल्स का समूह प्रोग्राम के ग्लोबल एनवायरनमेंट या ग्लोबल स्कोप के रूप में जाना जाता है। हम कीवर्ड global का उपयोग करके किसी वेरिएबल को ग्लोबल