使用2参数复制构造函数

时间:2012-03-20 16:07:02

标签: c++

    class Sample
    {
       public:
       Sample(){}
       Sample(const Sample& obj){ cout<<"C.C. with 1 argument called"<<endl;}
       Sample(const Sample& obj, int i){ cout<<"C.C. with 2 arguments called"<<endl;}
    };
    void main()
    {
         Sample s1;
         Sample s2 = s1; // Here, C.C with 1 arg. called.
    }
  

问题很少:

     
    
        
  1. 如何调用复制具有2个参数的构造函数?
  2.     
  3. 当我们需要一个带有1个参数的复制构造函数时,以及何时需要带有2个参数的C.C?
  4.        

3 个答案:

答案 0 :(得分:7)

具有2个(或更多)必需参数的构造函数不是复制构造函数。

1:

Sample s2(s1, 0);

答案 1 :(得分:4)

在这里添加一点形式主义。标准对“复制构造函数”一词(12.8)有严格的定义:
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments (8.3.6). [ Example: X::X(const X&) and X::X(X&,int=1) are copy constructors.

答案 2 :(得分:2)

一个类只有一个副本ctor,只能用一个参数调用。它可以采用两个(或更多)参数,但前提是它为其他参数提供默认值。无论哪种方式,第一个参数必须是对同一类型的对象的(通常是const)引用。

你的第二个ctor采用两个参数并不是真正的复制ctor(至少通常使用这个术语) - 它只是一个碰巧将一个实例作为参数的ctor(可能是基于该参数的新实例) ,至少部分)。