声明没有默认构造函数的字段

时间:2018-10-23 02:28:49

标签: c++

我对C ++还是很陌生,如果这是一个琐碎的问题,我们感到抱歉。我没有使用搜索功能。

让我们假设我具有以下类,并且请记住,BattleObject没有默认构造函数。

class HostView{       
    public:
        void Update();
    private:
        /// <summary>
        /// Currently selected enemy target
        /// </summary>
        BattleObject _selected_enemy_target;
}

我知道在实例化一个类时必须初始化成员,但是由于BattleObject没有默认构造函数,是将其用作指针的唯一解决方案吗?

BattleObject* _selected_enemy_target

仅在用户选择目标时才初始化它?还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

一个类可以通过在构造函数中指定一个初始化列表来初始化其成员变量:

HostView::HostView()
    : _selected_enemy_target(custom, constructor, arguments)
{
    ...
}

答案 1 :(得分:1)

您应该使用称为初始化器列表的名称。假设BattleObject的构造函数接收一个布尔值和一个字符串作为参数,那么HostView的实现应如下所示:

class HostView{

    public:
        void Update();
        HostView() : _selected_enemy_target(true, "I'm the enemy")
        {
            // initialise your HostView object as usual
        }
    private:
        /// <summary>
        /// Currently selected enemy target
        /// </summary>
        BattleObject _selected_enemy_target;
 }

额外提示:保持初始化程序列表中对象的顺序与在类主体中声明的顺序相同。