美文网首页
默认构造函数,拷贝函数

默认构造函数,拷贝函数

作者: 元素周期表的十七君 | 来源:发表于2017-08-05 15:48 被阅读0次

默认构造函数

默认的构造函数是指为所有参数都提供了默认值的构造函数通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。
如果你没有为你的类提供任何构造函数,那么编译器将自动为你生成一个默认的无参构造函数。一旦你为你的类定义了构造函数,哪怕只是一个,那么编译器将不再生成默认的构造函数。

默认构造函数何时使用?

1. 当你使用静态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数

如:Object buffer[10];//call default constructor

2. 当你使用动态分配的数组(new操作符),而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码,如果Object没有默认的构造函数,是无法通过编译的,因为new操作符要调用Object类的无参构造函数类初始化每个数组元素。

Object* buffer =newObject[10];

3. 当你使用标准库的容器时,如果容器内的元素类型是某个类的对象时,那么这个类就需要默认的构造函数

如:vector<Object> buffer;

4. 一个类A以另外某个类B的对象为成员时,如果A提供了无参构造函数,而B未提供,那么A则无法使用自己的无参构造函数,将导致编译错误

5. 类A定义了拷贝构造函数,而没有提供默认的构造函数,B继承自A,所以B在初始化时要调用A的构造函数来初始化A,而A没有默认的构造函数,故产生编译错误。

-------------------------------------------------------------------------------------------------

拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他的对象的构建及初始化。拷贝构造函数中为成员变量申请了新的内存空间,这就使得两个对象的成员变量不指向同一个内存空间如果在类中没有显式地声明一个拷贝构造函数,那么编译器会私下里制定一个函数来进行对象间的位复制(bitwise copy),这属于浅拷贝。这个隐含的拷贝构造函数简单地关联了所有的类成员。

拷贝构造函数何时用?

1. 一个对象以值传递的方式传入函数体

2. 一个对象以值传递的方式从函数返回

3. 一个对象需要通过另一个对象进行初始化。

相关文章

  • c++:拷贝构造函数&&深浅拷贝

    默认拷贝构造函数的汇编代码: 其实就相当于这一段代码 拷贝构造函数 多态拷贝构造函数 子类拷贝构造函数调用父类拷贝...

  • map

    map构造函数 map mapTT;//map默认构造函数: map(constmap &mp);//拷贝构造函数...

  • C++:面向对象基础

    构造函数 C++中有三种构造函数:默认构造函数,有参构造函数,拷贝构造函数 类对象的初始化 括号法//默认构造函数...

  • c++第三讲 类和对象

    目标: 类的默认成员函数 构造函数 析构函数 拷贝构造函数 赋值操作符重载 默认拷贝函数与赋值运算符重载 cons...

  • 构造函数涉及到的一些问题

    构造函数不同形式 默认的构造函数' 构造函数初始化列表; 拷贝构造函数; 复制运算符,如果类不允许复制,把拷贝构造...

  • [C++之旅] 12 拷贝构造函数

    [C++之旅] 12 拷贝构造函数 拷贝构造函数的特点 如果没有自定义的拷贝构造函数则系统自动生成一个默认的拷贝构...

  • 面向对象高级篇上-第二周(GeekBand)

    1、 当一个类中不写出拷贝构造函数、拷贝赋值函数、析构函数,这三个函数时,编译器提供默认的构造函数、拷贝赋值函数、...

  • 默认构造函数,拷贝函数

    默认构造函数 默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,...

  • 极客班-C++面向对象高级编程(上)-第二周笔记

    class的三大函数是:1.拷贝构造。2.拷贝赋值。3.析构。 其他备忘:1. 构造函数函数分两类:拷贝构造和默认...

  • C++语言基础(02)

    1.可变参数 2.构造函数、析构函数、拷贝构造函数 构造函数 拷贝构造函数 //浅拷贝(值拷贝)问题 //深拷贝

网友评论

      本文标题:默认构造函数,拷贝函数

      本文链接:https://www.haomeiwen.com/subject/hhgulxtx.html