我应该初始化抽象类的成员吗?
Should I initialize members of an abstract class?
我想知道初始化抽象类的成员是否是最佳实践(至少有一个纯虚拟成员函数,可能是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();
};
我应该选择哪一个,为什么?
严格来说,如果一个成员没有被类内初始化器、ctor-init-list 初始化,在静态/线程存储类零初始化的情况下,或者在聚合值初始化或聚合初始化的情况下,它将被默认初始化,这使得像bool
这样的类型不确定。
此后,您可以分配它们,但这不是一回事。
现在我们进入下一部分:
每个类都应该尽可能合理地强制执行自己的不变量。是的,拥有非private
成员会降低这种能力,但这种便利性有时是值得的,这可以转化为更少的副本,从而可能提高效率。
此外,您不应该不必要地重复自己。
因此,请使用类内初始值设定项。
相关文章:
- C++成员初始化
- c++构造函数成员初始化:传递参数
- C++正确的指针成员初始化
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- WinLamb 错误:成员初始化非法
- 使用其他成员初始化结构的成员?
- C++模板类静态成员初始化
- 解释了构造函数成员初始化列表
- 如何在成员初始化列表中声明共享指针
- C++入门5版:使用get成员初始化另一个与shared_ptr无关的对象
- C++11 默认类成员初始化与初始值设定项列表同时
- 调用非默认构造函数作为成员初始化
- C++模板成员初始化:用右值移动构造,但用左值移动引用
- 类成员初始化C++
- 在成员初始化列表中,我可以创建对列表中不在列表中的成员变量的引用
- C :(不重复)积分静态成员初始化(不仅是声明!),导致链接器错误,原因
- 如何调用成员初始化器列表中参考成员的构造函数
- C 构造函数采用成员初始化器
- 与其他静态const成员初始化静态常量成员
- 静态内联成员初始化顺序