C++ 类和对象下

news2024/9/25 13:25:09

文章目录

    • 重载operator<< 输出自定义类型
    • const对象 无法调用 非const成员函数
      • 非const函数的缺陷
    • 初始化列表:==对象的成员定义的位置==
      • 为什么会要用到初始化列表?
      • 自定义类型成员如何初始列表初始化
      • 灵活的初始化列表
      • 声明次序
      • 内置类型_size不给缺省值,仍然会走初始化列表,给了一个随机值
    • 隐式类型转换与编译器优化连续构造
    • static

重载operator<< 输出自定义类型

类内重载导致操作数顺序颠倒问题:

在这里插入图片描述
在这里插入图片描述

所以定义在类外,但又要访问私有成员变量,就利用友元突破访问限制
在这里插入图片描述

在这里插入图片描述
类外定义利用cout这个对象的别名,输出对象的成员变量,并且需要返回这个cout的别名,因为对于连续输出需要从左到右返回cout的顺序问题 cout<< x << y <<endl;
在这里插入图片描述

const对象 无法调用 非const成员函数

原因:权限可以缩小,但不能放大
在这里插入图片描述
结论:只要是不修改this指针指向的对象内容的成员函数,都可以加上const
好处是 非const和const的对象都可以调用,但对于要修改this指向内容的对象加上const就没法改了

非const函数的缺陷

bool operator(const Date& x) 没加const 导致d2 < d1 等价于 d2.operator(&d2,d2),此时this指针类型是const Date* 是一种权限的放大,所以结合结论,不改变成员变量的函数需要加const
在这里插入图片描述

初始化列表:对象的成员定义的位置

熟悉的玩法是构造体函数赋值

class Date
{
public:
 Date(int year, int month, int day)
 {
 _year = year;
 _month = month;
 _day = day;
 }
private:
 int _year;
 int _month;
 int _day;
};

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

无论怎样最终都会走到初始化列表
在这里插入图片描述

即使是没用初始化列表,对象的成员变量仍然会走初始化列表

为什么会要用到初始化列表?

构造体赋值无法解决 在定义的时候就得初始化的变量
在这里插入图片描述

在这里插入图片描述

特征:必须在定义的时候初始化
如:引用成员变量
const成员变量
自定义类型成员(且该类没有默认构造函数时)(也必须在定义时初始化,因为需要传参)(如果有默认构造函数,就不需要传参,初始化列表可以初始化,也可以不初始化,不初始化就自动调用默认构造函数,就看你想不想显示初始化了)

自定义类型成员如何初始列表初始化

在这里插入图片描述

灵活的初始化列表

不写初始化列表,所有的成员也会走初始化列表,因为初始化列表是成员定义的地方,它至少会出现一次,则_pushst和_popst就去调用它们的默认构造,如果想显示的初始化对象同样也可以在初始化列表里面传参去初始化
在这里插入图片描述

声明次序

成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

class A
{
public:
 A(int a)
 :_a1(a)
 ,_a2(_a1)
 {}
 
 void Print() {
 cout<<_a1<<" "<<_a2<<endl;
 }
private:
 int _a2;
 int _a1;
};
int main() {
 A aa(1);
 aa.Print();
}
A. 输出1 1
B.程序崩溃
C.编译不通过
D.输出1 随机值

初始化顺序:
private:
int _a2;
int _a1;
先初始化_a2,再_a1,导致_a2是个随机值

内置类型_size不给缺省值,仍然会走初始化列表,给了一个随机值

在这里插入图片描述

隐式类型转换与编译器优化连续构造

A aa2 = 2; 发生隐式类型转换,2作为参数传给构造函数,构造成临时变量是A类型,再拷贝构造给A aa2
但是连续的构造会被编译器优化成用2直接构造

类比 double 和 int 的临时变量
在这里插入图片描述

