Abstract classes and pure virtual functions c++ In Hindi
C++ प्रोग्रामिंग लैंग्वेज में एब्स्ट्रैक्ट क्लास और प्योर वर्चुअल फ़ंक्शन एक बिल्ट-इन क्लास फीचर्स एंड फंक्शन है, जो मौजूदा क्लास में एब्स्ट्रैक्ट क्लास और प्योर वर्चुअल इंटरफ़ेस क्रिएट करने और OOPS ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में पॉलीमॉर्फिक क्लास बिहेवियर प्रॉपर्टीज प्रोवाइड करने के लिए एसेंशियल कॉन्सेप्ट या फीचर्स हैं। एब्स्ट्रैक्ट क्लास और प्योर वर्चुअल फंक्शन का यूज़ बेस या रुट क्लास को डिक्लेअर या डिफाइन करने में किया जाता है. जिन्हें डायरेक्ट किसी क्लास में इंस्टैंशिएट नहीं किया जा सकता है. लेकिन C++ यूजर उन्हें डिराइव्ड क्लास सबक्लास से इनहेरिट कर सकते है. जो मौजूदा क्लास में एक स्पेशल एब्स्ट्रैक्ट क्लास और प्योर वर्चुअल फ़ंक्शन फंक्शनैलिटी को इम्प्लीमेंट करते हैं।

