关于构造函数:是否有任何建议准确地生成以下c ++代码?

Any suggestion to make the following c++ code precisely?

本问题已经有最佳答案,请猛点这里访问。

考虑一下下面的讲师,我无论如何都必须初始化treeitem和status,但是在重载函数中,我也可以引入id变量。

但是看起来很傻,我不应该在这两个功能中都这样做,有什么建议吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
Contact ()
{
    treeItem = NULL;
    status = offline;
}

Contact (const QString & id)
{
    treeItem = NULL;
    status = offline;

    this->id = id;
}


您将受益于一个CCTR初始化列表,但在升级到C++ 11之前,您需要复制每个构造函数的变量初始化。

一种选择是使用默认参数来减少构造函数的数量,如:

1
2
3
4
Contact (const QString& identifier = QString())
    : treeItem(NULL), status(offline), id(identifier)
{
}

使用默认参数避免显式定义两个构造函数。并使用初始值设定项列表。像这样:

1
2
3
4
5
Contact (const QString & id = QString())
    : treeItem(NULL)
    , status(offline)
    , id(id) // yes this works but you may wish to change the parameter name)
{}

或者在C++ 11中使用委托构造函数:

1
2
3
4
5
6
7
8
9
Contact ()
    : treeItem(NULL)
    , status(offline)
{}

Contact (const QString & id = QString())
    : Contact()
    , id(id)
{}


如果您真的想重载构造函数(而不是提供默认值),最好是将公共代码移动到它自己的函数中,然后从每个构造函数调用它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Contact()
{
    init();
}

Contact(const QString &id)
{
    init();
    this->id = id;
}

private void init() {
    treeItem = NULL;
    status = offline;
}