我应该初始化抽象类的成员吗?

时间:2019-06-04 08:45:33

标签: c++ c++11 inheritance initialization abstract-class

我想知道是否最好的方法是初始化抽象类的成员(至少具有一个纯虚拟成员函数,可能是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();
};

我应该选哪个,为什么?

1 个答案:

答案 0 :(得分:2)

严格来说,如果成员不是由in-class-initializer,ctor-init-list初始化的,则在静态/线程存储类为零初始化的情况下,或者在聚合值初始化或聚合初始化的情况下,它将被默认初始化,从而使bool之类的类型不确定。

可以此后分配它们,但这不是一回事。

现在我们进入下一部分:
每个类都应尽可能合理地执行自己的不变式。是的,拥有非private成员会降低这种能力,但是有时值得这样做,因为它带来的便利(可以转换为更少的副本,从而可能提高效率)。

此外,您不应不必要地重复自己。

因此,请使用类内的初始化程序。

相关问题