C++初阶学习第四弹——类与对象(中)——刨析类与对象的核心点

类与对象(上):C++初阶学习第三弹——类与对象(上)——初始类与对象-CSDN博客

前言:

在前面文章中,我们已经讲了类与对象的思想和类与对象的一些基本操作,接下来这篇文章我们将讲解以下类与对象的六个默认成员函数(注意:这部分是类与对象的核心之一,理解这些默认成员函数才有助于我们更好的使用这些默认成员函数)

上一章内容:

目录

一、默认成员函数是什么?

二、默认成员函数有哪些?

三、六种默认成员函数

1、构造函数

1.1 构造函数的作用

1.2 构造函数的用法

1.3 默认构造函数


一、默认成员函数是什么?

在一个类中,我们一般称呼里面的变量等统统为成员,自然函数称为成员函数,变量称为成员变量

class A
{
public:int Add(int x,int y)   //成员函数{return x + y;}
private:int a;   //成员变量
};

而默认成员函数就是不用写,编译器会自动生成的函数,比如上面写的Add函数如果为默认生成函数,那么我们可以不进行声明定义,直接调用该函数,具体操作我们可以往下看

二、默认成员函数有哪些?

在解答这个问题之前,我们首先先来考虑,为什么语法上会创建这种默认成员函数,其实就是因为人的惰性,如果一个函数每个类都需要调用或者有可能调用到,那我们为什么不可以通过底层的一些操作,让每个类中都自动生成这些成员函数,这就是默认成员函数

通过上面我们应该明白,默认成员函数一定是所有类中都需要的,那主要有哪些呢?

主要有以下六种:

三、六种默认成员函数

1、构造函数

1.1 构造函数的作用

构造函数是用来初始化的,初始化对于每个类对象都是不可或缺的

比如Date类:

class Date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};
int main()
{Date a1;a1.Init(2023, 2, 4);Date a2;a2.Init(2024, 2, 4);return 0;
}

当我们创建Date类的成员时,比如例子中创建的a1、a2,在创建后我们需要对其初始化,但是每一个类成员我们都需要调用Init函数,这样就会显得十分麻烦,我们是否可以通过某种操作直接在创建类变量的同时进行初始化,这就是构造函数诞生的原因

1.2 构造函数的用法

注意事项:

1、首先,我们要知道构造函数其实就是特殊的成员函数,它还是封装在类中的

2、因为我们要实现在创建类变量的同时进行初始化,所以构造函数的名字与类名相同

3、构造函数可以是半缺省或者全缺省的

4、一个类中只能有一个构造函数,一旦自己写了编译器就不会生成默认构造函数

构造函数的形式如下:

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_year = year;}void Print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1(2024, 5, 1);d1.Print();return 0;
}

运行结果:

这个就是构造函数的形式,就是将函数名与类名一致,同时不需要返回值,类型上与void一致,只是没有写出来,上面写的是带上形参的,但是构造函数是支持半缺省或者全缺省的,如下所示:

	Date(int year, int month, int day){_year = year;_month = month;_day = day;}//半缺省Date(int day){_year = 2024;_month = 5;_day = day;}//全缺省Date(){_year = 2024;_month = 5;_day = 1;}

1.3 默认构造函数

构造函数在类中实际上是可以自动生成的,当我们不去写默认构造函数时,它就会在类中自动生成,但我们需要注意的是,默认生成的构造函数是无参的,且它会初始化一个随机值

例如:

class Date
{
public:void Print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1;d1.Print();return 0;
}

在这个程序中,我们并没有写构造函数,这是它就会调用默认构造函数并初始化一个随机值

可能有些朋友会说,既然初始化的是随机值,那跟没有初始化不是没有区别吗?那默认构造函数不是没有用吗?

其实默认构造函数的用处不在于这里,当我们的类成员中都是基本类型的时候,默认成员函数是没什么用,但当我们的类成员中有自定义类型时,默认成员函数就十分关键了

至于原因如何,我们在下面讲

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

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

相关文章

虚拟机网络桥接模式无法通信,获取到的ip为169.254.X.X

原因&#xff1a;VMware自动选择的网卡可能不对 解决&#xff1a;编辑-虚拟网络编辑器-更改桥接模式-选择宿主机物理网卡&#xff0c;断开虚拟机网络连接后重新连接即可

hive使用hplsql进行etl或其它数据加工

参照 https://cwiki.apache.org/confluence/pages/viewpage.action?pageId59690156 http://www.hplsql.org/doc Hive HPL/SQL&#xff0c;即Hive Hybrid Procedural SQL一个开源工具&#xff0c;它为hive实现了过程性的SQL功能&#xff0c;类似Oracle的PLSQL。从hive 2.0.0开…

企业营销战略新思考:营销5.0与开源AI智能名片S2B2C商城小程序引领私域流量经营新纪元

随着互联网的深入发展&#xff0c;企业营销战略已经不再是单一、静态的规划&#xff0c;而是一个持续进化、与市场紧密相连的动态过程。在这个过程中&#xff0c;营销5.0和开源AI智能名片S2B2C商城小程序的结合&#xff0c;为企业营销战略注入了新的活力&#xff0c;也为私域流…

漂亮自适应APP下载页源码

漂亮自适应APP下载页源码,源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 漂亮自适应APP下载页源码

【算法基础实验】图论-深度优先搜索和深度优先路径

深度优先(DFS) 理论基础 深度优先搜索&#xff08;DFS, Depth-First Search&#xff09;是图和树的遍历算法中的一种&#xff0c;它从一个节点开始&#xff0c;沿着树的边走到尽可能深的分支&#xff0c;直到节点没有子节点为止&#xff0c;然后回溯继续搜索下一个分支。DFS …

