当前位置: 首页 > news >正文

类与对象(中--构造函数)

类与对象(中--构造函数)

  • 1、构造函数的特性
  • 2、默认构造函数
  • 3、编译器自动生成的默认构造函数(无参的)(当我们不写构造函数时)
    • 3.1 编译器自动生成的默认构造函数只对 自定义类型的成员变量 起作用,对 内置类型的成员变量 不做处理
    • 3.2 针对编译器自动生成的默认构造函数,无法对内置类型成员变量进行初始化的缺陷
  • 4、总结是否在类中写构造函数

//构造函数(在对象实例化时,就完成对对象的初始化工作)
//作用:构造函数主要完成初始化工作(这样就会避免忘记对对象初始化)

1、构造函数的特性

//构造函数是特殊的成员函数。构造函数的作用是初始化对象,并非开空间创建对象(这是编译器完成的)。// 其特征如下:
//(1)函数名与类名相同。
//(2)无返回值。(并非是 void, void是空返回值)
//(3)对象实例化时,编译器会自动调用对应的构造函数。
//(4)构造函数可以重载。class Data
{
public://A 无参构造函数Data(){}//B 带参构造函数Data(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;};int main()
{Data d1;Data d2(2023, 7, 31); //d1和d2两个对象在实例化时,调用Data函数构成函数重载。return 0;
}

2、默认构造函数

//主要分为三类:无参构造函数(自己写的)【Data()】、全缺省构造函数(自己写的)(有参的)【Data(int year=1,int month=1,int day=1)】以及 编译器默认生成的构造函数(自己没写)。
//特点:(1)不用传参数就可以调用。(2)在调用的过程中只存在一个(虽然在语法角度,无参构造函数和全缺省构造函数可以同时存在;但是在函数调用的过程中会存在歧义。)
//用法:最佳用法是只保留:全缺省构造函数(既可以无参调用,也可以有参调用,也不会产生调用歧义)class Data
{
public://全缺省构造函数Data(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;
};int main()
{Data d1;Data(2022, 7);Data d2(2023, 7, 31);return 0;
}

3、编译器自动生成的默认构造函数(无参的)(当我们不写构造函数时)

//通俗分析:当我们自己在类中定义了构造函数,编译器就不会自动生成。当我们自己没有在类中定义构造函数,编辑器就会自动生成。class Data
{
public:private:int _year;int _month;int _day;
};int main()
{Data d1;return 0;
}

3.1 编译器自动生成的默认构造函数只对 自定义类型的成员变量 起作用,对 内置类型的成员变量 不做处理

//内置类型:语法自带的,不用定义就可以用的类型,char\int\double\float以及指针(BTNode*)等类型。
//自定义类型:需要定义过才可以用的类型,例如:ListNode\BinaryTreeNode等//特点:
//A 内置类型成员变量不做处理
//B 自定义类型成员变量会去调用它(这个自定义类型成员变量)的默认构造函数(如果没有默认构造函数,就无法编译通过)。
class Time
{
public:Time(){cout << "Time()" << endl;_hour = 0;_minute = 0;_second = 0;}
private:int _hour;int _minute;int _second;};class Data
{
public://不写,默认生成构造函数
private:int _year;int _month;int _day;//Time _t; //任意类型的指针都是内置类型Time _t;
};int main()
{Data d1;return 0;
}

3.2 针对编译器自动生成的默认构造函数,无法对内置类型成员变量进行初始化的缺陷

//C++11打了个补丁:内置类型成员变量在类中申明时,可以给缺省值。
class Time
{
public:Time(){cout << "Time()" << endl;_hour = 0;_minute = 0;_second = 0;}
private:int _hour;int _minute;int _second;
};class Data
{
public://不写,默认生成构造函数
private:int _year = 1;int _month = 1; //这儿给的1是缺省值;因为这儿是内置类型成员变量的申明。int _day = 1;Time _t;
};int main()
{Data d1;return 0;
}

4、总结是否在类中写构造函数

//(1)一般的类都不会让编译器默认生成构造函数,都会自己写。显示写一个全缺省构造函数,非常好用。
//(2)在某些特殊情况下,让编译器默认生成构造函数。
//例如:
#include <iostream>
#include <assert.h>
using namespace std;typedef int DataType;
class Stack
{
public:Stack(int capacity = 3){_array = (DataType*)malloc(sizeof(DataType) * capacity);assert(_array);_capacity = capacity;_size = 0;}
private:DataType* _array;int _capacity;int _size;};class MyQueue
{
public:void push(int x) {}//...
private:size_t _size = 0;  //这儿就发挥了 C++11加入缺省值补丁 的作用Stack _st1;Stack _st2;
};int main()
{MyQueue q; //MyQueue 用默认生成的构造函数就挺好的,不需要显示写。return 0;
}

相关文章:

类与对象(中--构造函数)

类与对象&#xff08;中--构造函数&#xff09; 1、构造函数的特性2、默认构造函数3、编译器自动生成的默认构造函数&#xff08;无参的&#xff09;&#xff08;当我们不写构造函数时&#xff09;3.1 编译器自动生成的默认构造函数只对 自定义类型的成员变量 起作用&#xff0…...

Makefile学习1

文章目录 Makefile学习1Makefile简介Makefile重要性Makefile内容1) 显式规则2) 隐晦规则3) 变量的定义4) 文件指示5) 注释 Makefile规则规则默认目标多目标多规则目标伪目标 Makefile目标依赖头文件依赖自动生成头文件依赖关系 Makefile命令Makefile变量变量定义和使用赋值立即…...