#include <iostream>
using namespace std;
class A 
{
public:
	A(int a)
		:_a(a)
	{
		cout << "A(int a)" << endl;
	}
	A(const A& aa)
		:_a(aa._a)
	{
		cout << "A(const A& aa)" << endl;
	}
private:
	int _a;
};

int main()
{
	A aa1(1);
	A aa2 = 2;

	return 0;
}

static

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

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

相关文章

win10系统电脑硬盘里的文件不显示,到底出了什么问题呢?有什么解决方法呢?

演示机型&#xff1a;技嘉 H310M HD22.0 系统版本&#xff1a;Windows 10 专业版 软件版本&#xff1a;云骑士数据恢复软件3.21.0.92 Win10系统是我们经常使用的操作系统之一&#xff0c;但这也意味着我们可能会遇到一些问题。其中一个比较常见的问题是硬盘中的文件不显示。在这…

国内又款智能AI聊天软件-科大讯飞星火模型

介绍 介绍 中国科大讯飞星火GPT聊天软件是一款基于自然语言处理技术的人工智能聊天机器人。它利用了大量的文本数据&#xff0c;通过深度学习模型进行训练&#xff0c;从而实现与用户的智能对话。讯飞星火GPT聊天软件能够理解用户输入的问题或指令&#xff0c;并根据预设的回答…

MySQL 主从复制涉及到了几个线程?

目录 前言一、主从同步原理二、主从同步分析 前言 说到主从&#xff0c;我相信大家在 MySQL 这一节面试经常被问到MySQL 的主从复制原理&#xff0c;而且大家背得滚瓜烂熟。但是在主从复制的过程中&#xff0c;是如何进程数据同步的&#xff0c;又涉及到了哪些线程呢&#xff…

卖一辆亏5.8万美元!福特的困扰

随着电动化进入关键的「抢量」周期&#xff0c;加上年初掀起的降价潮&#xff0c;对于还无法适应转型节奏的传统汽车制造商来说&#xff0c;现在是一个艰难的时刻。 本月初&#xff0c;福特首席执行官Jim Farley表示&#xff0c;电动汽车市场的降价是"令人担忧的趋势"…

js垃圾回收机制各阶段问题以及解决方案

很多文章的三色标记法&#xff0c;增量标记法&#xff0c;新生代老生代&#xff0c;引用计数法&#xff0c;标记回收法。很容易给最开始学习垃圾回收算法的朋友搞混。文章适合有一部分基础&#xff0c;但是要把算法搞混的朋友们。这篇文章带大家梳理一下本人的思路&#xff0c;…

ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330

编辑&#xff1a;ll ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330 型号&#xff1a;ADV7125JSTZ330 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;LQFP-48 批号&#xff1a;2023 引脚数量&#xff1a;48 工作温度&#xff1a;-40C~85C 安装类型&#xff1a;表面…

深夜12点,果断卸载Access,3分钟启用国产Access,源自WPS

Access的“忠实粉丝”&#xff0c;你我皆可能是一员 历经20多年迭代的微软Access&#xff0c;因简单易用&#xff0c;在全球吸引了一大批的“忠实粉丝”&#xff0c;你我可能就是其中的一员。 基于Windows操作系统的集成开发的大环境&#xff0c;Access的灵活性和实用性大大提…

QUIC在京东直播的应用与实践 | 京东云技术团队

作者&#xff1a;京东零售 周凯 一. 前言与背景 国内的互联网直播技术从2005年前后兴起&#xff0c;彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive。当时的直播技术用的还是基于windows系统自带的mediaplayer内置的COM组件开…

小程序uniapp利用canvas生成海报并可以保存至相册

✨uniapp实现生成海报并保存至相册组件&#xff0c;u-popup可以根据自己所使用的组件进行替换 这里主要讲的是JS部分&#xff0c;css和元素相关的就不展开赘述了&#xff0c;下方先给大伙看看效果图&#xff0c;图的下方有代码讲解&#xff0c;最下方有完整代码&#xff0c;如…

