2011-08-29 17 views
34

संभव डुप्लिकेट:
C++ static virtual members?क्या हमारे पास आभासी स्थैतिक विधि हो सकती है? (C++)

हम एक आभासी स्थिर विधि मिल सकता है (C++)? मैं निम्नलिखित कोड संकलन करने की कोशिश की है:

#include <iostream> 
using namespace std; 

class A 
{ 
public: 
    virtual static void f() {cout << "A's static method" << endl;} 
}; 

class B :public A 
{ 
public: 
    static void f() {cout << "B's static method" << endl;} 
}; 

int main() 
{ 
    /* some code */ 
    return 0; 
} 

लेकिन संकलक का कहना है कि:

member 'f' cannot be declared both virtual and static 

इसलिए मुझे लगता है कि जवाब नहीं है, लेकिन क्यों?

धन्यवाद, रॉन

उत्तर

47

एक कक्षा में एक समारोह में नंबर static मतलब यह है कि समारोह पर संचालित करने के लिए एक वस्तु की जरूरत नहीं है। virtual का मतलब है कि कार्यान्वयन कॉलिंग ऑब्जेक्ट के प्रकार पर निर्भर करता है। स्थैतिक के लिए कोई कॉलिंग ऑब्जेक्ट नहीं है, इसलिए static और virtual दोनों को एक ही फ़ंक्शन पर यह समझ में नहीं आता है।

2

क्योंकि कक्षा में this सूचक नहीं है। वर्चुअल फ़ंक्शन लुकअप टेबल में है। एक त्वरित Google आपको वर्चुअल फ़ंक्शन लुकअप टेबल के बारे में और बता सकता है।

4

ऐसा नहीं लगता कि यह संभव है क्योंकि आप ऑब्जेक्ट ए ऑब्जेक्ट के बिना A::F(); पर कॉल कर सकते हैं। इसे वर्चुअल और स्थिर बनाना एक विरोधाभास होगा।

+3

आह, फिर स्थैतिक अर्थ यह है कि * यह अस्तित्व में नहीं है, वर्चुअल का अर्थ है कि विधि में यह सूचक है। दोनों के संयोजन एक विरोधाभास बनाता है। अच्छा धन्यवाद –

1

नहीं, static फ़ंक्शन वैश्विक फ़ंक्शन की तरह है, लेकिन क्लास नेमस्पेस के अंदर भी है। virtual व्युत्पन्न वर्ग में विरासत और पुनर्मूल्यांकन का तात्पर्य है - आप 'वैश्विक' फ़ंक्शन को पुन: कार्यान्वित नहीं कर सकते हैं।

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