如何使用默认参数从构造函数中调用超级构造函数?

时间:2015-07-14 11:24:34

标签: c++ inheritance constructor

我有两个C ++类,一个基类和一个子类。基类定义了一些属性,子类定义了其他属性。现在,在子类中,构造函数定义了几个默认参数,它也需要包含基类的默认参数。我该怎么做?

示例:

// Base.h
class Base {
    protected:
        State _state;
        State _previousState;

    public: Base();
};

// Sub.h
class Sub : public Base {
    private:
        int _rate;
        int _checkCount;

    public: explicit Sub(int sampleRate);
};

// Sub.cpp
Sub::Sub(int rate)
    :_state(Silent),
    _previousState(Running),
    _rate(rate),
    _checkCount(0)
{
}

显然,在Sub.ccp构造函数中,_state和_previousState是错误的。如何将它们正确地整合到这种结构中?

2 个答案:

答案 0 :(得分:5)

为基础构造函数提供一些参数,并使用参数调用它:

Base::Base(State state = {}, State previousState = {})
   : _state(state)
   , _previousState(previousState)
{}

// ...

Sub::Sub(int rate)
   : Base(Silent, Running)
   , _rate(rate)
   , _checkCount(0)
{}

答案 1 :(得分:2)

您可以提供具有基类默认值的默认构造函数

heroku config:set DB_POOL=5

另一种方式:由于基类中的数据成员受到保护,您可以在子类的构造函数体中更改其值

heroku config:set MAX_THREADS=5