Echarts 热力图的详细配置过程

文章目录 一&#xff0c;配置过程二&#xff0c;具体实例 一&#xff0c;配置过程 引入Echarts库和热力图插件 <script src"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <script src"https://cdn.jsdelivr.net/npm/…

Java多线程入门到精通学习大全?了解线程池和线程常用集合的基本原理、代码示例!(第六篇:线程池和集合的学习)

设计和实现多线程应用程序需要了解线程池、线程常用集合等相关知识。下面我们将分别介绍线程池、线程常用集合的原理、使用场景、代码示例、注意事项和总结。 1. 线程池 线程池是一种线程调度机制&#xff0c;它可以管理多个线程&#xff0c;并且可以重复使用这些线程来处理多…

Transformers回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一&#xff0c;由于神经网络的发展&#xff0c;曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成&#xff0c;人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

大众软件之变:宾利品牌制造负责人接任CARIAD CEO

作者 | 德新 编辑 | 王博 上周五&#xff0c;Business Insider爆料了大众软件组织CARIAD人事大调整&#xff0c;董事会几乎全军覆没&#xff0c;引发轩然大波。 这周一&#xff0c;大众的官宣接踵而至——大众集团老兵、原宾利品牌制造负责人Peter Bosch接替CARIAD CEO一职。 …

《基于光学传感器的心房颤动检测:综述》阅读笔记

目录 一、论文摘要 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课…

数智无限|东土科技科东软件5月活动预告

这个5月&#xff0c;东土科技&科东软件将携带自主研发的国产操作系统Intewell、智能控制通用工具软件MaVIEW、边缘通用控制器NewPre、基于TSN技术的智能化工业网络硬件、数字工厂智能产线一站式解决方案&#xff0c;以及面向智能工厂的离散控制、流程控制、运动控制、机器人…

赋能户外赛事,时空道宇率先实现卫星应用商业闭环

最近这两年&#xff0c;卫星通信的崛起速度惊人&#xff0c;几乎成为了一个现象级风口。 在低轨星座、高通量卫星等技术的推动下&#xff0c;卫星通信的服务能力有了极大的提升&#xff0c;不仅覆盖范围越来越广阔&#xff0c;网络连接速率和时延也有了显著进步。 进入2023年以…

【沐风老师】3DMAX艺术样条线增强螺旋线插件使用教程

3DMAX艺术样条线、增强螺旋线插件使用教程 完美漂亮的卷曲形状&#xff01; 3DMAX艺术样条线插件用于创建漂亮的螺旋线、卷曲线和环形结样条曲线&#xff0c;具有数学精度。 例如制作饰品、装饰品、铁制品设计、珠宝、布饰品、古代文化的符号、触角、动画/分发/变形的路径等等…

5万字数字乡村建设与示范项目可行性研究报告

5.1 “三平台”&#xff1a;建设支撑农业发展农村治理惠民服务的三大应用平 台 5.3.1 建设智慧农业综合服务平台 夯实数字农业基础&#xff0c;推进重要农产品全产业链大数据建设。推进农业数字化转型&#xff0c;加快推广云计算、大数据、物联网、人工智能在农业生产经营管理…

基于STL的演讲比赛管理系统

目录 一、比赛规则描述 二、比赛程序的功能 三、比赛的运行结果 四、程序的实现 1、程序实现的大致思路 2、程序的模块化 <1>选手信息的类 <2>管理比赛所有进度的接口头文件 <3>比赛进行的实现 <4>用户的交互界面<演讲比赛管理系统.cpp>…

vue项目引入pwa使网页应用可安装

最近在使用vue项目时看到一个这样的效果&#xff0c;如图&#xff1a; 现在其实有很多网站都支持把网页安装到电脑或手机&#xff08;IOS Safari支持较好&#xff09;&#xff0c;如下图安装后的效果&#xff1a; 这些都是网页应用。 接下来介绍一下如何让你的vue2项目变得可以…