C++拷贝构造函数的参数能是其他的类的引用吗?
拷贝构造函数只是一种叫法。如果一个构造函数的参数有且只有一个且这个参数是本类的引用(或const引用),那我们就叫这个构造函数为拷贝构造函数。
但既然构造函数可以重载,当然可以定义一个构造函数,其参数是其它类的引用,但我们一般不叫这个构造函数为拷贝构造函数。其实,所谓拷贝构造函数,就是个叫法,就如我们叫无参构造函数为默认构造函数一样。
下面给你个例子,供研究:
#include<iostream>
using namespace std;
class C
{
};
class A
{
public:
A()
{
cout<<"class A"<<endl;
}
// A(A a) //xxx
// {
//
// }
A(A &a)
{
cout<<"A(A &a)"<<endl;
}
A(const A &a)
{
cout<<"A(const A &a)"<<endl;
}
A(C &c)
{
cout<<"A(C &c)"<<endl;
}
A(const C &c)
{
cout<<"A(const C &c)"<<endl;
}
A(A &a,int i)
{
cout<<"A(A &a,int i)"<<endl;
}
A(const A &a,int i)
{
cout<<"A(const A &a,int i)"<<endl;
}
A(C &c,int i)
{
cout<<"A(C &c,int i)"<<endl;
}
A(const C &c,int i)
{
cout<<"A(const C &c,int i)"<<endl;
}
};
int main()
{
A a1;
A a2=a1;
const A a3;
A a4(a3);
C c1;
const C c2;
A a5(c1);
A a6(c2);
A a7(a1,1);
A a8(a3,1);
A a9(c1,1);
A a10(c2,1);
return 0;
}