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

类和对象(下)(一)

类和对象(下)(一)

  • 1.再谈构造函数
    • 1.1构造函数体赋值
    • 1.2初始化列表
    • 1.3explicit关键字
  • 2.static成员
    • 2.1概念
    • 2.2特性
  • 3.匿名对象

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【C++的学习】
📝📝本篇内容:再谈构造函数;static成员;匿名对象
⬆⬆⬆⬆上一篇:类和对象(中)(二)
💖💖作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.再谈构造函数

1.1构造函数体赋值

虽然构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

1.2初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员”后面跟一个放在括号中的初始值或表达式。
在这里插入图片描述
注意:
①每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
在这里插入图片描述
②类中包含以下成员,必须放在初始化列表位置进行初始化:
引用变量
在这里插入图片描述
const成员变量
在这里插入图片描述
自定义类型成员(且该类没有默认构造函数时)

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class Time
{
public:Time(int a):_hour(0),_minute(0),_second(0){}private:int _hour;int _minute;int _second;
};class Date
{
public:Date(int year=0,int month=0,int day=0):_year(year),_month(month),_day(day),{}
private:int _year;int _month;int _day;Time _t;
};
int main()
{return 0;
}

在这里插入图片描述
大家可以试一下,会报错的,因为这个类没有默认构造函数,我们必须在初始化列表来亲自初始化它才行
在这里插入图片描述
③尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化
在这里插入图片描述
其实本质上哪个对象调用构造函数,初始化列表是它所有成员变量定义的位置
不管是否显示在初始化列表写,编译器对于每个变量都会初始化列表处定义初始化
如果成员变量有缺省值,在初始化时没有显式初始化则使用缺省值,反之则使用自己设定的初始值
④成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后顺序无关
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class Time
{
public:Time(int a=1):_hour(0),_minute(0),_second(0){}private:int _hour;int _minute;int _second;
};class Date
{
public:Date(int year = 0, int month = 0, int day = 0):_day(_year),_year(year),_month(month){}
private:int _year;int _month;int _day;
};
int main()
{Date dl;return 0;
}

大家可以去试一下

1.3explicit关键字

构造函数不仅可以构造于初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换作用
在这里插入图片描述
它其实本质上就是当中产生了一个临时的匿名对象,把1作为参数构造临时的匿名对象,然后临时的匿名对象再拷贝构造给d1,但是编译器会进行优化,把构造+拷贝优化成直接构造
在C++11中允许多个参数形成隐式类型转换
在这里插入图片描述
如果想要禁止构造函数的隐式转换,用explicit修饰构造函数
在这里插入图片描述

2.static成员

2.1概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量,用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化

class Date
{
public:Date(int year=1, int month=1, int day=1):_day(day),_year(year),_month(month){}static int Print()//静态成员函数{return count;}
private:static int count;//静态成员变量int _year;int _month;int _day;
};
int Date::count = 0;//在类外初始化

2.2特性

①静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
②静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
③类静态成员即可用类名::静态成员或者对象.静态成员来访问
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class Date
{
public:Date(int year=1, int month=1, int day=1):_day(day),_year(year),_month(month){}
//private:static int count;//静态成员变量int _year;int _month;int _day;
};
int Date::count = 0;//在类外初始化
int main()
{//前提是成员用的是public访问限定符Date d;cout << Date::count << endl;cout << d.count << endl;Date* p = NULL;cout << p->count<< endl;//因为单纯就是访问类内部的count静态成员变量,而count也不是某个对象所属的,//是所有类对象共享的,他存在静态区,所以说不需要解引用,直接去静态区找cout << sizeof(Date) << endl;return 0;
}

④静态成员函数没有隐藏的this指针,不能访问任何非静态成员

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class Date
{
public:Date(int year=1, int month=1, int day=1):_day(day),_year(year),_month(month){}static void Print()//静态成员函数{//_year=0;count++;cout << count << endl;}
//private:static int count;//静态成员变量int _year;int _month;int _day;
};
int Date::count = 0;//在类外初始化
int main()
{Date d;d.Print();return 0;
}

