C++类和对象 (3)

news2024/11/24 0:19:27

类和对象

  • 1. 类的6个默认成员函数
  • 2. 构造函数
    • 2.1. 概念(问题提出)
    • 2.2. 特性
  • 3.析构函数
    • 3.1. 概念
    • 3.2.特性

1. 类的6个默认成员函数

如果一个类中什么成员都没有,简称为空类。

空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。

默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。

在这里插入图片描述

2. 构造函数

2.1. 概念(问题提出)

对于以下Date类:
在这里插入图片描述
对于Date类,可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?

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

2.2. 特性

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

具有以下特性:

  1. 函数名与类名相同。
  2. 无返回值。
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载。
    在这里插入图片描述
  5. 如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义,编译器将不在生成。
    在这里插入图片描述
  6. 关于编译器生成的默认成员函数:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没有什么用?d对象调用了编译器生成的默认构造函数。但是d对象_year,__month, _day,依旧是随机值。也就是说在这里编译器生成的默认构造函数并没有什么用??
    解答:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型,如:int/char……,自定义类型就是我们使用class/struct/union等自己定义的类型,看看下面的程序,就会发现编译器生成默认的沟站函数会对自定类型成员 _t调用的它的默认成员函数。
    在这里插入图片描述

注意:C++11 中针对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量在类中声明时可以给默认值。
在这里插入图片描述

  1. 无参的构造函和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。这三种默认构造函数,有且仅有一个。
    在这里插入图片描述

3.析构函数

3.1. 概念

通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?

析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

3.2.特性

析构函数是特殊的成员函数,其特征如下:

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数返回值类型。
  3. 一个类只能有一个析构函数。若为显示定义,系统会自动生成默认的析构函数。注意:西沟函数不能重载。
  4. 对象生命周期结束时,C++编译系统自动调用析构函数。
    在这里插入图片描述
  5. 关于编译器自动生成的构造函数,是否完成一些事情呢?下面的程序我们会看到,编译器生成的默认析构函数,对自定类型成员调用它的析构函数。
    在这里插入图片描述
  6. 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如Data类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用OpenFeign实现接口访问

1. 引言 在微服务横行的年代,后端根据业务的不一样分成了很多单独运行的服务,比如在物联网中,根据业务拆分为定时服务、设备控制等服务。当前端想控制设备时,其请求首先到其对应的后端服务,后端服务再调用设备控制服务…

Vue+Vant封装通用模态框单选框组件

前言 我们知道,在vant组件中提供的组件往往是比较基础的,能够满足基本需求。但是我们想实现ui设计的一些比较丰富效果的组件,需要自己去实现,且当项目中多次用到的时候,我们将以组件化的思想将其封装起来,…

Node.js -- 使用Express写接口

1.创建基本的服务器 //导入express const express require(express) //创建服务器实例 const app express() //调用app.listen方法,指定端口号并启动web服务器 app.listen(80,function(){console.log(Express server running at http://127.0.0.1) })2. 创建API路…

路由交换综合实验

拓扑结构: 要求 1、R6为网络运营商(ISP),接口IP地址均为公有地址;该设备只能配置IP地址,之后不能在对其进行任何配置; 2、R1~R5为局域网,私有IP地址192.168.1.0/24,请合…

真题详解(UML图)-软件设计(五十五)

真题详解(计算机知识)-软件设计(五十四)https://blog.csdn.net/ke1ying/article/details/130278265 组织域名: com商业组织 edu教育组织 gov政府组织 net主要网络支持中心 mil军事部门 Int国际组织 2、时间复杂度 O&#…

写一个自己的命令行解释器

写一个自己的命令行解释器 当我点开xshell运行服务器的时候bash就被加载到了内存中,此后我在bash上执行的所有程序都是作为bash的子进程。在bash这个进程内创建子进程,并让子进程去执行全新的代码,这不就是程序替换吗? 所以我们…

腾讯云4核8g服务器支持多少人在线使用?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

【Unity入门】17.脚本访问父子结点

【Unity入门】脚本访问父子结点 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)父级节点 (1)访问父级节点 父子关系我们并不陌生,在cocos中常用node:get…

单链表的实现

链表的概念与结构 链表与我们通讯录中的顺序表是不同的,顺序表的空间是连续的,像数组一样可以通过下标访问。而链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。即:链表…

数据结构笔记:二叉树的遍历与技巧

引言 本篇是最近有遇到过的一个题目,关于二叉树的遍历,正好有一些经验与技巧,所以开一篇帖子记录一下。 二叉树遍历介绍 遍历是数据结构中常见的操作,主要是将所有元素都访问一遍。对于线性结构来说,遍历分为两种&a…

RecyclerView 静态布局实现过程解析:如何构建高性能的列表

作者:maxcion Recyclerview在日常开发中所使用的控件中绝对是顶流一般的存在,想嚼它这个想法一次两次了。在网上也看了很多关于Recyclerview源码解析的文章,大佬们写的都很深刻,但是对于像我们这种储备知识不足的小白读者来说&…

前端实现端到端测试(代码版)

端到端测试框架选取 playwright 、 cypress 、 selenium 对比 cypress使用 下载 cypress npm install cypress --save-dev package.json npm run cypress:open {"scripts": {"cypress:open": "cypress open"} }使用流程 入门官方文档 npm ru…

一本通 3.4.5 最小生成树

1348:【例4-9】城市公交网建设问题 【题目描述】 有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点&…

SQL Server基础 第四章 select定制查询(select中的各种查询筛选条件)

本章主要介绍 select 语句查询数据的基本用法,其中包括查询指定字段信息、条件查询等。 目录 1、比较运算符、逻辑运算符 (1)查询phone大于500且不是单县的 (2)查询地址为烟台或者单县但是phone要大于666的 &#…

IMX6ull 之 HelloWorld Led点灯

一 GPIO点灯,嵌入式的helloworld 1 何为GPIO? GPIO只是一个CPU内提供的一种功能外设,CPU外部的I/O引脚会被赋予一种功能(GPIO、UART、I2C等);该功能由CPU内外设提供,具体是什么功能由IOMUX…

刷题笔记4-22

目录 1.Java:(a,b)>Math.abs(a-3)-Math.abs(b-3); 2.字符解释 3.C语言二维数组中a[i]表示ai的地址,而a[i]又可以表示为*(ai) 4.二维数组在传参时,必须给定列 5.软件开发:观察者模式 6.建…

shell脚本控制

shell脚本编程系列 处理信号 Linux利用信号与系统中的进程进行通信,通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。 Linux信号 shell脚本编程会遇到的最常见的Linux系统信号如下表所示: 在默…

【ros】6.ros激光雷达SLAM(建图定位)

百行业为先 ,万恶懒为首。——梁启超 文章目录 :smirk:1. 激光SLAM:blush:2. 二维激光SLAM:satisfied:3. 三维激光SLAM 😏1. 激光SLAM SLAM(同步定位与地图构建)是一种机器人感知技术,用于在未知环境中同时确定机器人…

java调用webservicer的方法

对于使用 Webservicer的方式,一般采用 Java API调用的方式。Webservicer是一个运行在浏览器中的客户端程序,它可以通过 Webservicer的接口来访问服务器上的服务。 使用 Java调用 Webservicer有两种方式: 下面是一个简单的例子: 2、…

零基础,零成本,部署一个属于你的大模型

前言 看了那么多chatGPT的文章,作为一名不精通算法的开发,也对大模型心痒痒。但想要部署自己的大模型,且不说没有算法相关的经验了,光是大模型占用的算力资源,手头的个人电脑其实也很难独立部署。就算使用算法压缩后的…