什么是构造拷贝函数,初学者,求详细简单的讲解

 我来答
CodeBlove
2014-04-02 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:240万
展开全部

构造函数:

与类名同名的类成员函数叫类的构造函数。构造函数的作用是用来编写初始化类成员变量的代码。

 

构造函数分为无参构造函数和有参构造函数,构造函数用于创建对象时调用。

 

无参构造函数

    无参构造函数又称默认构造函数

    无参构造函数的定义:

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)
{
///代码
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式