अंतिम अद्यतन:2026-10-12
C++ प्योर वर्चुअल फ़ंक्शन और एब्स्ट्रैक्ट क्लास¶
लेखक के बारे में:¶
व्यक्तिगत WeChat सार्वजनिक अकाउंट:

1.प्योर वर्चुअल फ़ंक्शन और एब्स्ट्रैक्ट क्लास¶
C++ में प्योर वर्चुअल फ़ंक्शन (या एब्स्ट्रैक्ट फ़ंक्शन) वह वर्चुअल फ़ंक्शन है जिसे हमने implement नहीं किया! हमें केवल उसे declare करना है! declaration में 0 assign करके प्योर वर्चुअल फ़ंक्शन declare किया जाता है!
- प्योर वर्चुअल फ़ंक्शन: बिना फ़ंक्शन बॉडी वाला वर्चुअल फ़ंक्शन
- एब्स्ट्रैक्ट क्लास: जिस क्लास में प्योर वर्चुअल फ़ंक्शन हो
एब्स्ट्रैक्ट क्लास केवल बेस क्लास की तरह नई क्लास derive करने के लिए उपयोग होती है, एब्स्ट्रैक्ट क्लास का ऑब्जेक्ट नहीं बनाया जा सकता, एब्स्ट्रैक्ट क्लास का पॉइंटर और रेफ़रें-> एब्स्ट्रैक्ट क्लास से derive हुई क्लास का ऑब्जेक्ट!
कोड उदाहरण: abstract_base.h, pure_virtual.cpp
2.एब्स्ट्रैक्ट क्लास implement करना¶
एब्स्ट्रैक्ट क्लास में: मेंबर फ़ंक्शन के अंदर प्योर वर्चुअल फ़ंक्शन कॉल किया जा सकता है, कंस्ट्रक्टर/डिस्ट्रक्टर के अंदर प्योर वर्चुअल फ़ंक्शन उपयोग नहीं किया जा सकता।
अगर कोई क्लास एब्स्ट्रैक्ट क्लास से derive हुई है, तो उसे बेस क्लास के सभी प्योर वर्चुअल फ़ंक्शन implement करने होंगे, तभी वह non-abstract क्लास बन सकती है।
// A为抽象类
class A {
public:
virtual void f() = 0; // 纯虚函数
void g(){ this->f(); }
A(){} // 构造函数
};
class B : public A{
public:
void f(){ cout<<"B:f()"<<endl;} // 实现了抽象类的纯虚函数
};
कोड उदाहरण: abstract.cpp
3.महत्वपूर्ण बिंदु¶
-
प्योर वर्चुअल फ़ंक्शन किसी क्लास को एब्स्ट्रैक्ट क्लास बना देता है
-
कंस्ट्रक्टर वर्चुअल फ़ंक्शन नहीं हो सकता, जबकि डिस्ट्रक्टर वर्चुअल डिस्ट्रक्टर हो सकता है
// 抽象类 class Base { public: Base(){ cout << "Constructor: Base" << endl; } virtual ~Base(){ cout << "Destructor : Base" << endl; } virtual void func() = 0; }; class Derived: public Base { public: Derived(){ cout << "Constructor: Derived" << endl; } ~Derived(){ cout << "Destructor : Derived" << endl;} void func(){cout << "In Derived.func()." << endl;} };जब बेस क्लास पॉइंटर derived क्लास ऑब्जेक्ट की ओर पॉइंट करे और ऑब्जेक्ट delete किया जाए, हम शायद उपयुक्त डिस्ट्रक्टर कॉल होना चाहें। अगर डिस्ट्रक्टर virtual न हो, तो केवल बेस क्लास का डिस्ट्रक्टर कॉल होगा।
4.पूरा उदाहरण¶
एब्स्ट्रैक्ट क्लास को derived क्लास inherit करके implement करती है!
कोड उदाहरण: derived_full.cpp
संबंधित विषय¶
- C++ assert | C++那些事
- C++ bit-field | C++那些事
- C भाषा से C++ पॉलीमॉर्फ़िज़्म | C++那些事
- C++ const constant और qualifier | C++那些事
- C++ const परिवार | C++那些事
- C++ dereference ऑपरेटर * | C++那些事
- C++ इनिशियलाइज़ेशन और असाइनमेंट | C++那些事
- C++ multiple return values लिखने के तरीके | C++那些事
- C++ mutable कीवर्ड | C++那些事
- C++ restrict और कंपाइलर अनुकूलन | C++那些事