城市内涝监测预警系统,科学“智治”应对灾害

近日&#xff0c;台风“杜苏芮”以摧枯拉朽之势给我国东南沿海地区带来狂风骤雨&#xff0c;福建的三个国家气象观测站日降水量突破历史极值。之后&#xff0c;“杜苏芮”一路北上。中央气象台预报称&#xff0c;7月29日至8月1日&#xff0c;北京、天津、河北、山东西部、河南北…...

切片[::-1]解析列表list表示的“非负整数加1”

列表数位表示非负整数&#xff0c;熟练操作“满十进位”。 (本笔记适合熟练操作Python列表list的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅…...

Mac下certificate verify failed: unable to get local issuer certificate

出现这个问题&#xff0c;可以安装证书 在finder中查找 Install Certificates.command找到后双击&#xff0c;或者使用其他终端打开 安装完即可...

Django项目启动错误

uwsgi项目启动错误信息如下Did you install mysqlclient?Command pkg-config --exists mysqlclient returned non-zero exit status 1Command pkg-config --exists mariadb returned non-zero exit status 1.Traceback (most recent call last):File "/home/dream21th/co…...

Vue2 第十二节 Vue组件化编程 (二)

1. VueComponent 2. 单文件组件 一. VueComponent 组件本质上是一个名为VueComponent的构造函数&#xff0c;不是程序员定义的&#xff0c;是Vue.extend生成的只需要写<school/>或者<school><school/>&#xff0c;Vue解析时&#xff0c;会帮我们创建schoo…...

pycharm 远程连接服务器并且debug, 支持torch.distributed.launch debug

未经允许&#xff0c;本文不得转载&#xff0c;vx&#xff1a;837007389 文章目录 step1&#xff1a;下载专业版本的pycharmstep2 配置自动同步文件夹&#xff0c;即远程的工程文件和本地同步2.1 Tools -> Deployment -> configuration2.2 设置同步文件夹2.3 同步服务器…...

SAP ABAP 基础语法超详细

1&#xff0e;表声明 Tables: 表名[,表名]. 声明多个表时可用逗号分隔当你声明了一个数据表的同时&#xff0c;系统也同时自动生成了一个和数据表同名的结构&#xff0c;结构的变量集等于数据表里面的字段。 2&#xff0e;定义变量 Data: v1[(l)] [type t] [decimals d] [v…...

html学习3(表格table、列表list)

