C++类和对象知识点集合

news2024/10/6 22:22:55

又多又难的C++类和对象知识点看这里了!!!!!

文章目录

  • 1.先看看类是咋用的
  • 2.访问限定符
  • 3.类中的声明和定义分离
  • 4.类对象模型
    • 4.1 空类的大小
    • 4.2 成员访问
  • 5.内存对齐
  • 6.this指针
    • 6.1 this在哪里?
    • 6.2 (类对象及this指针)三道送命题
  • 7.类的六个默认成员函数、构造函数
    • 7.1构造函数语法
    • 7.2构造函数特性
    • 7.3 析构函数
    • 7.4 拷贝构造函数
  • 8.赋值运算符重载
    • 8.1 运算符重载
    • 8.2 赋值运算符重载
    • 8.3 前置++和后置++重载
  • 9.const成员
  • 10.初始化列表
  • 11.隐式类型转换及explicit关键字
    • 11.1 知识点
    • 11.2 易错题
  • 12.static静态成员
  • 13.友元
    • 13.1 友元函数
    • 13.2 友元类
  • 14.内部类
  • 15.匿名对象


1.先看看类是咋用的

在这里插入图片描述

2.访问限定符

在这里插入图片描述
访问限定符在类里面这么用,那些成员私有,那些成员公有我么你自己定
在这里插入图片描述

3.类中的声明和定义分离

在这里插入图片描述

4.类对象模型

4.1 空类的大小

首先,我们要知道空的类也是有大小的!!
在这里插入图片描述

4.2 成员访问

声明和定义:
在这里插入图片描述
成员与函数的存储:
在这里插入图片描述

5.内存对齐

其实和C的内存对齐一摸一样!
在这里插入图片描述
指定对齐数可以使用:#pragma pack()

6.this指针

Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函
数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?

C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
在这里插入图片描述

6.1 this在哪里?

在这里插入图片描述

6.2 (类对象及this指针)三道送命题

在这里插入图片描述

7.类的六个默认成员函数、构造函数

默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。
在这里插入图片描述

7.1构造函数语法

构造函数:
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任
务并不是开空间创建对象,而是初始化对象。

其特征如下:

  1. 函数名与类名相同。
  2. 无返回值。(不是void,是就没有!!)
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载。

在这里插入图片描述

下面这个图片应该更加清晰:
在这里插入图片描述

7.2构造函数特性

在这里插入图片描述

不传参就可以调用的构造函数,都可以叫默认构造函数:
1.默认生成的构造函数
2.全缺省构造函数
3.无参构造函数

7.3 析构函数

与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

简单说就是清理资源!!

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数无返回值类型。
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构 函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数.

在这里插入图片描述

在这里插入图片描述
总体顺序:
局部对象->局部静态->全局对象(每个对象也按照后定义的先析构)

7.4 拷贝构造函数

在这里插入图片描述

如果不适用传引用传参,使用传值传参会发生什么??? 在这里插入图片描述

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

8.赋值运算符重载

8.1 运算符重载

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

8.2 赋值运算符重载

在这里插入图片描述

8.3 前置++和后置++重载

	// ++d1
	Date& operator++();
	
	// 特殊处理:解决语法逻辑不自洽,自相矛盾的问题
	// d1++
	// 为了跟前置++区分,强行增加一个int形参,够成重载区分
	Date operator++(int);
// ++d ->d.operator++()
Date& Date::operator++()
{
	*this += 1;
	return *this;
}

// d++ ->d.operator++(0)
Date Date::operator++(int)
{
	Date tmp = *this;
	*this += 1;
	return tmp;
}

在这里插入图片描述

9.const成员

在这里插入图片描述

在这里插入图片描述

10.初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟
一个放在括号中的初始值或表达式。
注意:初始化列表初始化的顺序是声明的顺序!!!!!!!!!
在这里插入图片描述

1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
引用成员变量
const成员变量
自定义类型成员(且该类没有默认构造函数时)

11.隐式类型转换及explicit关键字

11.1 知识点

在这里插入图片描述
如果我们不想让隐式类型转换发生我们可以加上explicit关键字

在这里插入图片描述
对于多参数的隐式类型的转换:
在这里插入图片描述

11.2 易错题

在这里插入图片描述

12.static静态成员

在这里插入图片描述
上面是类里面就可以随便访问,但是如果在类外想访问该如何?
在这里插入图片描述

13.友元

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以
友元不宜多用。

13.1 友元函数

友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在
类的内部声明,声明时需要加friend关键字。
在这里插入图片描述

13.2 友元类

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
在这里插入图片描述

14.内部类

也就是在一个类的里面定义另一个类!
在这里插入图片描述

15.匿名对象

怎么用及特点:
在这里插入图片描述
应用场景:
在这里插入图片描述

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

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

相关文章

Mybatis 自定义ResultHandler(结果处理器)正确使用姿势

阅读指引 一、使用场景二、前提条件三、源码对照四、使用示例目标实现方式 一、使用场景 对Mybatis查询的结果集进行统一批量处理,如进行类型转换、数据变更等等。 二、前提条件 必须是查询语句。mapper方法的返回值必须是void,这也就是不能直接从这个…

【GitHub项目推荐--一个 C++ 实现快速存储的库】【转载】

一个提供可嵌入、持久键值存储以实现快速存储的库。 github地址 https://github.com/facebook/rocksdb 国内镜像 http://www.gitpp.com/ag/rocksdb RocksDB 是一个开源的嵌入式键值存储库,由 Facebook 开发,用于处理大量的数据,特别适合于…

【C++】C++入门 — 指针空值nullptr

C入门 指针空值 指针空值 在良好的C/C编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下 方式对其进行初始化: voi…

03 - python基础篇

