2012-11-27 15 views
6

I habe, und würde eine in meiner abgeleiteten Klasse initialisieren mag reagiert, mit anderem Wert (als Parameter genommen), ist dies möglich?C++ Initialisiere die Basisklasse 'const int in der abgeleiteten Klasse? eine Konstante int Variable in meiner Basisklasse

Hier ist, was ich getan habe:

// Base.h (methods implemented in Base.cpp in the actual code) 
class Base { 
    public: 
     Base(const int index) : m_index(index) {} 
     int getIndex() const { return m_index; } 
    private: 
     const int m_index; 
}; 

// Derived.h 
class Derived : public Base { 
    public: 
     Derived(const int index, const std::string name) : m_name(name) {} 
     void setName(const std::string name) { m_name = name; } 
     std::string getName() const { return m_name; } 
    private: 
     std::string m_name; 
}; 

Aber natürlich ist es mir für Base::Base() zu fragen, die nicht vorhanden ist, und wenn ich sie definiere, werde ich Standardwert für m_index geben, die ich nicht tun möchte tun. Muss ich const int m_index separat in jeder abgeleiteten Klasse definieren?

Similiar Frage, aber ich bin nicht sicher, ob die statische dies in irgendeiner Weise beeinflusst: C++ : Initializing base class constant static variable with different value in derived class?

Antwort

13

Rufen Sie einfach an den entsprechenden Base Konstruktor in der Derived ‚s Initialisierungsliste:

Derived(const int index, const std::string name) : Base(index), m_name(name) {} 
+1

WAS?!? Ich mache C++ seit 3 ​​bis 4 Jahren oder so, und ich bin noch nie dazu gekommen? Ich habe immer gedacht, dass ich den Standard-Konstruktor verwenden muss ... Danke, du wirst es in einer Minute akzeptieren. –

1

Sie kann den Basiskonstruktor wie folgt aufrufen:

class B1 { 
    int b; 
public:  
    // inline constructor 
    B1(int i) : b(i) {} 
}; 

class B2 { 
    int b; 
protected: 
    B2() {}  
    // noninline constructor 
    B2(int i); 
}; 

class D : public B1, public B2 { 
    int d1, d2; 
public: 
    D(int i, int j) : B1(i+1), B2(), d1(i) 
    { 
    d2 = j; 
    } 
}; 

Seit c + +11 Sie können sogar Konstruktoren der gleichen Klasse verwenden. Das Feature heißt delegierende Konstruktoren.

Derived(){} 
Derived(const int index, const std::string name) : Derived() {} 
Verwandte Themen