复制构造函数的运用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复制构造函数的运用相关的知识,希望对你有一定的参考价值。

构造函数和析构函数
一、构造函数: 类名(形参表)
1、普通构造函数:在对象被创建时利用特定的值构造对象,将对象初始化到一个特定的状态。
特性:构造函数的函数名和类名相同;没有返回值;在对象被创建时被自动调用;如果有构造函数,建立对象时必须给出初始值。
2、复制构造函数(特殊的构造函数)(类名(类名&对象名))
复制构造函数和赋值运算符的行为差不多,都是将一个对象的值复制给另一个对象;但是复制构造函数是使用一个已经存在的对象去初始化一个同类的新对象而赋值运算符是把对象的值复制给一个已经存在的变量。
复制构造函数在以下三种情况下会被调用:1)用类的一个对象去初始化该类的另一个对象2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时3)函数的返回值是类的对象,函数执行完成返回调用者时。

下面是一个完整覆盖了这三种情况的程序

#include<iostream>
using namespace std;
class point{
 public:
 	point(int xx=0, int yy=0)
	{
		x=xx;
		y=yy;
	}
	point(point &p);
	int getx()
	{
		return x;
	}
	int gety()
	{
		return y;
	}
	private:
		int x,y;
}; 
point::point(point&p)
{
	x=p.x;
	y=p.y;
	cout<<"Calling the copy constructor"<<endl;
}
void fun1(point p)
{
	cout<<p.getx()<<endl;
}
point fun2()
{
	point a(1,2);
	return a;
}
int main()
{
	point a(4,5);
	point b=a;
	cout<<b.getx()<<endl;
	fun1(b);
	b=fun2();
	cout<<b.getx()<<endl;
	return 0;
}


复制构造函数还可以有选择有变化的复制,可以将复制构造函数可以构造一个与初始点有一定位移的新点(这个我有时间会尝试着写一下)
二、析构函数(作用几乎和构造函数正好相反)
用来完成对象被删除前的清理工作
在对象的生存期即将结束时自动调用;名称由类名前面加“~”构成;没有返回值;不接收任何参数

以上是关于复制构造函数的运用的主要内容,如果未能解决你的问题,请参考以下文章

构造函数,构造代码块和静态代码块的先后顺序和运用

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

为啥在我的代码中调用复制构造函数而不是移动构造函数?

防止 Proguard 删除片段的空构造函数

C#:如果一个类有两个构造函数,这些构造函数共享一些代码的最佳方式是啥? [复制]