2012-11-27 13 views
6

私は基底クラスに定数int変数を持っていますが、これは可能なのですが、別の値(パラメータとして取られる)を持つ派生クラスの応答を初期化したいのですか?ここでC++派生クラスの基本クラス 'const intを初期化しますか?

は、私がやったことだ:

// 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; 
}; 

しかし、明らかにそれは私がそうでない、存在しない、と私はそれを定義した場合、私はm_indexのデフォルト値を与える必要がありますBase::Base()のための私を求めていますやってみたいです。派生クラスごとに別々に​​を定義する必要はありますか?

似質問が、静的はどのような方法で、この影響を与える場合、私はわからない: C++ : Initializing base class constant static variable with different value in derived class?

答えて

13

だけDerivedの初期化リストで適切なBaseコンストラクタを呼び出す:

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

私は3〜4年か何かのようにC++をやっていましたが、これに遭遇したことはありませんか?私はいつもデフォルトのコンストラクタを使う必要があると思っています...ありがとう、ちょっと待ってください。 –

1

あなたは

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; 
    } 
}; 

このように、基本コンストラクタを呼び出すことができます。 +11同じクラスのコンストラクタを使用することもできます。この機能は委任コンストラクタと呼ばれます。

Derived(){} 
Derived(const int index, const std::string name) : Derived() {} 
関連する問題