What is an abstract class in C++ programming?
C++ प्रोग्रामिंग में एक एब्स्ट्रैक्ट क्लास एक यूजर डिफाइन कस्टम क्लास होती है, जिसमें कम से कम एक प्योर वर्चुअल फ़ंक्शन क्रिएटेड या डिफाइन होता है, और इस प्योर वर्चुअल फ़ंक्शन को मौजूदा क्लास में आटोमेटिक इंस्टैंशिएट नहीं किया जा सकता है। यह अन्य क्लास के लिए एक डिराइव करने के लिए एक बेस क्लास की तरह वर्क करता है, और बेस क्लास में डिराइव्ड क्लास के लिए एक कॉमन इंटरफ़ेस को प्रोवाइड करता है।
बेस क्लास में एक एब्स्ट्रैक्ट क्लास एक स्ट्रक्चर को क्रिएट या डिफाइन करता है, लेकिन कुछ क्लास मेथड को अनडिफाइंड के रूप में छोड़ देता है. जिससे डिराइव्ड क्लास या सबक्लास को उन क्लास मेथड के लिए अपने स्पेशल क्लास इम्प्लीमेंटेशन प्रोवाइड करने के लिए फॉर्स करना पड़ता है।
बेस क्लास में एब्स्ट्रैक्ट क्लास का यूज़ एक कॉमन क्लास इंटरफ़ेस या कॉन्ट्रैक्ट को डिक्लेअर करने में किया जाता है, जिसे बेस क्लास में डिफाइन डिराइव्ड क्लास या सबक्लास को फॉलो करना होता है. जिससे की मौजूदा क्लास में मल्टीप्ल इंडिविजुअल क्लास इम्प्लीमेंटेशन में कंसिस्टेंसी फिक्स होती है।
What is a pure virtual function in C++ programming?
C++ प्रोग्रामिंग में एक एक प्योर वर्चुअल फ़ंक्शन एक क्लास में डिफाइन कस्टम यूजर डिक्लेअर एक वर्चुअल फ़ंक्शन होता है. जिसका बेस या पैरेंट क्लास में कोई इम्प्लीमेंटेशन प्रोवाइड नहीं किया गया होता है, और एक प्योर वर्चुअल फंक्शन को बेस क्लास में डिफाइन डिराइव्ड क्लास या सबक्लास द्वारा इम्प्लीमेंट किया जाना चाहिए। किसी C++ प्रोग्राम में एक प्योर वर्चुअल फ़ंक्शन डिक्लेयर करने का सिंटैक्स क्लास फ़ंक्शन के डिक्लेरेशन को 0 के इक्वल सेट करना होता है.
virtual void func() = 0;
यहाँ इसका मतलब है कि मौजूदा यूजर डिफाइन फ़ंक्शन की बेस या रुट क्लास में कोई बॉडी डिफाइन नहीं है, और इसे किसी भी ऐसे डिराइव्ड क्लास सबक्लास में ओवरराइड किया जाना चाहिए जो एब्स्ट्रैक्ट नेचर का न हो।
Syntax of an abstract class in C++.
class AbstractClass {
public:
virtual void testFunction() = 0; // Here a pure virtual function is defined with the value 0
virtual ~AbstractClass() {} // Here we have defined a destructor, which can be a virtual function
};
Explanation of an abstract class in C++.
- यहाँ एब्स्ट्रैक्ट क्लास में फ़ंक्शन डिक्लेरेशन के अंत में = 0 से स्टार्ट किया है, जो इस फंक्शन को एक प्योर वर्चुअल फ़ंक्शन के रूप में क्रिएट करता है।
- जो मौजूदा क्लास को एब्स्ट्रैक्ट कर देता है, क्योंकि इसमें कम से कम एक प्योर वर्चुअल फ़ंक्शन डिफाइन होता है।
Unique features and functions of abstract classes and pure virtual functions in C++.
- याद रहे C++ प्रोग्रामिंग में एब्स्ट्रैक्ट क्लास को डायरेक्ट इंस्टैंशिएट नहीं किया जा सकता है।
- C++ प्रोग्रामिंग में यूजर डिफाइन एक प्योर वर्चुअल फ़ंक्शन एक कॉमन क्लास इंटरफ़ेस को डिफाइन करता है. लेकिन इसके इम्प्लीमेंटेशन को डिराइव्ड या सबक्लास क्लास पर कम्प्लीटली छोड़ देता है।
- डिराइव्ड क्लास या सबक्लास को एक कंक्रीट क्लास (जैसे, ऐसी यूजर डिफाइन क्लास जिन्हें क्लास में इंस्टैंशिएट किया जा सकता है) क्रिएट करने के लिए सभी प्योर वर्चुअल फ़ंक्शन को ओवरराइड करना होगा।
- यहाँ यूजर डिफाइन एब्स्ट्रैक्ट क्लास में अभी भी कंक्रीट फ़ंक्शन (जैसे, इम्प्लीमेंटेशन प्रोवाइड करने वाले फ़ंक्शन) डिफाइन हो सकते हैं. लेकिन आपको ऐसा करना भी एसेंशियल नहीं होता है।
- किसि यूजर डिफाइन क्लास में एक प्योर वर्चुअल फ़ंक्शन C++ यूजर को एक कॉन्ट्रैक्ट डिफाइन करने के फीचर्स प्रोवाइड करता हैं. जो मौजूदा क्लास में यह फिक्स करता है कि डिराइव्ड या सबक्लास क्लास में कुछ स्पेशल क्लास फंक्शनैलिटी को डायरेक्ट इम्प्लीमेंट करें।
Abstract Class and Pure Virtual Function Concepts in C++.
तो चलिए C++ प्रोग्रामिंग में एक एक्साम्प्ल क्रिएट करते हैं, जहाँ हम एक एब्स्ट्रैक्ट क्लास Diagram को प्योर वर्चुअल फ़ंक्शन के साथ डिफाइन करते हैं. जिसे डिराइव्ड क्लास द्वारा इम्प्लीमेंट किया गया है.
Example of an abstract class and a pure virtual function in C++.
#include <iostream>
#include <cmath>
using namespace std;
class Diagram {
public:
virtual double area() = 0; // here we create a area Pure virtual function initialize with 0 value
virtual double perimeter() = 0; // here we create a perimeter Pure virtual function initialize with 0 value
virtual ~Diagram() {} // here we create a base class Virtual destructor
};
class Circle : public Diagram {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() override {
return M_PI * radius * radius;
}
double perimeter() override {
return 2 * M_PI * radius;
}
};
class Triangle : public Diagram {
private:
double p, q, r;
public:
Triangle(double s1, double s2, double s3) : p(s1), q(s2), r(s3) {}
double area() override {
double s = (p + q + r) / 2; // here we use Semi-perimeter
return sqrt(s * (s – p) * (s – q) * (s – r)); // here we apply Heron’s formula
}
double perimeter() override {
return p + q + r;
}
};
int main() {
Diagram* Diagram1 = new Circle(7.0); // here we define Circle with radius 7 value
Diagram* Diagram2 = new Triangle(4.0, 6.0, 7.0); // here we define Triangle with 3 sides 4, 6, 7
cout << “The area of circle is – ” << Diagram1->area() << endl;
cout << “The Perimeter of circle is – ” << Diagram1->perimeter() << endl;
cout << “The area of Triangle is – ” << Diagram2->area() << endl;
cout << “The Perimeter of Triangle is – ” << Diagram2->perimeter() << endl;
delete Diagram1;
delete Diagram2;
return 0;
}
Explaining the Concepts of an Abstract Class and Pure Virtual Function in C++.
- यहाँ इस एक्साम्प्ल में Diagram एक कस्टम यूजर डिफाइन क्लास एक एब्स्ट्रैक्ट क्लास है, क्योंकि इसमें दो कस्टम प्योर वर्चुअल फ़ंक्शन क्रिएटेड होते हैं. जो की area() और perimeter() फंक्शन है। ये फ़ंक्शन सभी क्लास Diagram के लिए एक कॉन्ट्रैक्ट को डिफाइन करते हैं. लेकिन Diagram क्लास में खुद इसका कोई इम्प्लीमेंटेशन नहीं होता है।
- जिसमे Circle और Triangle क्लास Diagram से इनहेरिट होती हैं, और area() और perimeter() के अपने इम्प्लीमेंटेशन को प्रोवाइड करती हैं।
- प्रोग्राम बेस क्लास पॉइंटर्स (Diagram*) का यूज़ करके Circle और Triangle टाइप के ऑब्जेक्ट क्रिएट करता है, जो पॉलीमॉर्फिज़्म कांसेप्ट को रिप्रेजेंट करता है।
- हम इन क्लास ऑब्जेक्ट पर area() और perimeter() फ़ंक्शन को कॉल कर सकते हैं, और सही डिराइव्ड सबक्लास क्लास में इन फ़ंक्शन इनवोक किया जाता है।

