文章目录

  • (一)构造函数的用途
  • (二)构造函数的特点
  • (三)构造函数的调用情况
    • (1)花括号式的初始化
    • (2)圆括号的初始化
  • (四)析构函数
  • (四)理解构造、析构思想

(一)构造函数的用途

  • 创建对象
  • 初始化对象的属性
  • 类型转换(只允许单个参数的构造函数)

explicit加在构造函数前表示明确不允许隐式类型转换。

#include <iostream>
using namespace std;
class Object
{public://explicit禁止隐式类型转换explicit Object(int x = 0):val(x){}
private:int val;
};
int main()
{Object obja;obja = 10;    //errobja = (Object)10;return 0;
}

(二)构造函数的特点

  • 构造函数是特有公有成员函数;(1%特殊情况:可以私有、保护
  • 构造函数无返回值类型(实际上返回创建的对象
  • 程序运行,构造对象时,该对象所属类的构造函数自动被调用
  • 构造函数可以重载
  • 构造函数可以在类中定义,类中声明,在类外定义
  • 若没有给定构造函数,C++编译器添加缺省的构造函数 类名(void){}
  • 只要定义一个构造函数,系统就不会生成缺省的构造函数。
  • 缺省构造函数只能有一个

(三)构造函数的调用情况

(1)花括号式的初始化

#include<iostream>
using namespace std;
class Person
{public:int age;char* name;
};int main()
{Person p1 = {18, "jiege"};return 0;
}

这种初始化的方式,就是将类当作结构体使用。编译器会生成缺省的构造函数Person(void);

(2)圆括号的初始化

class Person
{public:Person();Person(int _age, const char* _name);~Person();
private:int age;char* name;
};//无参构造
Person::Person():age(0), name(new char[20])
{}//有参构造
Person::Person(int _age, const char* _name): age(0), name(new char[20])
{strcpy(name, _name);age = _age;
}int main()
{Person p;                  //会调用无参构造/缺省构造函数Person p1(18, "jiege");       //会调用有参构造Person p2();               //编译:函数声明return 0;
}

注意:

  • 初始化列表只能在构造函数上使用。
  • Person p2(); 被编译器编译成返回值为Person类型 函数名p2的函数声明;
  • 构造函数不能手动调用

(四)析构函数

由于析构函数比较简单,这里就简单介绍下:
用途:注销对象、系统自动回收对象占用的资源

基本语法:

~类名(){};

注意:

  • 析构函数可手动调用
  • 析构函数不能重载
  • 析构函数没有参数

(四)理解构造、析构思想

生可带来,死不带去。这句话很有深意,并且构造创建对象,对象的析构的过程 和 人的出生和死亡的过程是如此相似。

举个例子:

  • 生可带来:有人生下来就是富二代(生可带来),就像有参构造(通过实参,给构造的对象的属性进行改造),普通人生下来(调用无参构造,不会对对象的属性进行额外的修改);
  • 死不带去:死亡的过程(对象的析构过程),不管是富人、穷人都会面临死亡(所有的对象最后都会使用同一个析构函数去析构自己)

注意:

  • 构造函数不能手动调用(系统自动调用,就像人无法就决定自己的出生条件,not remake)
  • 析构函数可以手动调用(就像人的死亡,可以主动选择死亡,对象的析构也是如此)
  • 多个构造函数的意义:构造不同属性的对象(好比富人、穷人、普通人…)

【C++】构造-析构详解相关推荐

  1. Jmeter做数据构造步骤详解

    Jmeter做数据构造步骤详解 引入 什么是数据构造 数据构造的方式 数据构造的意义 一.JDBC请求执行SQL语句构造数据 01 环境准备:添加Jmeter插件 02 使用步骤 二.HTTP请求调用 ...

  2. java 报文怎么构造的,详解http报文,mt900报文

    详解http报文,mt900报文 摘要 作为一个web开发者,每天都在使用者Http协议,却总是一知半解.本文参看Http RFC7230规范,梳理了http报文部分. http 报文构成 start ...

  3. tensor torch 构造_详解Pytorch中的网络构造

    背景 在PyTroch框架中,如果要自定义一个Net(网络,或者model,在本文中,model和Net拥有同样的意思),通常需要继承自nn.Module然后实现自己的layer.比如,在下面的示例中 ...

  4. 对象存储3:对象存储的原理、构造和详解

    前两篇介绍了对象存储的基础,包括存储类型,常用存储分类和分类方法. SCSI,TCP/IP,FC等存储介质以及DAS\NAS\SAN等存储网络,请参考:对象存储1:传统存储类型和分类. 文件存储,块存 ...

  5. Pytorch中 nn.Transformer的使用详解与Transformer的黑盒讲解

    文章目录 本文内容 将Transformer看成黑盒 Transformer的推理过程 Transformer的训练过程 Pytorch中的nn.Transformer nn.Transformer简 ...

  6. C++ - 派生类(derived class) 的 构造(construct) 和 析构(destruct)顺序 详解

    派生类(derived class) 的 构造(construct) 和 析构(destruct)顺序 详解 本文地址: http://blog.csdn.net/caroline_wendy/art ...

  7. C++虚函数、纯虚函数、虚析构、纯虚析构、动态绑定和抽象类详解。

    目录 1.虚函数的概念 2.虚函数的定义 3.虚函数的作用 4.用虚函数实现多态的方法 5.动态绑定和静态绑定 6.纯虚函数和抽象类 7.虚析构和纯虚析构 1.虚函数的概念 在C++程序中我们经常可以 ...

  8. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  9. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

最新文章

  1. 异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题
  2. 【VC基础】2、物料主档与BOM结构
  3. 视频直播技术详解:直播的推流调度
  4. TCP的拥塞控制--慢启动,拥塞避免,快重传,快速恢复
  5. python google drive api_使用google-drive-api python获取文件的链接
  6. Android O 获取APK文件权限 Demo案例
  7. 程序员只能吃青春饭?老程序员爆料花样出路
  8. fatal: Path ‘XXX‘ is in submodule ‘XXX‘错误(path is in submodule)
  9. springboot + shiro之登录人数限制、登录判断重定向、session时间设置
  10. 记得收藏这12个爆款 Java 开源项目!【附源码】
  11. 13.性能之巅 洞悉系统、企业与云计算 --- 案例研究
  12. ae 的动画导出为html,Bodymovin v5.5.5 AE脚本可以导出json格式在Web动画制作工具
  13. 使用DNSLog进行盲打
  14. 如何远程锁定或擦除iOS 5设备
  15. Eclipse执行junit测试时出现Errors occurred during the build. Errors running builder 'Integrated External Too
  16. 小米9/9 SE于3月19日开放购买!雷军:螺丝刀已备好,百万出货
  17. OnlyOffice官方Demo必要的修改及参数解释
  18. 英语语法篇 - 英语的补语
  19. STM32芯片写保护/解除写保护的方法
  20. 1,什么是JESD204

热门文章

  1. 写在大学毕业一周年之前
  2. clang++.exe: error: linker command failed with exit code 1 错误解决方法
  3. Python 爬取京东秒杀商品名称和价格
  4. 收藏一个开源.netCMS项目
  5. 【算法题目】【DFS】岛屿的最大面积
  6. 【深度强化学习】Advantage Actor-Critic
  7. 微信开发者工具使用git提交项目至gitee远程仓库(保姆级)
  8. 微信公众平台开发 数据库操作
  9. linux上安装Docker(非常简单的安装方法)
  10. 基于数据分析的智能饮食推荐APP含菜品识别