我想知道是否最好的方法是初始化抽象类的成员(至少具有一个纯虚拟成员函数,可能是dtor)。另一种选择是在继承的类中进行。
decimal d = 0x2c6f;
char c = (char)d; //it is an upside down A, viz: Ɐ
char cc = '$';
decimal dd = (decimal)cc; //dd is now: 36
class IPlayer
{
public:
virtual ~IPlayer() {};
protected:
bool m_alive;
};
class Bomber : protected IPlayer
{
public:
Bomb(bool t_alive = true)
{
m_alive = t_alive;
}
~Bomb();
};
我应该选哪个,为什么?
答案 0 :(得分:2)
严格来说,如果成员不是由in-class-initializer,ctor-init-list初始化的,则在静态/线程存储类为零初始化的情况下,或者在聚合值初始化或聚合初始化的情况下,它将被默认初始化,从而使bool
之类的类型不确定。
您可以此后分配它们,但这不是一回事。
现在我们进入下一部分:
每个类都应尽可能合理地执行自己的不变式。是的,拥有非private
成员会降低这种能力,但是有时值得这样做,因为它带来的便利(可以转换为更少的副本,从而可能提高效率)。
此外,您不应不必要地重复自己。
因此,请使用类内的初始化程序。