2012-12-23 45 views
5

मैं कुछ पायथन कक्षाओं को सी ++ में बदलने की कोशिश कर रहा हूं लेकिन मुझे कुछ परेशानी हो रही है। मेरे पास एक बेस क्लास है जिसमें कक्षा (स्थैतिक) चर है और एक विधि है जो इसे लौटाती है।सी ++ स्थैतिक चर का उपयोग करते हुए विरासत सदस्य कार्य

class Base: 
    class_var = "Base" 
    @classmethod 
    def printClassVar(cls): 
     print cls.class_var 

class Derived(Base): 
    class_var = "Derived" 

d = Derived() 
d.printClassVar() 

जो बाहर वांछित व्युत्पन्न वर्ग चर प्रिंट, "व्युत्पन्न": मैं भी एक व्युत्पन्न वर्ग जो इतनी तरह वर्ग (स्थिर) चर ओवरराइड करता है,

अजगर में है। कोई विचार है कि मैं सी ++ में एक ही कार्यक्षमता कैसे प्राप्त कर सकता हूं? मैंने कोशिश की है लेकिन बेस क्लास के क्लास वैरिएबल को प्राप्त करना समाप्त कर दिया है।

class Base 
{ 
public: 
    void printStaticVar() {cout << get_string() << endl;} 
    static string s_var; 
    virtual string const& get_string() { return Base::s_var; } 
}; 
string Base::s_var = "Base"; 

class Derived : public Base 
{ 
public: 
    static string s_var; 
    virtual string const& get_string() { return Derived::s_var; } 
}; 
string Derived::s_var = "Derived"; 

void main() 
{ 
    Derived d; 
    d.printStaticVar(); 
} 

ध्यान दें कि printStaticVar स्थिर नहीं होना चाहिए:

सी ++ में

class Base 
{ 
public: 
    static void printStaticVar(){cout << s_var << endl;} 
    static string s_var; 
}; 
string Base::s_var = "Base"; 

class Derived : public Base 
{ 
public: 
    static string s_var; 
}; 
string Derived::s_var = "Derived"; 

void main() 
{ 
    Derived d; 
    d.printStaticVar(); 
} 

उत्तर

3

एक आभासी समारोह जो स्थिर सदस्य के लिए एक संदर्भ रिटर्न लिखें।


तुम भी स्ट्रिंग static गेटर के अंदर स्थानीय कर सकता है:

class Base 
{ 
public: 
    void printStaticVar() {cout << get_string() << endl;} 
    virtual string const& get_string() { 
     static string str = "Base"; 
     return str; 
    } 
}; 

class Derived : public Base 
{ 
public: 
    virtual string const& get_string() { 
     static string str = "Derived"; 
     return str; 
    } 
}; 

void main() 
{ 
    Derived d; 
    d.printStaticVar(); 
} 
+0

या, बजाय एक स्थिर चर बिल्कुल, बस वापसी होने के एक स्थिर, इस उदाहरण में। हालांकि यह सभी solutons के लिए उपयुक्त नहीं हो सकता है। –

0

एक और संभावना हो सकती है:

class Base 
{ 
    const std::string var; 
public: 
    Base(std::string s="Base") : var(s) {} 
    void printVar() { std::cout << var << std::endl } 
}; 
class Derived : public Base 
{ 
public: 
    Derived(std::string s="Derived") : Base(s) {} 
};