什么是构造拷贝函数,初学者,求详细简单的讲解
1个回答
展开全部
构造函数:
与类名同名的类成员函数叫类的构造函数。构造函数的作用是用来编写初始化类成员变量的代码。
构造函数分为无参构造函数和有参构造函数,构造函数用于创建对象时调用。
无参构造函数
无参构造函数又称默认构造函数
无参构造函数的定义:
class MyClass
{
public:
MyClass()//与类名同名叫类的构造函数
{
//初始化代码
}
}
void main()
{
//以下两种写法都会自动调用默认构造函数
MyClass A;
MyClass *p=new MyClass();
}
有参构造函数
有参构造函数由开发者根据要求编写,参数不限,其中,如果参数含有同类对象,我们称该函数为拷贝构造函数。
顾名思义,拷贝构造函数的功能用来复制另一个对象的内部成员,包含各种变量及动态分配的内存,所以拷贝构造函数的功能又称深拷贝(深度拷贝或完全拷贝),由开发者编写。
题外话:对应的还有浅拷贝,但浅拷贝的功能是通过赋值操作符重载函数实现(就是等号“=”),系统自动支持,比如两个对象a和b,可以这么写:
a=b;//这其实调用了默认赋值操作符重载函数,实现将两个对象的所有变量进行复制(不包含动态分配的内存)
拷贝构造函数的例子
class MyClass
{
private:
int _Value;//私有成员
public:
void Set(int v)
{
_Value=v;
}
//带同类对象参数的叫拷贝构造函数
MyClass & MyClass(const MyClass & another)
{
//这里编写复制another对象中的所有变量到当前对象中的代码
//用于在创建新对象时,使用另一个对象的成员变量的值初始化当前对象
this->_Value=another._Value;//同类对象可以访问私有成员
//其他任何复制代码
}
}
void main()
{
MyClass A;
A.Set(10);//设置数据
MyClass B(A);//创建对象B时调用拷贝构造函数,用对象A初始化B
}
更多追问追答
追问
为什么要用引用
追答
因为函数调用从实参进入函数变成形参,会复制对象(浅拷贝),形参在函数结束时会被丢弃,然后进入函数后还要进行复制操作,重复复制没必要,所以用引用。
抱歉,我发现有一点我写错了,构造函数不需要返回对象,所以应该是这样
MyClass(const MyClass & another)
{
///代码
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询