Interfaces in C++ in Hindi
C++ प्रोग्रामिंग लैंग्वेज में क्लास इंटरफ़ेस किसी यूजर डिफाइन क्लास में एक डिज़ाइन पैटर्न के रूप में जाने जाते हैं. जो एक बेस क्लास में बिना किसी इम्प्लीमेंटेशन प्रोवाइड किए गए प्योर वर्चुअल फ़ंक्शन के एक सेट को डिफाइन करते है। क्लास में डिफाइन एक कस्टम इंटरफ़ेस एक क्लास में एक स्पेशल बिहेवियर कॉन्ट्रैक्ट को फॉलो करता है, यह मौजूदा क्लास में फिक्स करता है कि डिराइव्ड क्लास या सबक्लास इम्प्लीमेंटेशन डिटेल्स को हाइड करते हुए कुछ कस्टम क्लास फ़ंक्शन मेथड को इम्प्लीमेंट करते है। यूजर डिफाइन इंटरफ़ेस किसी क्लास में कंसिस्टेंसी को अप्लाई करने और मौजूदा प्रोग्राम सोर्स कोड को रीयूज़ और पॉलीमॉर्फिज़्म C++ कांसेप्ट बिहैवियर को इनक्रीस करते हैं।

ट्रेडिशनल C++ प्रोग्रामिंग में कुछ अन्य पॉपुलर प्रोग्रामिंग लैंग्वेज के जैसे, Java या C# लैंग्वेज की तरह C++ में कोई डेडिकेटेड क्लास इंटरफ़ेस कीवर्ड डिफाइन नहीं होता है। जैसाकि, C++ यूजर ऐसे एब्सट्रैक्ट क्लास को अप्लाई करके क्लास इंटरफ़ेस को इम्प्लीमेंट कर सकते हैं. जिनमें सिर्फ़ प्योर वर्चुअल फ़ंक्शन डिफाइन होते हैं। ये मौजूदा क्लास में एक एब्सट्रैक्ट क्लास कॉन्ट्रैक्ट या इंटरफ़ेस के रूप में काम करते हैं. जिन्हें डिराइव्ड क्लास या सबक्लास में इम्प्लीमेंट करना होता है।
Important features of the interface concept in C++ programming.
- Pure virtual functions – यूजर डिफाइन क्लास में एक इंटरफ़ेस में सिर्फ़ एक प्योर वर्चुअल फ़ंक्शन डिक्लेअर होते हैं. जैसे, मौजूदा क्लास में ऐसे फ़ंक्शन जो डिक्लेयर किए गए हैं, लेकिन क्लास इंटरफ़ेस में डिफाइन नहीं किए गए हैं. उन्हें बेस क्लास की बजाय डिराइव्ड क्लास या सबक्लास के द्वारा इम्प्लीमेंट किया जा सकता है।
- No data members – समान्य रूप से, C++ प्रोग्राम में डिफाइन इंटरफ़ेस में क्लास डेटा मेंबर नहीं होते हैं. जैसाकि टेक्निकली रूप से इनमे नॉन-स्टैटिक क्लास डेटा मेंबर डिफाइन हो सकते हैं. लेकिन एक सामान्य क्लास इंटरफ़ेस डिज़ाइन में ऐसा करने को अवॉयड किया जाता है।
- No constructor or destructor – क्योंकि क्लास में डिफाइन एक इंटरफ़ेस को इंस्टैंशिएट नहीं किया जाता है. इस वजह से इसमें सामान्य रूप से कोई कंस्ट्रक्टर क्रिएट नहीं होता है. (C++ पॉलीमॉर्फिज़्म कांसेप्ट के लिए ज़रूरी वर्चुअल डिस्ट्रक्टर मेथड को छोड़कर)।
- Multiple inheritance – जैसाकि C++ प्रोग्रामिंग मल्टीपल इनहेरिटेंस कांसेप्ट को सपोर्ट करता है. इस वजह से एक क्लास में कई एब्स्ट्रैक्ट क्लास से इनहेरिट करके कई इंटरफ़ेस को इम्प्लीमेंट कर सकती है।
Creating an Interface in C++ Programming.
यूजर डिफाइन C++ प्रोग्राम में इंटरफ़ेस समान्य रूप से एक प्योर वर्चुअल फ़ंक्शन वाला एक एब्स्ट्रैक्ट क्लास मेथड होता है।
तो चलिए C++ प्रोग्रामिंग में किसी क्लास में एक इंटरफ़ेस को डिफाइन करने और उसे अप्लाई करने का एक डिटेल एक्साम्प्ल देखें।
Detailed example of interface implementation in C++.
#include <iostream>
using namespace std;
// here we define a class Interface with Diagram
class Diagram {
public:
virtual void draw() const = 0;
virtual double area() const = 0;
virtual ~Diagram() {}
};
// here we create a class Interface with Previewable
class Previewable {
public:
virtual void preview() const = 0;
virtual ~Previewable() {}
};
// here we create Concrete class: Triangle implementing Diagram and Previewable
class Triangle : public Diagram, public Previewable {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
// here we Implementing Diagram class interface
void draw() const override {
cout << “Now we Draw a Triangle with base – ” << base
<< ” and its height is – ” << height << endl;
}
double area() const override {
return 0.10 * base * height;
}
// here we Implementing the Previewable interface
void preview() const override {
cout << “The Triangle’s area is – ” << area() << endl;
}
};
// here we create a Concrete class: Rectangle implementing Diagram and Previewable method
class Rectangle : public Diagram, public Previewable {
private:
double length, width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
void draw() const override {
cout << “Now we Drawing a Rectangle with length – ” << length
<< ” and its width is – ” << width << endl;
}
double area() const override {
return length * width;
}
void preview() const override {
cout << “The Rectangle’s area – ” << area() << endl;
}
};
int main() {
Diagram* diagramfirst = new Triangle(12.0, 7.0);
Diagram* diagramsecond = new Rectangle(7.0, 5.0);
// here we define Polymorphic class behaviour
diagramfirst->draw();
diagramsecond->draw();
Previewable * Previewable1 = dynamic_cast<Previewable*>(diagramfirst);
Previewable * Previewable2 = dynamic_cast<Previewable*>(diagramsecond);
if (Previewable1)
Previewable1->preview();
if (Previewable2)
Previewable2->preview();
delete diagramfirst;
delete diagramsecond;
return 0;
}
Explanation of interface implementation in C++.
Interface Class Method.
- यहाँ इस एक्साम्प्ल में Diagram क्लास एक यूजर डिफाइन एब्स्ट्रैक्ट बेस क्लास मेथड है. जिसमें दो प्योर वर्चुअल फ़ंक्शन (draw() और area()) 0 वैल्यू के साथ डिक्लेअर किए गए हैं। यह क्लास में इसे एक इंटरफ़ेस के रूप में क्रिएट करता है।
- जिसमे Previewable नाम से एक क्लास और क्लास इंटरफ़ेस को डिफाइन किया गया है, जिसमें एक प्योर वर्चुअल फ़ंक्शन preview() नाम से डिक्लेअर किया गया है।
Concrete Class Method.
- इसमें Triangle और Rectangle एक कंक्रीट क्लास मेथड हैं, जो Diagram और Previewable क्लास इंटरफ़ेस को इम्प्लीमेंट करते हैं।
- जहा दोनों क्लास में draw(), area(), और preview() क्लास फ़ंक्शन के लिए एक कंक्रीट मेथड इम्प्लीमेंटेशन को प्रोवाइड करते हैं।
Polymorphism Class Method.
- C++ यूजर डिराइव्ड क्लास के ऑब्जेक्ट को रेफर करने के लिए बेस क्लास पॉइंटर्स के माध्यम से पॉलीमॉर्फिज़्म को यूज़ करते हैं। जिसमे draw() फ़ंक्शन को पॉलीमॉर्फिकली कॉल किया जाता है।
- C++ यूजर dynamic_cast मेथड का यूज़ करके मौजूदा एक्सप्रेशन में यह चेक करते हैं कि बेस क्लास पॉइंटर को Printable पॉइंटर पर सेफली कास्ट किया जा सकता है, या नहीं, जिससे हम preview() फ़ंक्शन को जरूरत पड़ने पर कॉल कर सकें।
Multiple Class Inheritance Concept.
- इसमें Triangle और Rectangle क्लास, Diagram और Previewable दोनों क्लास इंटरफ़ेस से इनहेरिट करते हैं। यह C++ प्रोग्राम में मल्टीपल क्लास इनहेरिटेंस कांसेप्ट का एक एक्साम्प्ल है. जो एक यूजर डिफाइन क्लास को मल्टीप्ल क्लास इंटरफ़ेस को इम्प्लीमेंट करने की परमिशन प्रोवाइड करता है।

