C++拷贝构造函数
拷贝构造函数
1. 什么是拷贝构造函数?
拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
2.拷贝构造函数的用途
- 通过同一类型的对象来初始化新的对象
- 复制对象,并从函数返回这个对象
复制对象把他作为参数传给函数
*当重写拷贝构造函数时需要同时写出普通构造函数!
3.拷贝构造函数实例
1.通过同一类型的对象来初始化新的对象
#include<bits/stdc++.h>
using namespace std;
class A
{
public:
int a;
public:
A(int temp)
{cout << "调用构造函数初始化!!" << endl;
a = temp;
};
A(const A &temp) //拷贝构造函数参数应该使用 const 和 & 修饰
{
cout << "调用拷贝构造初始化!!" << endl;
a = temp.a;
}
};
int main()
{
A a(111); //使用普通构造函数初始化
A test2 = a;//调用拷贝构造初始化
}
2.复制对象,并从函数返回这个对象
#include<bits/stdc++.h>
using namespace std;
class A
{
public:
int a;
public:
A(int temp)
{cout << "调用构造函数初始化!!" << endl;
a = temp;
};
A(const A &temp) //拷贝构造函数参数应该使用 const 和 & 修饰
{
cout << "调用拷贝构造初始化!!" << endl;
a = temp.a;
}
};
A test()
{
A temp(10);
return temp;
}
int main()
{
test();//当对象最为函数返回值时调用拷贝构造
}
3.复制对象把他作为参数传给函数
#include<bits/stdc++.h>
using namespace std;
class A
{
public:
int a;
public:
A(int temp)
{cout << "调用构造函数初始化!!" << endl;
a = temp;
};
A(const A &temp) //拷贝构造函数参数应该使用 const 和 & 修饰
{
cout << "调用拷贝构造初始化!!" << endl;
a = temp.a;
}
};
void test (A temp)
{
};
int main()
{
A a(111); //使用普通构造函数初始化
test(a); //当a传入test()函数时会调用拷贝构造函数;即实参向形参传递数据时 进行了实参向形参的数据的拷贝 调用了自己写的赋值构造函数
}