如何使用默认参数从构造函数调用超级构造函数? 我有两个C++类,一个基类和一个子类。基类定义一些属性,子类定义一些其他属性。现在,在子类中,构造函数是用几个默认参数定义的,它还需要包含基类中的默认参数。我该怎么做
例如:如何使用默认参数从构造函数调用超级构造函数? 我有两个C++类,一个基类和一个子类。基类定义一些属性,子类定义一些其他属性。现在,在子类中,构造函数是用几个默认参数定义的,它还需要包含基类中的默认参数。我该怎么做,c++,inheritance,constructor,C++,Inheritance,Constructor,例如: // 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 sampleRat
// 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参数放错了位置。如何将它们正确地集成到此构造中?方法是为基本构造函数提供一些参数,并使用参数调用它:
Base::Base(State state = {}, State previousState = {})
: _state(state)
, _previousState(previousState)
{}
// ...
Sub::Sub(int rate)
: Base(Silent, Running)
, _rate(rate)
, _checkCount(0)
{}
您可以为基类提供带有默认值的默认构造函数
// 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)
_rate(rate),
_checkCount(0)
{
_state=Slience;
_previousState=Running;
}
另一种方式:由于基类中的数据成员受到保护,因此可以在子类的构造函数函数体中更改其值
// 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)
_rate(rate),
_checkCount(0)
{
_state=Slience;
_previousState=Running;
}
请选择“派生”和“基础”,并一致使用这些术语。“Sub”和“super”是混淆的;在这两组术语之间切换更糟糕……如果您在答案中添加一些解释,您可能会获得更多的投票。在子类主体中指定值也可以,谢谢您的提示!谢谢但是,它已经在头文件中定义了构造函数。如果我想在Base.cpp中使用实际的构造函数实现呢?@hexagonstar:我不明白。也许我只是误解了这一点。如果我在.h文件中为一个ctor提供大括号,这意味着它是在那里定义的,但是如果ctor的大括号不在.h文件中,它们应该在.cpp文件中定义,不是吗?或者它的定义在哪里有关系吗(我想是的)?@hexagonstar:对不起,我不知道你在问什么。我已经向您展示了构造函数的参数列表和定义。取决于您如何安排声明和定义,就像您将用任何其他构造函数和成员函数一样。对C++仍然是新的,并且困惑为什么构造函数实现可以在头文件中定义。但我已经掌握了窍门,谢谢!