探索Jellyfin:支持Android的自由开源的媒体服务器平台

探索Jellyfin&#xff1a;支持Android的自由开源的媒体服务器平台 I. 简介 A. 什么是Jellyfin&#xff1f; Jellyfin是一个自由开源的媒体服务器平台&#xff0c;旨在让用户能够自主管理和流式传输他们的媒体内容。与许多闭源的商业媒体服务器解决方案不同&#xff0c;Jelly…

C++入门第一节-前言

写在前面 hello&#xff0c;小伙伴们大家好&#xff0c;我们都知道&#xff0c;C是在C语言的基础上进行的延伸和补充&#xff0c;所以我们学习C语言&#xff0c;数据结构等等&#xff0c;已经为C打下了基础&#xff08;C兼容C语言&#xff09;&#xff0c;从今天开始&#xff0…

深度学习基础之《TensorFlow框架(16)—神经网络案例》

一、mnist手写数字识别 1、数据集介绍 mnist数据集是一个经典的数据集&#xff0c;其中包括70000个样本&#xff0c;包括60000个训练样本和10000个测试样本 2、下载地址&#xff1a;http://yann.lecun.com/exdb/mnist/ 3、文件说明 train-images-idx3-ubyte.gz: training s…

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API&#xff0c;用于监测一个或多个目标元素与其祖先元素或视窗&#xff08;viewport&#xff09;之间的交叉状态&#xff08;intersection&#xff09;的变化。它可以有效地监听元素是否进入或离开可视区域&#xff0c;从而实现…

Linux基础-socket详解、TCP/UDP

文章目录 一、Socket 介绍二、Socket 通信模型三、Socket 常用函数1 创建套接字2 绑定套接字3、监听连接4、接受连接5、接收和发送数据接收数据发送数据 6、关闭套接字 四、Socket编程试验1、源码server.cclient.c 2、编译&#xff1a;3、执行结果 五、补充TCP和UDP协议的Socke…

万兴PDF专家 PDFelement Pro v10.3.8 破姐版!

&#x1f9d1;‍&#x1f4bb;万兴PDF专家 PDFelement Pro v10.3.8 破姐版 (https://docs.qq.com/sheet/DRVVxTHJ3RXJFVHVr)

go项目实战——动手写分布式缓存GeeCache

文章目录 FIFO/LFU/LRU 算法简介FIFO(First In First Out)LFU(Least Frequently Used)LRU(Least Recently Used) LRU实现实现原理LRU代码说明LRU完整代码 单机并发缓存Http服务器一致性哈希分布式节点防止缓存击穿使用 Protobuf 通信项目Get流程参考资料 FIFO/LFU/LRU 算法简介…

您可知道如何通过`HTTP2`实现TCP的内网穿透???

可能有人很疑惑应用层 转发传输层&#xff1f;&#xff0c;为什么会有这样的需求啊&#xff1f;&#xff1f;&#xff1f;哈哈技术无所不用其极&#xff0c;由于一些场景下&#xff0c;对于一个服务器存在某一个内部网站中&#xff0c;但是对于这个服务器它没有访问外网的权限&…

Python数据分析大作业(ARIMA 自回归积分滑动平均模型) 4000+字 图文分析文档 销售价格库存分析+完整python代码

资源地址&#xff1a;Python数据分析大作业 4000字 图文分析文档 销售分析 完整python代码 完整代码分析 ​ 同时销售量后1000的sku品类占比中&#xff08;不畅销产品&#xff09;如上&#xff0c;精品类产品占比第一&#xff0c;达到66.7%&#xff0c;其次是香化类产品&#x…

Python使用设计模式中的建筑模式将数据写入Excel且满足条件内容标红

对于这个任务&#xff0c;适合使用"Builder"设计模式。Builder模式的主要目的是将对象的构建与其表示分离&#xff0c;以便相同的构建过程可以创建不同的表示。在这个情况下&#xff0c;我们需要一个构建器来逐行构建Excel表格&#xff0c;并根据给定的数据添加相应的…

JAVA系列 小白入门参考资料 继承

目录 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 1. 子类和父类不存在同名成员变量 2. 子类和父类成员变量同名 4.2 子类中访问父类的成员方法 1. 成员方法名字不同 2. 成员方法名字相同 ​5. super关键字 …

golang beego结合wire依赖注入及自动路由

1 安装wire 1.1 通过命令直接安装 go install github.com/google/wire/cmd/wirelatest 1.2 通过go get方式安装 go get github.com/google/wire/cmd/wire进入目录编译 cd C:\Users\leell\go\pkg\mod\github.com\google\wirev0.6.0\cmd\wire go build 然后将wire.exe移动到…

万兆以太网MAC设计(12)万兆UDP协议栈上板与主机网卡通信

文章目录 一、设置IP以及MAC二、上板效果2.1、板卡与主机数据回环测试2.2、板卡满带宽发送数据 一、设置IP以及MAC 顶层模块设置源MAC地址 module XC7Z100_Top#(parameter P_SRC_MAC 48h01_02_03_04_05_06,parameter P_DST_MAC 48hff_ff_ff_ff_ff_ff )(input …

【Docker】docker compose服务编排

docker compose 简介 Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排。 docker swarm&#xff08;管理跨节点&#xff09; Dockerfile可以让用户管理一个单独的应用容器&#xff1b;而Compose则允许用户在一个模板&#xff08…

某赛通电子文档安全管理系统 多处 SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…