打电话给副本ctor和另一个ctor

时间:2012-07-27 09:49:22

标签: c++ copy-constructor

我的代码中定义了一个复制构造函数,它正在初始化正在创建的对象的数据成员。 现在,如果我只需更改少数变量的值,我正在编写一个新的副本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

4 个答案:

答案 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) {}
};

但是,您的代码存在问题,那就是您尝试创建一个带有额外参数的复制构造函数。它不再是复制构造函数,而是一个带有两个参数的普通构造函数。