0

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

谢谢鲁奇

4

4 回答 4

1

在 C++11 中,您可以在初始化列表中调用构造函数:

class Foo
{
public:
    Foo(int a) {}
    Foo(int a, int b) : Foo(a) {}
};

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

于 2012-07-27T09:59:54.270 回答
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; }  
}
于 2012-07-27T09:57:07.950 回答
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
于 2012-07-27T09:59:00.567 回答
0

复制构造函数可能已经默认了更多参数:

A::A(A const & rhs, bool x = false)
{
    a = x ? FOO : BAR;
}

也许这可以帮助您简洁地编写代码......

于 2012-07-27T09:59:13.747 回答