首页 热点资讯 义务教育 高等教育 出国留学 考研考公

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

发布网友 发布时间:2022-04-23 15:58

我来回答

1个回答

热心网友 时间:2023-10-04 01:40

构造函数:

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

 

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

 

无参构造函数

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

    无参构造函数的定义:

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
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com