1、html表格由<table>标签来定义。 <thead>用来定义表格的标题部分&#xff0c;其内部用 <th > 元素定义列的标题&#xff0c;可以使其在表格中以粗体显示&#xff0c;与普通单元格区分开来。<tbody>用来定义表格的主体部分&#xff0c;其内部用<t…...

【SpringBoot】85、SpringBoot中Boolean类型数据转0/1返回序列化配置

在 SpringBoot 中,前端传参数 0,1,后端可自动解析为 boolean 类型,但后端返回前端 boolean 类型时,却无法自动转换为 0,1,所以我们需要自定义序列化配置,将 boolean 类型转化为 0,1 1、类型对应 boolean 类型有false,true对应的 int 类型0,12、序列化配置 import com.f…...

hbase优化:客户端、服务端、hdfs

hbase优化 一.读优化 1.客户端&#xff1a; scan。cache 设置是否合理&#xff1a;大scan场景下将scan缓存从100增大到500或者1000&#xff0c;用以减少RPC次数使用批量get进行读取请求离线批量读取请求设置禁用缓存&#xff0c;scan.setBlockCache(false)以指定列族或者列进行…...

docker安装memcached

查找容器是否有该镜像存在 docker search memcached拉取镜像 docker pull memcached创建容器 docker create --name memcache1 memcached或者映射一下端口 docker create -p 11211:11211 --name memcache1 memcached启动 docker start memcache1指定容器的 IP docker net…...

Redis 客户端有哪些?

文章目录 JedisLettuceRedisson最佳实践 - 到底用哪个&#xff1f; Redis 最常见的 Java 客户端有两个&#xff0c;Jedis 和 Lettuce&#xff0c;高级客户端有 Redisson&#xff0c;见下图&#xff08;图源 Clients | Redis&#xff09; Jedis Github地址&#xff1a;redis/j…...

smbms 超市订单管理系统设计与实现计划表

smbms 超市订单管理系统 项目描述 smbms-JDBC&#xff1a;不使用 SSM 框架进行开发bookStore&#xff1a;学完ssm框架后的整合项目smbms-SSM&#xff1a;使用 SSM 框架开发 项目记录 smbms-JDBC 2023-10-28&#xff1a;第一天&#xff0c;搭建环境&#xff0c;写好基本的工…...

如何解决制造业数字化改造的障碍?

制造业的数字化转型可能是一个复杂且具有挑战性的过程&#xff0c;但解决以下障碍有助于为成功实施铺平道路&#xff1a; 抵制变革&#xff1a;数字化转型中最常见的挑战之一是员工的抵制&#xff0c;尤其是那些习惯传统方法的员工。为了克服这一问题&#xff0c;组织需要培养一…...

代码随想录算法训练营day49

文章目录 Day49买卖股票的最佳时机题目思路代码贪心算法动态规划法(推荐) 买卖股票的最佳时机II题目思路代码 Day49 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 题目 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i]…...

云计算与大数据——部署Kubernetes集群+完成nginx部署(超级详细!)

