类的6个默认成员函数 构造函数

news2024/9/22 6:50:21

类的6个默认成员函数

如果一个类中什么成员都没有,简称为空类。
空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。
class Date {};
在这里插入图片描述

构造函数

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

特征:

  1. 函数的名字和类的名字相同。
  2. 构造函数没有返回值。(甚至连void都不用写)
  3. 当对象实例化时,构造函数会自动初始化对应的对象
  4. 构造函数可以重载。(我们可以写多个构造函数,提供多种初始化的方式)

不带参数的构造函数

#include<iostream>
using namespace std;


class Date
{
public:

	//来,我们来写一个日期类的构造函数
	Date()         // 函数名和类名相同。没有返回值,连void都不用写,我们先写一个无参数的
	{
		cout << "Date()" << endl;
		_year = 1;
		_month = 1;
		_day = 1;

	}


	void Init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}


	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;

};

int main()
{
	Date d;
	d.Print();

	return 0;
}

写好了构造函数,它就会自动帮我们初始化,看看结果:
在这里插入图片描述
如果不写构成函数的运行结果是:
在这里插入图片描述

带参数的构造函数

#include<iostream>
using namespace std;

class Date
{

public:
	//来,这次我们写个带参数的构造函数。
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;	
	}



	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;

};


int main()
{
    //c++中我们把变量叫做对象。
	//比如变量d2,我们叫做对象d2.
	//注意看,如果在c语言中我们传参,是把参数放在相应函数的括号里的,但是,这里是把参数放在对象后面的。
	Date d2(2023, 7, 20);
	d2.Print();
	return 0;
}

构造函数也是默认成员函数,我们不写的话,编译器会自动生成。
编译器生成的默认构造函数的特点:

  1. 我们不写才会生成,我们写了任意一个构造函数就不会生成了。
  2. 内置类型的成员不会处理(c++11,声明支持给缺省值)。
  3. 自定义类型的成员才会处理,回去调用这个成员的构造函数。
    总结:一般情况下都需要我们自己写构造函数,决定初始化的方式,成员变量全是自定义类型,可以考虑不写构造函数(因为这个时候编译器会自动生成构造函数)。

默认构造函数就是我们不传参,它自己会调用的函数就叫默认构造函数,默认构造函数包括我们自己写的无参的构造函数 全缺省的构造函数 编译器默认生成的构造函数。但是以上三种函数只能存在一个如果多个存在的话,则会存在调用二义性

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

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

相关文章

ruoyi-cloud-notes01

1、Maven中的dependencyManagement Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息&#xff0c;那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找…

HCIP MPLS总结

一、MPLS--多协议标签交换 多协议&#xff1a;可以基于多种不同的3层协议来生成2.5层的标签信息&#xff1b; 包交换&#xff1a;包为网络层的PDU&#xff0c;故包交换是基于IP地址进行数据转发&#xff1b;就是路由器的路由行为&#xff1b; 原始的包交换&#xff1a;数据包…

STM32 CubeMX USB_CDC(USB_转串口)

STM32 CubeMX STM32 CubeMX 定时器&#xff08;普通模式和PWM模式&#xff09; STM32 CubeMX一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择 二、代码部分添加代码实验效果 ![请添加图片描述](https://img-blog.csdnimg.cn/a7333bba478441ab950a66fc63f204fb.png)printf发…

分库分表概念、原理、拆分策略和实现技术讲解

文章目录 1.什么是分库分表2.分库分表拆分策略2.1 垂直拆分2.2 水平拆分 3.分库分表实现技术简介 1.什么是分库分表 分库分表的中心思想就是将数据分散存储&#xff0c;使得单一数据库/表的数据量变小来缓解单一数据库的性能问题&#xff0c;从而达到提升数据库性能的目的。 …

python中使用yt-dlp模块实现带进程条下载音视频

当代的互联网时代&#xff0c;视频内容的流行无疑是其中的重要组成部分。作为全球最大的视频分享平台&#xff0c;每天吸引着数以亿计的用户观看各种各样的视频内容。有时候&#xff0c;我们可能希望将某些喜欢的视频保存到本地进行观看&#xff0c;或者将它们用于其他用途。在…

406 · 和大于S的最小子数组

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; 题解&#xff1a;同向双指针 九章算法 - 帮助更多程序员找到好工作&#xff0c;硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param nums: an array …

任务12、Quality指令加持,Midjourney生成电影级数码作品

