我想决定我应该主要使用哪种方法来构造具有多个构造函数的复杂对象。
那么默认参数,类内成员初始化和委托构造函数相互之间的优缺点是什么?
DEFAULT PARAMETERS
class DefaultParams
{
public:
DefaultParams(int a = 42,
const std::string &b = "42")
:
m_a(a),
m_b(b)
{
// DO THINGS
};
DefaultParams(const std::string &b)
:
m_a(42),
m_b(b)
{
// DO THINGS
};
private:
int m_a;
std::string m_b;
};
PROS:减少施工人员; 缺点:重复代码或需要Init()方法。
课堂内初始化
class InClass
{
public:
InClass()
{
// DO THINGS
};
InClass(int a)
:
m_a(a)
{
// DO THINGS
};
InClass(const std::string &b)
:
m_b(b)
{
// DO THINGS
};
InClass(int a,
const std::string &b)
:
m_a(a),
m_b(b)
{
// DO THINGS
};
private:
int m_a = 42;
std::string m_b = "42";
};
PROS :? 缺点:更多的构造函数,重复代码或需要Init()方法。
代表建设者
class DelegatingCTor
{
public:
DelegatingCTor()
:
DelegatingCTor(42, "42")
{
};
DelegatingCTor(int a)
:
DelegatingCTor(a, "42")
{
};
DelegatingCTor(const std::string &b)
:
DelegatingCTor(42, b)
{
};
DelegatingCTor(int a, const std::string &b)
:
m_a(a),
m_b(b)
{
// DO THINGS
};
private:
int m_a;
std::string m_b;
};
PROS:不要重复代码; 缺点:更多的构造函数。
当然,还有很多。谢谢你的帮助。