⑤静态成员也是类的成员,受public、protected、private访问限定符的限制

3.匿名对象

在这里插入图片描述
他的特点就是不用取名字,但是他的生命周期只有这一行,并且它具有常属性
在这里插入图片描述
可以看到它在使用完后就调用了析构函数

🌸🌸类和对象(下)(一)的知识大概就讲到这里啦,博主后续会继续更新更多C++的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

相关文章:

类和对象(下)(一)

类和对象&#xff08;下&#xff09;&#xff08;一&#xff09;1.再谈构造函数1.1构造函数体赋值1.2初始化列表1.3explicit关键字2.static成员2.1概念2.2特性3.匿名对象&#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x…...

46.在ROS中实现global planner(2)

前文实现了一个global planner的模板&#xff0c;并且可以工作&#xff0c;本文将实现astar算法&#xff0c;为后续完成一个astar global planner做准备 1. AStar简介 1.1 AStar Astar算法是一种图形搜索算法,常用于寻路。Astar算法原理网上可以找到很多&#xff0c;简单的说…...

05- 泰坦尼克号海难生死预测 (机器学习集成算法) (项目五)

Kaggle: 一个数据建模和数据分析竞赛平台sns画柱状图: sns.barplot(datatrain,xPclass,ySurvived)查看数据分布(survived 和 fare): sns.FacetGrid(train,hueSurvived,aspect3) ageFacetsns.FacetGrid(train,hueSurvived,aspect3) ageFacet.map(sns.kdeplot,Fare,shadeTrue) …...

【python百炼成魔】python运算符的使用与输入输出函数

文章目录前言一. python 运算符1.1 算术运算符1.2 .赋值运算符1.3 比较运算符1.4. 布尔运算符二. 输入和输出函数2.1 print函数2.1.1 help函数查看帮助文档2.1.2 print的格式化输出2.2 format函数2.3 input数据接收函数写在最后前言 Python 中的运算符主要分为算术运算符、比较…...

uniapp实现app检查更新与升级-uni-upgrade-center详解

app检查更新与升级 参考链接&#xff1a; 升级中心uni-upgrade-center - App uni-admin h5 api App资源在线升级更新 uni-app使用plus注意事项 关于在线升级&#xff08;WGT&#xff09;的几个疑问 什么是升级中心uni-upgrade-center uniapp官方开发的App版本更新的插件&#…...

公司项目引入这种方式,开发应用真是又快又准!

试想一下&#xff0c;你开足马力提了一串需求&#xff0c;给开发精英团队也好&#xff0c;给外包也行&#xff0c;都要等个半年甚至更久才会给到你一个满意的产品&#xff0c;你是否还有动力&#xff1f; 这还不止&#xff0c;业务越来越复杂&#xff0c;最初的需求也在随着着…...

virtuoso数据库介绍

在国内&#xff0c;对海量 RDF 数据的管理有着迫切的实际需求&#xff1b; RDF&#xff1a;Resource Description Framework&#xff0c;是一个使用XML语法来表示的资料模型(Data model)&#xff0c;用来描述Web资源的特性&#xff0c;及资源与资源之间的关系。 Virtuoso可以对…...

linux高级命令之编辑器 vim

编辑器 vim学习目标能够说出vim的三种工作模式能够说出vim对应复制和粘贴命令1. vim 的介绍vim 是一款功能强大的文本编辑器&#xff0c;也是早年 Vi 编辑器的加强版&#xff0c;它的最大特色就是使用命令进行编辑&#xff0c;完全脱离了鼠标的操作。2. vim 的工作模式命令模式…...

分布式光伏储能系统的优化配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Grafana loki部署及使用及问题处理方法(超详细)

