2010-03-27 18 views
5

की विधि का उपयोग करना एक अमूर्त वर्ग की विधि का उपयोग करना संभव है? मैं बिना किसी उदाहरण के कक्षा के तरीके का उपयोग कैसे कर सकता हूं?एक अमूर्त वर्ग

उत्तर

6

यदि आप static के रूप में कोई विधि घोषित करते हैं, तो आप इसे क्लास इंस्टेंस की आवश्यकता के बिना सीधे कॉल कर सकते हैं। अन्यथा आपको व्युत्पन्न वर्ग का उदाहरण होना होगा।

चूंकि एक सार वर्ग को तुरंत चालू नहीं किया जा सकता है, इसलिए आप तक एक अमूर्त वर्ग की विधि को सीधे कॉल नहीं कर सकते हैं जब तक यह एक स्थिर विधि है।

#include <iostream> 
#include <ostream> 
#include <fstream> 
using namespace std; 

class stest{ 
    public: 
    static void test(); 
    virtual void a() = 0; 
    }; 

void stest::test(){ cout << "test\n"; } 

int main(){ 
    stest::test(); 
    return 0; 
} 

वैकल्पिक रूप से, अगर आप एक वर्ग एक अमूर्त वर्ग से प्राप्त होता है कि का एक उदाहरण है, तो आप एक के रूप में यह इलाज कर सकते हैं: लेकिन आप एक अमूर्त वर्ग सीधे की एक स्थिर विधि कॉल कर सकते हैं, यहाँ एक त्वरित उदाहरण है अमूर्त वर्ग का उदाहरण, और इस पर किसी भी तरीके से कॉल कर सकते हैं।

+0

आपको बहुत बहुत धन्यवाद – cemregoksu

5

सार कक्षा का मतलब यह नहीं है कि आपके पास कोई उदाहरण नहीं है, इसका तात्पर्य है कि उदाहरण का रनटाइम प्रकार वास्तव में कुछ व्युत्पन्न वर्ग है जो सार आधार वर्ग में शुद्ध आभासी कार्यों के लिए कार्यान्वयन प्रदान करता है। लेकिन एक अमूर्त वर्ग के सभी सदस्य कार्यों को शुद्ध वर्चुअल नहीं होना चाहिए, आप ठोस और अमूर्त कार्यों का मिश्रण कर सकते हैं।

जब आप "अमूर्त वर्ग पर" सदस्य कार्यों को कॉल करते हैं, तो शुद्ध आभासी वाले सभी वर्चुअल फ़ंक्शंस को पॉलीमोर्फिक कहा जाता है। इसलिए व्युत्पन्न वर्ग में परिभाषित ओवरराइड निष्पादित हो जाता है। गैर वर्चुअल फ़ंक्शंस बेस क्लास में परिभाषा को कॉल करते हैं, आपके पास शुद्ध ठोस फ़ंक्शन नहीं हो सकते हैं, इसलिए एक अमूर्त वर्ग को गैर वर्चुअल फ़ंक्शंस के लिए कार्यान्वयन भी प्रदान करना पड़ता है।

शुद्ध वर्चुअल फ़ंक्शन के लिए सार वर्च क्लास द्वारा प्रदान किए गए कार्यान्वयन के लिए भी संभव है। एक ओवरराइड अभी भी प्रदान किया जाना है, लेकिन फिर ओवरराइड बेस क्लास कार्यान्वयन को कॉल कर सकता है।

संबंधित मुद्दे