我的代码中定义了一个复制构造函数,它正在初始化正在创建的对象的数据成员。 现在,如果我只需更改少数变量的值,我正在编写一个新的副本ctor。 所以我的问题是,不是再次编写相同的代码,我可以只初始化特定的不同数据成员,而对于其他人,我可以在我的ctor方法中调用已定义的一个ctor。
例如: 已经存在
A::A(const A& cpy)
{
a=cpy.a;
b=cpy.b;
c=cpy.c
}
现在我想把我的ctor写成
A::A(const A& cpy, bool x)
{
if( x)
a=something;
else
a =cpy.a
//call first ctor for other variables (b and c)
}
由于 Ruchi
答案 0 :(得分:1)
从C ++ 11开始,您可以这样做:
class A
{
public:
A(const A& cpy) { a=cpy.a; b=cpy.b; c=cpy.c; }
A(const A& cpy, bool x): A(cpy) { a = something_else; }
}
答案 1 :(得分:0)
您可以通过在复制构造函数中使用默认参数来完成此操作,例如
A::A(const A& cpy, bool x = false)
{
if( x)
a=something;
else
a =cpy.a
//call first ctor for other variables (b and c)
}
您可以像
一样调用它A objA;
A b(objA, true); // b gets a shallow copy of a
答案 2 :(得分:0)
复制构造函数可能默认了其他参数:
A::A(A const & rhs, bool x = false)
{
a = x ? FOO : BAR;
}
也许这可以帮助您简洁地编写代码......
答案 3 :(得分:0)
在C ++ 11中,您可以在初始化列表中调用构造函数:
class Foo
{
public:
Foo(int a) {}
Foo(int a, int b) : Foo(a) {}
};
但是,您的代码存在问题,那就是您尝试创建一个带有额外参数的复制构造函数。它不再是复制构造函数,而是一个带有两个参数的普通构造函数。