C++初阶,详解类和对象(2)

详解类和对象(2)

  • 一,前言
  • 二,构造函数
    • 2.1构造函数概念
    • 2.2构造函数特性
  • 三,析构函数
    • 3.1析构函数概念
    • 3.2析构函数特性

一,前言

上一篇我们讲了类的大体框架,这篇内容我们要重点来说一说类的几个默认成员函数

二,构造函数

我们在写例如:顺序表,链表,诸如此类的代码的时候都要有一个初始化函数,但如果每次创建对象时都调用该方法设置信息,C++认为这样有一些麻烦,所以产生了构造函数。

2.1构造函数概念

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。

2.2构造函数特性

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象
特征:

  1. 函数名与类名相同
  2. 无返回值
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载
	Date(){_year = 1;_month = 1;_day = 1;}Date(int year, int month, int day){_year = year;_month = month;_day = day;}

这里以Date的类为例,下面是传参的写法,因为构造函数可以允许函数重载所以可以写成上面的无参的。在这里插入图片描述
这里我们测试d1和d2,我们对他们调试,当跳到d1时,编译器会自动识别,调用无传参的构造函数,而d2就会调用另外一个。
补充:上面两个构成重载的构造函数我们也可以用缺省参数把他们合二为一

	Date(int year=1, int month=1, int day=1){_year = year;_month = month;_day = day;}

这样写也是可以的。
注意:默认构造函数只能存在一个;默认构造函数包括:

  1. 无传参的
  2. 全缺省的
  3. 我们不写编译器自动生成的

三,析构函数

3.1析构函数概念

通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?
析构函数:与构造函数功能相反析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作

3.2析构函数特性

  1. 析构函数名是在类名前加上字符 ~
  2. 无参数无返回值类型
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

LLM 面试总结

溜一遍 MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview https://www.llmforce.com/llm-interview-questions MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview An interview with a language model, ChatGPT - W…

SoftwareTest7 - JUnit 是个啥 ? 他跟 Selenium 有什么关系 ?

JUnit 是个啥 ? 他跟 Selenium 有什么关系 ? 一 . 相关注解1.1 Test1.2 BeforeEach1.3 BeforeAll1.4 AfterEach1.5 AfterAll 二 . 断言2.1 assertEquals2.2 assertNotEquals2.3 assertTrue / assertFalse : 断言结果为真/假2.4 assertNull / assertNotNull : 断言结果为空 / …

在Spring Boot中使用进程内缓存和Cache注解

在Spring Boot中使用内缓存的时候需要预先知道什么是内缓存,使用内缓存的好处。 什么是内缓存 内缓存(也称为进程内缓存或本地缓存)是指将数据存储在应用程序的内存中,以便在需要时快速访问和检索数据,而无需每次都从…

如何用SaleSmartly集成WhatsApp账号(内含WhatsApp个人号、商业号、API号对比图)

用SaleSmartly集成WhatsApp账号 如果企业有多个WhatsApp账号,无论是个人账号还是工作账号,员工操作起来可能会觉得难以管理和切换。SaleSmartly就可以解决这个问题,让员工在一个平台上同时使用多个WhatsApp账号,不需要频繁地登录和…

sqlmap requires ‘python-pymysql‘ third-party library

使用sqlmap进行udf提权报错: [14:06:04] [CRITICAL] sqlmap requires python-pymysql third-party library in order to directly connect to the DBMS MySQL. You can download it from https://github.com/PyMySQL/PyMySQL. Alternative is to use a package pyt…

关于Java抽象类和接口的总结和一点个人的看法

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶个人主页&am…

【Linux】Linux基础IO(上)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

Linux-查询目录下包含的目录数或文件数

1. 前置 1)ls Linux最常用的命令之一,列出该目录下的包含内容。 -l:use a long listing format-以列表的形式展现 -R:list subdirectories recursively-递归列出子目录 2)| 管道符 将上一条命令的输出&#xff…

Java内存结构

1.对象的结构 一个Java对象在内存中包括3个部分:对象头、实例数据和对齐填充 2.虚拟机存储数据的方式 2.1小端存储 : 便于数据之间的类型转换,例如:long类型转换为int类型时,高地址部分的数据可以直接截掉。 2.2大端存储 : 便于数据类型…

LeetCode反转链表的五种Java实现方式

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3: 输入&a…