12.1 任务概述 本次实验任务旨在帮助你掌握Midjourney AI绘画中的Quality指令。通过深入介绍Quality指令的概念和作用,我们将解释为什么它在绘画中至关重要。通过测试不同的Quality参数对绘画效果的影响,并提供实战演示,你将学会如何在Midjourney中设置Quality参数以达到更…

Spring 事务详解(注解方式)

目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式&#xff08;不常用&#xff0c;因为要为每一个类配置TransactionProxyFactoryBean&#xff09; 2.2 基于AspectJ的XML方式&#xff08;常用&#xff0c;可配置在某些类下的所有子…

⛳ StringBuffer and StringBuilder 处理字符串

目录 ⛳ StringBuffer and StringBuilder 处理字符串&#x1f3a8; 一&#xff0c;简介&#x1f3ed; 二&#xff0c;常用方法&#x1f69c; 三 &#xff0c;StringBugger&#x1f43e; 四&#xff0c;StringBuilder⭐ 五&#xff0c;StringBuffer和StringBuilder面试 ⛳ Strin…

【李宏毅机器学习·学习笔记】Tips for Training: Adaptive Learning Rate

本节课主要介绍了Adaptive Learning Rate的基本思想和方法。通过使用Adaptive Learning Rate的策略&#xff0c;在训练深度神经网络时程序能实现在不同参数、不同iteration中&#xff0c;学习率不同。 本节课涉及到的算法或策略有&#xff1a;Adgrad、RMSProp、Adam、Learning …

Qt应用开发(基础篇)——时间微调输入框QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类&#xff0c;这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件&#xff0c;父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板4

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

PyTorch深度学习实战(9)——学习率优化

PyTorch深度学习实战&#xff08;9&#xff09;——学习率优化 0. 前言1. 学习率简介2. 梯度值、学习率和权重之间的相互作用3. 学习率优化实战3.1 学习率对缩放后的数据集的影响3.2 学习率对未缩放数据集的影响 小结系列链接 0. 前言 学习率( learning rate )是神经网络训练中…

(十二)大数据实战——hadoop集群之HDFS高可用自动故障转移

前言 本节内容主要介绍一下hadoop集群下实现HDFS高可用的自动故障转移&#xff0c;HDFS高可用的自动故障转移主要通过zookeeper实现故障的监控和主节点的切换。自动故障转移为 HDFS 部署增加了两个新组件&#xff1a;ZooKeeper 和 ZKFailoverController &#xff08;ZKFC&…

【笔记】湖仓一体架构演进与发展

https://www.bilibili.com/video/BV1oF411F7rQ/?spm_id_from333.788.recommend_more_video.0&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

Linux中的firewall-cmd

2023年8月4日&#xff0c;周五上午 目录 打开端口关闭端口查看某个端口是否打开查看当前防火墙设置firewall-cmd中的服务在防火墙中什么是服务&#xff1f;为什么会有服务&#xff1f;打开或关闭服务查看某个服务是否打开firewall-cmd中的 zones查看所有可用的zones&#xff0…

elementui Cascader 级联选择使用心得

相信大家对于elementui并不陌生&#xff0c;作为适配Vue的优秀UI框架之一&#xff0c;一直被所有的开发者痛并快乐着。今天要记录的就是里边的主角之一Cascader。 首先先介绍一下Cascader ---> 当一个数据集合有清晰的层级结构时&#xff0c;可通过级联选择器逐级查看并选择…

OBS视频视频人物实时扣图方法(四种方式)

图片擦除一些杂乱图像 参考&#xff1a;https://www.bilibili.com/video/BV1va411G7be https://github.com/Sanster/lama-cleaner第一种&#xff1a;色度键选项 第二种&#xff1a;浏览器建立窗口选项 参考视频&#xff1a;https://www.bilibili.com/video/BV1WS4y1C7QY http…

Java8 list多属性去重

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 在 Java 开发中&#xff0c;我们经常会面临对 List 中的对象属性去重的需求。然而&#xff0c;当需要根据多个属性来进行去重时&#xff0c;情况会稍微复杂一些。本篇…

js实现原型链污染,沙箱绕过

一、沙箱绕过 1.概念 沙箱绕过"是指攻击者利用各种方法和技术来规避或绕过应用程序或系统中的沙箱&#xff08;sandbox&#xff09;。沙箱是一种安全机制&#xff0c;用于隔离和限制应用程序的执行环境&#xff0c;从而防止恶意代码对系统造成损害。它常被用于隔离不受信…