原文地址http://www.cnblogs.com/waynelu/archive/2012/07/01/2572264.html

  1. 构造函数

构造函数、析构函数与赋值函数是每个类最基本的函数。

对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如:

1 A(void); // 缺省的无参数构造函数
2 A(const A &a); // 缺省的拷贝构造函数
3 ~A(void); // 缺省的析构函数
4 A & operate =(const A &a); // 缺省的赋值函数

默认构造函数与默认析构函数仅负责对象的创建和销毁,不做对象的初始化和资源的清理。

C++中通过构造函数确保对象的初始化,如果类存在构造函数,编译器会在创建对象的时候自动调用该函数。

构造函数特征:

  • 与类同名
  • 没有返回值(与析构函数一致)
  • 构造函数可以被重载,由实参决定调用哪个构造函数
 1 class A
 2 {
 3       public:
 4           int i,j;
 5
 6           A(): i(0), j(0) {}; //构造函数一:使用构造函数初始化列表
 7           A(int iI, int iJ); //构造函数二:使用参数赋值
 8 };
 9
10 A::A(int iI, int iJ) {
11       i = iI;
12       j = iJ;
13 }

构造函数一使用初始化列表对数据成员进行初始化,这在某些情况下是唯一选择:

对类中const和引用类型对象的初始化,只能使用初始化列表,不能赋值操作

 1 class A
 2 {
 3     public:
 4         A(int ii);
 5     private:
 6         int i;
 7         const int ci;
 8         int &ri;
 9 };
10
11 A::A(int ii)
12 {
13     i = ii;   //ok
14     ci = ii; //const对象不可以赋值
15     ri = i;  //赋值给ri但对象未绑定
16 }
17
18 //正确写法如下:
19 A::A(int ii) : i(ii), ci(i), ri(ii){}

默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式就会使用默认构造函数。

     2.拷贝构造函数

     特征:

  • 只有单个形参,形参为对本类类型对象的引用(用const修饰)

(1)如果没有定义拷贝构造函数,编译器会合成拷贝构造函数

函数行为是逐个成员进行初始化,然后将新对象初始化为原对象的副本。数组成员是例外,合成拷贝构造函数会拷贝整个数组。

(2)自定义拷贝构造函数

A(const A&);

大多数类应定义拷贝构造函数和默认构造函数。

(3)禁止拷贝

如果一个类需要禁止赋值,并需显式地声明拷贝构造函数为private,这样就不允许用户代码对该类类型的对象进行复制。

但类的友元和成员仍然可以进行复制,也需要禁止的话,就需要声明一个拷贝构造函数为private且对它不进行定义。

转载于:https://www.cnblogs.com/ztteng/p/3283842.html

转载构造函数与拷贝构造函数相关推荐

  1. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序

    构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由"底层向上"开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达 ...

  2. 默认构造函数和拷贝构造函数

    构造函数 构造函数包括默认构造函数.拷贝构造函数和一般构造函数. 在编程时,如果程序员不显式声明和定义上述函数,编译器将自动产生4个public inline的默认函数. A();          ...

  3. 类string的构造函数、拷贝构造函数和析构函数

    原文:http://www.cnblogs.com/Laokong-ServiceStation/archive/2011/04/19/2020402.html 类string的构造函数.拷贝构造函数 ...

  4. 不存在从void转换到sqlist的适当构造函数_拷贝构造函数与赋值构造函数

    拷贝构造函数与赋值构造函数 在C++中,如果要创建一个新的类,并用已有的类来给它附初值.就要用到拷贝构造函数,拷贝构造函数又分为两种. 1.合成的拷贝构造函数 在你没有定义自己的拷贝构造函数而又调用了 ...

  5. String 的普通构造函数、拷贝构造函数、析构函数、赋值函数

    转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398 题目:编写类String的构造函数.析构函数和赋值函数,已知类St ...

  6. C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景

    构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景 #include <iostream> using namespace std;class Construct ...

  7. 构造函数,拷贝构造函数,赋值函数

        C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个 ...

  8. 构造函数、拷贝构造函数、赋值函数和析构函数

    文章目录 一.构造函数 1.认识构造函数 2.初始化列表 二.拷贝构造函数 1.类对象的拷贝 2.浅拷贝和深拷贝 三.赋值函数 四.析构函数 1.认识析构函数 2.销毁,清理? 3.析构函数来阻止该类 ...

  9. 移动构造函数和拷贝构造函数的区别

    讲讲移动构造函数与拷贝构造函数的区别 :移动构造函数是c++11的新特性,移动构造函数传入的参数是一个右值 用&&标出.一般来说左值可以通过使用std:move方法强制转换为右值.首先 ...

  10. C++ 构造函数、复制构造函数,拷贝构造函数(深拷贝、浅拷贝)

    文章目录 前言 一.什么是构造函数? 二.构造函数的分类 复制构造函数 复制构造函数被调用的三种情况 复制构造函数在以下三种情况下会被调用. 三.拷贝构造函数的分类 深.浅拷贝构造函数的区别 示例代码 ...

最新文章

  1. Readline-select
  2. 从输入 URL 到页面加载完的过程中都发生了什么事情 —— 网络优化篇
  3. 3.9 训练一个 Softmax 分类器-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. 【笔试or面试】金山西山居2014校招笔试题
  5. SwarmKit知多少——来自源码世界的深入解读
  6. 高斯积分公式matlab_数值微分与数值积分(一)
  7. 2d-x中Lua类型强转问题
  8. ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
  9. 【技术博客】 利用Postman和Jmeter进行接口性能测试
  10. cfd软件matlab,【流体】| 10个目前流行的CFD仿真软件,你了解几个?
  11. java rgb565转rgb888_RGB565 转RGB888的循环补偿(zz)
  12. lte tm模式_LTE的几种模式介绍
  13. Markdown 语法手册全
  14. 优雅使用Jsdelivr/CDN加速博客访问速度
  15. 如何合理安排测试团队人员分工的问题?
  16. 水平、垂直居中布局大全
  17. tar包解压和打包方法
  18. 巴厘岛旅行摄影调色效果lr预设
  19. 网络是黄色的叹号,上不了网,DHCP占用CPU高
  20. linux内核cpu负载计算,Load和CPU利用率是如何算出来的

热门文章

  1. 数据有序_CATTI汉译英批改 | 人工智能、大数据有序推进
  2. vue执行操作成功但页面不刷新_vue.js数据更新页面不刷新
  3. leetcode刷题:z字形变换
  4. php调用restful接口_如何使用PHP编写RESTful接口
  5. pca各个向量之间的相关度_PCA算法原理及实现
  6. 死磕java_死磕 java同步系列之AQS终篇(面试)
  7. 大班音乐机器人反思_幼儿园大班音乐律动教案《伦敦桥》含反思
  8. java hashset 实现原理_深入Java集合学习系列:HashSet的实现原理
  9. java stream Interface BiFunction<T,U,R>
  10. python pytest 前置后置