云计算与大数据——部署Kubernetes集群完成nginx部署(超级详细&#xff01;) 部署 Kubernetes 集群的基本思路如下&#xff1a; 准备环境&#xff1a; 选择适合的操作系统&#xff1a;根据需求选择适合的 Linux 发行版作为操作系统&#xff0c;并确保在所有节点上进行相同的选…...

Maven 打包项目后,接口识别中文乱码

背景 项目在Idea里面运行&#xff0c;调用接口发送中文消息正常&#xff0c;用Maven打包项目后&#xff0c;运行jar包&#xff0c;调用接口发送中文出现乱码。 解决方法 1.Idea编译配置 2.如果更改了上述配置之后还是没有效果&#xff0c;则在运行jar包的前面加上 -Dfile.en…...

计算机视觉项目中的文件批量操作与文件批量预处理

计算机视觉项目中的文件批量操作与文件批量预处理 目录 数据集制作文件批量重命名文件批量移动将文件批量按照一定格式进行重命名修改xml文件内容的方法 引言 在计算机视觉项目中&#xff0c;文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件&am…...

Go语言设计模式:创建型模式

Go语言设计模式&#xff1a;创建型模式 一、设计模式概述 设计模式是软件设计中反复出现问题的解决方案。Go语言作为一种现代化的编程语言&#xff0c;同样可以应用经典的设计模式。 Go语言中的设计模式特点 接口优先&#xff1a;通过接口实现解耦组合优于继承&#xff1a;Go不…...

如何彻底解决Windows系统DLL缺失问题:Visual C++运行库一键修复终极指南

如何彻底解决Windows系统DLL缺失问题&#xff1a;Visual C运行库一键修复终极指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时突…...

科技与科学新闻摘要-2026年5月16日

科技与科学新闻摘要 日期: 2026年5月16日 科技领域重点新闻 1. 中国2025年度十大科学进展揭晓 核心要点: 中国科学技术部发布了2025年度十大科学进展&#xff0c;覆盖深空探测、人工智能、生命科学、能源技术等多个领域&#xff0c;集中展示了中国基础研究和应用研究的突破性…...

【ElevenLabs语音伦理合规白皮书】:面向银发群体的AI语音生成必须绕开的4类GDPR/《互联网信息服务深度合成管理规定》雷区

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;银发群体AI语音服务的伦理合规必要性 随着智能语音助手在居家养老、远程问诊、紧急呼叫等场景中的深度部署&#xff0c;面向60岁以上用户的AI语音服务已从“可选功能”演变为“关键基础设施”。然而&am…...

从LED灯珠到手机屏幕:一文搞懂色温、显色指数(CRI)怎么选,告别‘卖家秀’惨案

从LED灯珠到手机屏幕&#xff1a;色温与显色指数的科学选购指南 深夜伏案工作时&#xff0c;你是否总觉得眼睛干涩疲劳&#xff1f;网购衣物到手后颜色总与屏幕显示相差甚远&#xff1f;餐厅美食拍出来总是暗淡无光&#xff1f;这些困扰的根源往往在于——光源质量。当我们面对…...

ElevenLabs免费额度使用全攻略(2024年Q2实测版):从注册到语音生成的7个生死节点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs免费额度的核心机制与边界认知 ElevenLabs 的免费层并非基于“每月固定时长”&#xff0c;而是采用动态配额&#xff08;Dynamic Quota&#xff09;模型&#xff0c;其核心由三重维度共同约束…...

AI智能体配置管理实战:基于agent-config-manager的解决方案

1. 项目概述与核心价值最近在折腾一个多智能体协作的项目&#xff0c;发现配置文件的管理简直是个灾难。每个智能体&#xff08;Agent&#xff09;都有自己的一堆参数&#xff1a;API密钥、模型选择、系统提示词、温度值、最大token数……更别提不同环境&#xff08;开发、测试…...

别再手动绕田了!用Python+Google Earth Pro搞定农田边界KML文件(附完整代码)

零成本农田边界数字化&#xff1a;Python与Google Earth Pro实战指南 在农业自动化领域&#xff0c;获取精确的农田边界数据是路径规划的第一步。传统方法依赖RTK设备或无人机测绘&#xff0c;成本高昂且操作复杂。本文将介绍一种无需专业硬件的解决方案&#xff0c;仅需一台普…...

从指标到版图:基于Cadence与gmid方法的两级运放实战设计

1. 两级运放设计入门&#xff1a;从指标到晶体管的思维转换 第一次接触两级运放设计时&#xff0c;我盯着性能指标表发呆了半小时。AV≥10M、CL10pf、SR10V/us这些数字就像天书&#xff0c;直到导师扔给我一本《模拟集成电路设计艺术》和一份Cadence使用手册。现在回想起来&…...

企业如何保护内部数据安全,防止信息泄密?

很多企业一提数据防泄密&#xff0c;第一反应就是上 DLP、上加密、上审计。但真正做过项目的人都知道&#xff0c;事情没这么简单。数据泄露大多数时候不是发生在机房&#xff0c;也不是因为多高级的攻击&#xff0c;而是发生在员工每天最普通的操作里。客户资料发错了&#xf…...