一、下载软件 因为我是本地测试&#xff0c;所以用的windows版本的包&#xff0c;loki服务window版本的安装包下载地址&#xff1a;下载地址&#xff0c;选择 promtail-windows版本的安装包下载地址&#xff1a;下载地址 Grafana服务的下载地址&#xff1a;下载地址 二、配置…...

vue项目如何使用 SheetJS(xlsx)插件?

简言 SheetJS是一款非常好用的前端处理表格文件的工具。它分社区版和专业版&#xff0c;我们今天来介绍如何简单使用它的社区版。 SheetJS社区版官网 介绍 你应该打开官网浏览具体使用详情。 安装 打开官网在如上图的Installation板块中可以找到各种运行模块的使用方式。 …...

项目管理工具dhtmlxGantt甘特图入门教程(九):支持哪些数据格式(上篇)

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足项目管理控件应用程序的所有需求&#xff0c;是最完善的甘特图图表库这篇文章给大家讲解 dhtmlxGantt 的数据属性和数据库结构。 DhtmlxGantt正版试用下载&#xff08;qun&#xff1a;764…...

iView Table合并单元格(行、列)

行/列合并设置属性 span-method 可以指定合并行或列的算法。该方法参数为 4 个对象&#xff1a;row: 当前行column: 当前列rowIndex: 当前行索引columnIndex: 当前列索引该函数可以返回一个包含两个元素的数组&#xff0c;第一个元素代表 rowspan&#xff0c;第二个元素代表 co…...

如何用P6软件编制项目进度计划(下)

卷首语 根据项目合同包含的工作范围进行工作分解&#xff08;WBS&#xff09;&#xff0c;按照业主的要求及项目管理的需要&#xff0c;考虑不同阶段和层次&#xff0c;适时编制出项目管理所要求的的各级进度计划。 4搜集项目计划与进度控制相关信息 搜集与项目计划编制与进…...

环境配置完整指导——Installing C++ Distributions of PyTorch

目录一、前言二、动手开始做1. 安装cuda 11.42. 安装visual studio 2019 community3. 安装libtorch4. 安装mingw-w645. 配置环境变量6. 打开vscode开始写程序7. 运行程序8. 其他报错信息文章简介&#xff1a;这篇文章用于介绍在windows10 vscode中&#xff0c;跑通如下代码的全…...

深度学习——自注意力机制和位置编码(笔记)

1.自注意力&#xff1a; ①在深度学习中&#xff0c;经常使用卷积神经网络或者循环神经网络对序列进行编码 ②对于key,value和query&#xff0c;自注意力有一套自己的选法&#xff0c;因为key&#xff0c;value和query的值来自同一组输入。因此被称为自注意力或内部注意力 2…...

内网渗透(三十)之横向移动篇-利用远控工具向日葵横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

自动化测试中,该如何高效管理测试数据?

今晚在某个测试群&#xff0c;看到有人问了一个问题&#xff1a;把测试数据放配置文件读取和放文件通过函数调用读取有什么区别&#xff1f; 当时我下意识的这么回答&#xff1a;数据量越大&#xff0c;配置文件越臃肿&#xff0c;放在专门的数据文件&#xff08;比如excel&am…...

Qt中项目A调用另一个项目B的方法汇总

在开发一个软件项目时候&#xff0c;当涉及到一个模块&#xff0c;已经有过类似的项目开发&#xff0c;为了避免重复开发&#xff0c;涉及到在该项目的工程中调用已开发的项目作为子项目&#xff0c;有很多种方法。 一、将项目编译成库文件然后进行调用 调用库文件通常有两种…...

【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)

点击下载源码 基于Javaee的影视创作论坛的设计与实现主要用功能包括&#xff1a; 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 &#xff08;1&#xff09;后台管理: 管理模块&#xff1a;管理员…...

AI训练神器!免配置YOLO可视化工具,标注+训练+推理全流程集成,支持YOLOv8~v12+50系显卡,开源可二开

