【发布时间】:2019-06-04 08:45:33
【问题描述】:
我想知道初始化抽象类的成员是否是最佳实践(至少有一个纯虚拟成员函数,可能是 dtor)。另一种选择是在继承类中进行。
在继承类中初始化
class IPlayer
{
public:
virtual ~IPlayer() {};
protected:
bool m_alive;
};
class Bomber : protected IPlayer
{
public:
Bomb(bool t_alive = true)
{
m_alive = t_alive;
}
~Bomb();
};
在父类、抽象类中初始化
class IPlayer
{
public:
virtual ~IPlayer() {};
protected:
bool m_alive { true };
};
class Bomber : protected IPlayer
{
public:
Bomb();
~Bomb();
};
我应该更喜欢哪一个,为什么?
【问题讨论】:
-
为
IPlayer提供一个protected构造函数,它将执行正确的初始化,并最终隐藏m_alive。 -
一般来说,没有关键的区别。如果您在父类中实例化它,则将其视为类的默认初始化。顺便说一句,您不应该在受保护模式下继承
IPlayer,因为这样您就无法通过标准方式对其进行转换。
标签: c++ c++11 inheritance initialization abstract-class