博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<转载>构造函数与拷贝构造函数
阅读量:7186 次
发布时间:2019-06-29

本文共 1399 字,大约阅读时间需要 4 分钟。

原文地址 

  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;   //ok14     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

你可能感兴趣的文章
jemalloc 内存分配管理
查看>>
mysqld源码及目录结构
查看>>
Golang walk在win及linux建立 GUI 應用程式
查看>>
Linux执行命令常见的英语语句
查看>>
elasticsearch简单JavaAPI总结
查看>>
线索化二叉树
查看>>
vimrc
查看>>
【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第四步)(1)...
查看>>
Perl语言之统计特定字符串个数
查看>>
Linux用户和组管理
查看>>
Eclipse中从svn上检出项目无法识别jar包
查看>>
shell实现FTP自动批量上传下载文件
查看>>
我的友情链接
查看>>
Mybatis使用存储过程以及原理
查看>>
【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)
查看>>
maven打包包含配置文件
查看>>
C# readonly与const比较
查看>>
我的友情链接
查看>>
我的大学n糊口
查看>>
设置easyUi弹出窗在弹出框(iframe)中不居中问题
查看>>