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; } |