复制构造函数的使用

复制构造函数的使用

复制构造函数可以用一个对象去初始化另一个对象。在创建类时如果没有编写构造函数,C++会自动生成一个,用原对象相应数据成员的值去初始化新对象的每个数据成员。如果数据成员是对象,初始化意味着调用他们的复制构造函数。

定义

复制构造函数的参数是本类的const引用,无返回类型,按照如下格式定义

ClassName (const ClassName &objectName);

在某个代码中像类似这样:

//main1.cpp
#include <iostream>
#include <string>
using namespace std;

class testStr {
public:
	testStr(string s);							//构造函数声明
	testStr(const testStr &s1);        	//复制构造函数声明
	void display();
private:
	string str;
};
testStr::testStr(string s) :str(s) {
}
testStr::testStr(const testStr &s1) {		//复制构造函数的定义,此处复制构造函数在原成员
	str = s1.str + "World!";						//字符串后面添加一段字符串,用于验证复制构造函数
}															//是否被调用
void testStr::display() {
	cout << str << endl;
}
void fun(testStr a) {								//向函数传递对象时,实际是传递对象的副本,
	a.display();										//此时复制构造函数被调用
}
testStr fun1() {										//函数返回类型为类时,调用复制构造函数
	testStr b("Hello");
	return b;
}
int main() {
	testStr obj1("Hello");
	testStr obj2(obj1);						//显示调用复制构造函数
	testStr obj3 = obj1;						//隐式调用复制构造函数
	testStr obj4(" ");
	fun(obj1);										//向函数传递对象,复制构造函数被调用
	obj4 = obj1;									//赋值运算,复制构造函数没有被调用
	obj3.display();
	obj4.display();
	testStr obj5(" ");							//
	obj5 = fun1();
	obj5.display();
	return 0;
}

复制构造函数的应用场景
1显示调用
2隐式调用
3像函数传递对象
4函数返回对象

注意,复制构造函数只用于创建对象的时候,而不能用在对象的赋值上,例如在mian1.cpp中main函数obj4。
main1.cpp的执行结果

HelloWorld!           //fun(obj1)  向函数传递对象
Hello					//
HelloWorld!			//显示调用
HelloWorld!			//隐式调用
Hello					
HelloWorld!			//函数返回对象

猜你喜欢

转载自blog.csdn.net/hb_cqy1/article/details/82869629