AI训练神器&#xff01;免配置YOLO可视化工具&#xff0c;标注训练推理全流程集成&#xff0c;支持YOLOv8~v1250系显卡&#xff0c;开源可二开 yolo可视化训练工具&#xff0c;免配置环境&#xff0c;打开界面即可训练yolo模型&#xff0c;提供源代码及完整打包项目&#xff0c…...

从零到一:在本地CentOS环境完整部署yshop-drink扫码点餐系统的实战指南

1. 环境准备&#xff1a;从零搭建CentOS基础系统 第一次在本地部署yshop-drink扫码点餐系统时&#xff0c;我选择了CentOS 7.9作为基础环境。这个版本既稳定又兼容大多数现代软件包&#xff0c;特别适合作为生产环境使用。建议直接使用阿里云镜像站下载Minimal版本ISO文件&…...

除了Cesium和Mapbox,用three-tile+Three.js打造轻量级WebGIS的完整实践

用three-tileThree.js构建轻量级WebGIS的工程实践指南 在Web三维地图开发领域&#xff0c;Cesium和Mapbox长期占据主导地位&#xff0c;但它们"全家桶"式的架构往往成为灵活定制的桎梏。当项目需要精细控制渲染管线、深度集成业务逻辑或追求极致性能时&#xff0c;开…...

告别预编译固件:手把手教你从零构建Pico PC RK3588S的Ubuntu 20.04根文件系统

深度定制RK3588S开发板&#xff1a;从零构建Ubuntu 20.04根文件系统的完整指南 当拿到一块全新的Pico PC RK3588S开发板时&#xff0c;许多开发者会发现厂商仅提供了预编译的固件包。这种"黑盒"模式虽然能快速启动设备&#xff0c;却严重限制了系统级定制的可能性。…...

手把手教你用PasteMD:本地AI一键整理笔记和代码片段

手把手教你用PasteMD&#xff1a;本地AI一键整理笔记和代码片段 你是不是也经常被这些场景困扰&#xff1f;开会时用手机快速记下的要点&#xff0c;事后整理时发现全是碎片化的短句&#xff0c;毫无结构可言&#xff1b;从网页复制下来的技术文档&#xff0c;格式混乱&#x…...

5个创新方法:基于开源工具的内容访问优化方案

5个创新方法&#xff1a;基于开源工具的内容访问优化方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;合法访问优质内容成为信息获取的关键挑战。…...

如何快速搭建Kafka Docker集群:broker-list.sh工作原理与实用指南

如何快速搭建Kafka Docker集群&#xff1a;broker-list.sh工作原理与实用指南 【免费下载链接】kafka-docker Dockerfile for Apache Kafka 项目地址: https://gitcode.com/gh_mirrors/ka/kafka-docker GitHub 加速计划 / ka / kafka-docker 项目提供了基于 Docker 的 A…...

大数据治理必看:数据目录的五大核心功能

大数据治理必看&#xff1a;数据目录的五大核心功能关键词&#xff1a;大数据治理、数据目录、元数据管理、数据血缘、数据协作摘要&#xff1a;在数据量爆炸式增长的今天&#xff0c;企业常面临“数据多到找不到、找到不敢用、用了怕出错”的困境。数据目录作为大数据治理的“…...

Android开发者必看:火山引擎API验签实战,5步搞定接口适配

Android开发者实战指南&#xff1a;火山引擎API验签与接口适配全解析 在移动应用开发领域&#xff0c;直接调用第三方API服务已成为提升开发效率的常见做法。火山引擎作为国内领先的云服务平台&#xff0c;其丰富的API接口为Android应用开发提供了强大支持。然而&#xff0c;由…...

从航拍影像到三维地形:OpenDroneMap实战指南与常见问题解答

从航拍影像到三维地形&#xff1a;OpenDroneMap实战指南与常见问题解答 【免费下载链接】ODM A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. &#x1f4f7; 项目地址: https://gitcode.com/gh_mirrors/od…...