1. 面向对象认识 1.1 面向过程 核心:怎么做 把需要完成的业务逻辑,所有步骤从头到尾逐步实现将某些功能独立的代码封装成函数最后,就是顺序调用不同的函数 注重步骤与过程,不注重职责分工。 1.2 面向对象 核心:谁…

【智慧农业】东胜物联温室监控系统硬件解决方案,自动化控制温室灯光、温湿度等

温室监控系统旨在提高智慧农业的工业生产率和效率。根据最近的一项研究,农业领域的物联网市场预计到2026年将达到约187亿美元。物联网技术包括自主耕作方法,帮助农场生产高质量的商品,并为农场经理提供最佳功能。某上市药企因业务需要&#x…

【Java 数据结构】对象的比较

Java中对象的比较 1. PriorityQueue中插入对象2. 元素的比较2.1 基本类型的比较2.2 对象比较的问题 3. 对象的比较3.1 覆写基类的equals3.2 基于Comparble接口类的比较3.3 基于比较器比较3.4 三种方式对比 4. 集合框架中PriorityQueue的比较方式5. 使用PriorityQueue创建大小堆…

Json序列化和反序列化 笔记

跟着施磊老师学C 下载&#xff1a;GitHub - nlohmann/json: JSON for Modern C 在single_include/nlohmann里头有一个json.hpp&#xff0c;把它放到我们的项目中就可以了 #include "json.hpp" using json nlohmann::json;#include <iostream> #include <…

基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的个性化旅游攻略定制系统设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xf…

nosql数据库期末考试知识点总结

目录 1、什么是nosql数据库&#xff0c;它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库&#xff0c;是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

Linux中make和makefile

make与makefile 简单介绍常见用法符号替代自动寻找设置变量取消打印提示 简单介绍 make是Linux中一个命令&#xff0c;与之匹配的是makefile&#xff0c;makefile是一个文件。make会根据makefile中的内容完成对应的工作 创建一个名为makefile的文件 vim打开makefile 第一行是依…

Linux文本三剑客-awk

一、awk的介绍&#xff1a; 1.awk的简介&#xff1a; AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具 可以在无交互的模式下实现复杂的文本操作 相较于sed常作用于一整个行的处理&#xff0c;awk则比较倾向于一行当中分成数个字段来处理&#xff0c;因…

将vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用,只需要3分钟即可

将项目配置为pwa模式&#xff0c;就可以在浏览器里面看到安装应用的选项&#xff0c;并且可以将web网页像app一样添加到手机桌面或者pad桌面上&#xff0c;或者是电脑桌面上&#xff0c;这样带来的体验就像真的在一个app上运行一样。为了实现这个目的&#xff0c;我们可以为vue…

openmax

通过EmptyThisBuffer传递未解码的buffer给component&#xff0c;component收到该命令后会去读取input port buffer中的数据&#xff0c;将其组装为帧之后进行解码&#xff0c;buffer处理完成后会通过EmptyBufferDone通知上层输入使用完成&#xff0c;上层收到命令可以继续送输入…

区块链游戏解说:什么是 SecondLive

数据源&#xff1a;SecondLive Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 SecondLive SecondLive 是元宇宙居民的中心枢纽&#xff0c;拥有超过100 万用户的蓬勃社区。它的主要使命是促进自我表达&#xff0c;释放创造力&#xff0c;构建梦想中的平行宇宙…

Easy-Es操作Elasticsearch

文章目录 1 Easy-Es1.1 简介1.2 MySQL与Easy-Es语法对比1.3 集成及配置1.3.1 pom.xml1.3.2 配置 1.4 使用1.4.1 注解的使用1.4.2 EsMapper接口1.4.3 简单搜索 1.5 使用案例1.5.1 综合商品搜索1.5.2 相关商品推荐1.5.3 聚合搜索商品相关信息 1 Easy-Es 使用过Spring Data操作ES…

线性代数:矩阵的初等变换

目录 一、初等行变换 行阶梯 / 行最简 性质 二、矩阵的标准型 三、矩阵的等价 四、初等矩阵 五、重要性质与定理 一、初等行变换 行阶梯 / 行最简 性质 二、矩阵的标准型 三、矩阵的等价 四、初等矩阵 五、重要性质与定理

滑动窗口最终弹

力扣30.串联所有单词的子串&#xff08;巨困难&#xff09; 这个最难的是什么 1.代码的编写 2.容器的使用 class Solution {List<Integer>retnew LinkedList<>();//保存字典中所有单词的频次public List<Integer> findSubstring(String s, String[] words) …

美赛常见数据收集网站(最新、最全、全部可用+所有网站使用说明)

授人以鱼不如授人以渔&#xff0c;本次将会为大家更新如何去寻找赛中我们需要的数据集。 在数模界一直流传着一个数据库,据说报告了各种各样的数据收集网站,大家可能手里也有这样的数据库。但是这数据从2018我知道开始到现在一直没有变过。里面80%甚至90%的网站都无法使用&…

php的性能要比node.js高很多吗?

在当今的编程世界中&#xff0c;PHP和Node.js是两种广泛使用的服务器端编程语言。虽然它们都用于构建高效的网络应用程序&#xff0c;但关于它们性能的争论一直存在。有些人认为PHP的性能要比Node.js高很多&#xff0c;而另一些人则持相反意见。 性能通常指的是计算机程序或系…

人脸识别的多样化和稀疏关注对姿势变化和遮挡具有鲁棒性

DSA-Face: Diverse and Sparse Attentions for Face Recognition Robust to Pose Variation and Occlusion 一、创新点 1.提出了成对自我对比注意力来强制模型提取不同的局部特征&#xff1b; 2.设计注意力稀疏性损失是为了鼓励注意力图中的稀疏反应&#xff0c;阻止对分散注意…