C ++ Abstract Class और Pure Virtual Function

इस ट्यूटोरियल में, हम उदाहरणों की मदद से अमूर्त वर्चुअल फ़ंक्शंस और अमूर्त कक्षाओं के बारे में जानेंगे।

शुद्ध वर्चुअल फ़ंक्शंस के बारे में जानने से पहले, इन ट्यूटोरियल्स की जाँच ज़रूर करें:

  • सी ++ विरासत
  • C ++ वर्चुअल फ़ंक्शंस

सी ++ शुद्ध आभासी कार्य

शुद्ध आभासी कार्यों का उपयोग किया जाता है

  • यदि किसी फ़ंक्शन का आधार वर्ग में कोई उपयोग नहीं है
  • लेकिन फ़ंक्शन को उसके सभी व्युत्पन्न वर्गों द्वारा लागू किया जाना चाहिए

एक उदाहरण लेते हैं,

मान लीजिए, हमने वर्ग से व्युत्पन्न Triangle, Squareऔर Circleकक्षाएं ली हैं , और Shapeहम इन सभी आकृतियों के क्षेत्र की गणना करना चाहते हैं।

इस स्थिति में, हम एक शुद्ध आभासी फ़ंक्शन बना सकते हैं जिसका नाम calculateArea()है Shape। चूंकि यह एक शुद्ध आभासी कार्य है, सभी व्युत्पन्न वर्ग Triangle, Squareऔर कार्यान्वयन के साथ फ़ंक्शन Circleको शामिल करना चाहिए calculateArea()

एक शुद्ध आभासी फ़ंक्शन में फ़ंक्शन बॉडी नहीं होती है और इसे समाप्त होना चाहिए = 0। उदाहरण के लिए,

 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );

नोट:= 0 वाक्य रचना मतलब यह नहीं है कि हम कार्य करने के लिए 0 बताए जाते हैं। यह ठीक उसी तरह है जब हम शुद्ध आभासी कार्यों को परिभाषित करते हैं।

सार वर्ग

एक वर्ग जिसमें एक शुद्ध आभासी फ़ंक्शन होता है, एक अमूर्त वर्ग के रूप में जाना जाता है। उपरोक्त उदाहरण में, कक्षा Shapeएक सार वर्ग है।

हम एक अमूर्त वर्ग की वस्तुएँ नहीं बना सकते। हालाँकि, हम उनसे कक्षाएं ले सकते हैं, और उनके डेटा सदस्यों और सदस्य कार्यों (शुद्ध आभासी कार्यों को छोड़कर) का उपयोग कर सकते हैं।

उदाहरण: C ++ Abstract Class और Pure Virtual Function

 // C++ program to calculate the area of a square and a circle #include using namespace std; // Abstract class class Shape ( protected: float dimension; public: void getDimension() ( cin>> dimension; ) // pure virtual Function virtual float calculateArea() = 0; ); // Derived class class Square : public Shape ( public: float calculateArea() ( return dimension * dimension; ) ); // Derived class class Circle : public Shape ( public: float calculateArea() ( return 3.14 * dimension * dimension; ) ); int main() ( Square square; Circle circle; cout << "Enter the length of the square: "; square.getDimension(); cout << "Area of square: " << square.calculateArea() << endl; cout << "Enter radius of the circle: "; circle.getDimension(); cout << "Area of circle: " << circle.calculateArea() << endl; return 0; )

आउटपुट

 एक वर्ग के क्षेत्रफल की गणना करने के लिए लंबाई दर्ज करें: 4 वर्ग का क्षेत्रफल: 16 एक वृत्त के क्षेत्रफल की गणना करने के लिए त्रिज्या दर्ज करें: 5 वृत्त का क्षेत्रफल: 78.5

इस कार्यक्रम में, कक्षा के virtual float calculateArea() = 0;अंदर Shapeएक शुद्ध आभासी कार्य है।

इसलिए हमें calculateArea()अपनी व्युत्पन्न दोनों कक्षाओं में कार्यान्वयन प्रदान करना होगा , अन्यथा हमें एक त्रुटि मिलेगी।

दिलचस्प लेख...