C++ - 类和对象(上)
目录
一、类的定义
二、访问限定符
public(公有)
protected(保护)
private(私有)
三、类声明和定义分离
四、外部变量和成员变量的区别与注意
五、类的实例化
六、类对象的模型
七、类的this指针
八、类中的构造函数
默认生成
用户自己写
九、析构函数
总结
前言
本章是类和对象的知识,主要是对面向对象和面向过程的区别,C语言是面向过程,那在C++中主要是关注在面向对象中。
一、类的定义
上一章中我们讲到C++是兼容C语言的,所以在C++兼容C语言里的struct的所有用法,struct同时也升级成类,类中升级有几点:
1. 类名就是类型,无需再使用typedef去重定义命名,使用类实例化时也无需再添加struct。
//旧
typedef struct stall{
//.......
}stall;
stuct stall a1;//或
stall a2;//新类
struct stall{
//.......
};
stall a;
2. 类里面可以定义函数了
struct Scom{void fun1(){//.....}void fun2(){//.....}void fun3(){//.....}
};
但是在c++中一般都是用class类定义类的,也很简单只需要将struct换成class即可。
//class为定义类的关键字,Classname为类的名字,{}为类的主体
class Classname{};
二、访问限定符
类中引入了访问限定符,有三种 public 、protected 、private
public(公有)
意思是类外部是可以使用或访问以下的内容。
protected(保护)
protected与下面的private功能上目前区别不大,在后面学到继承就有区别,主要先学习private为准。
private(私有)
private的功能在于限定类外不可访问,但是在类的内部可以访问,例:
这里可以看到给变量a进行了private限定符,类外部就不可访问了,那可以在类内部写个函数,让外部进行访问:
在功能上struct和class是一样的。
但是class默认是private,struct是public的,我们使用class类时,一般定义的成员变量都是私有的。
三、类声明和定义分离
当实现类声明与定义分离时,在定义中要指定类的域要带上 :: 例如:类 :: 函数
在一般情况下 .h 声明了也可以直接定义函数的,例:
在类里直接定义的话函数默认是inline内联函数,内联函数可以直接认为是用于优化程序的关键字。
那在一般情况下,我们长的函数就声明和定义分离,短小的函数可以直接在类里面定义。
四、外部变量和成员变量的区别与注意
我们在对类进行传参时,同名变量是不影响成员变量的数据的,但不建议变量与成员变量同名,因为不容易区分。
所以我们为了区分传参的变量与成员变量一般会在成员变量加上 _ ,例:_a就区别于a。
五、类的实例化
直接理解为给类实例一个对象,开辟一个空间。
例:class Person{
};
main: Person a; <--实例化对象
六、类对象的模型
成员变量会独立存储在一个一块独立的对象空间中;
类成员函数会把函数放在一个公共区域,主要是因为空间的可循环利用空间。
类和结构体一样会内存对齐,占用空间规则一样。
内存对齐的知识点(面试会考)
七、类的this指针
在类函数内部用 this -> 变量是可以获取或修改类内的成员变量的,函数传参不可修改。
this 是指向类内部的成员变量
面试题
this 指针会存在哪个位置?
会在栈帧中,vs下会存到 exc 寄存器里。
八、类中的构造函数
构造函数有两种情况
默认生成
在没写构造函数的情况下,编译器会默认生成一个。
这里的默认生成是内置类型成员不做处理,自定义类型回去调用默认构造函数。
用户自己写
构造函数也可以用户自己编写一个,在用户写了构造函数后编译器不会再生成使用默认生成的构造函数。
默认构造有三种
1.不写构造函数
2.无参构造函数
3.全缺省调用
三种默认构造函数只能存在一种
总结,1.一般情况下,都要写上构造函数。2.如果成员都是自定义类型或声明时给了缺省值就可以无需在构造函数上定义好成员变量。
九、析构函数
析构函数与构造函数相反,构造函数是对成员变量空间的申请与赋值,那么析构函数就是对完全对象中资源的清理,而不是对对象的销毁。
一般普通变量是无需写析构函数,而向栈申请空间的成员变量写析构函数才有意义,销毁动态内存。
注意:1.析构函数名是在类名前加上字符 ~
2.是无参无返回值的类型
3.一个类只能有一个(如未写析构函数,系统会自动生成一个,不能重载析构函数)
4.在对象的生命周期结束时,C++会自动调用析构函数
默认生成的析构函数,行为跟构造函数相似,内置类型成员是不会做任何的处理,但如果是自定义类型成员会去调用自己的析构函数。
总结
本章主要是简单讲解了类和对象的基本概念与用法,下一章会详讲类的重载等....知识点。
相关文章:

C++ - 类和对象(上)
目录 一、类的定义 二、访问限定符 public(公有) protected(保护) private(私有) 三、类声明和定义分离 四、外部变量和成员变量的区别与注意 五、类的实例化 六、类对象的模型 七、类的this指针…...
mysql基础4sql优化
SQL优化 插入数据优化 如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。 insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry);-- 优化方案一:批量插入数据 Inser…...
实现Spring Web MVC中的文件上传功能,并处理大文件和多文件上传
实现Spring Web MVC中的文件上传功能,并处理大文件和多文件上传 在Spring Web MVC中实现文件上传功能并处理大文件和多文件上传是一项常见的任务。下面是一个示例,演示如何在Spring Boot应用程序中实现这一功能: 添加Spring Web依赖&#x…...

搭建vite项目
文章目录 Vite 是一个基于 Webpack 的开发服务器,用于开发 Vue 3 和 Vite 应用程序 一、创建一个vite项目二、集成Vue Router1.安装 vue-routernext插件2.在 src 目录下创建一个名为 router 的文件夹,并在其中创建一个名为 index.js 的文件。在这个文件中…...
Docker 安装mysql 主从复制
目录 1 MySql主从复制简介 1.1 主从复制的概念 1.2 主从复制的作用 2. 搭建主从复制 2.1 pull mysql 镜像 2.2 新建主服务器容器实例 3307 2.2.1 master创建 my.cnf 2.2.2 重启master 2.2.3 进入mysql 容器,创建同步用户 2.3 新建从服务器容器实例 3308…...
GPT每日面试题—如何实现二分查找
充分利用ChatGPT的优势,帮助我们快速准备前端面试。今日问题:如何实现二分查找? Q:如果在前端面试中,被问到如何实现二分查找,如果回答比较好,给出必要的代码示例 A:当被问到如何实…...
机器学习神经网络由哪些构成?
机器学习神经网络通常由以下几个主要组件构成: 1. **输入层(Input Layer)**:输入层接受来自数据源(例如图像、文本等)的原始输入数据。每个输入特征通常表示为输入层中的一个节点。 2. **隐藏层ÿ…...
代码随想录算法训练营day19 | 二叉树阶段性总结
各个部分题目的代码题解都在我往日的二叉树的博客中。 (day14到day22) 目录 二叉树理论基础二叉树的遍历方式深度优先遍历广度优先遍历 求二叉树的属性二叉树的修改与制造求二叉搜索树的属性二叉树公共最先问题二叉搜索树的修改与构造总结 二叉树理论基础 二叉树的理论基础参…...

数据库引论:3、中级SQL
一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join,自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1,A2,⋯):使用括号里的属性进行自然连接,除了这些属性之外的共同…...

毕业设计:日志记录编写(3/17起更新中)
目录 3/171.配置阿里云python加速镜像:2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标:构建基本的python环境:运行爬虫程序 1.配置阿里云pytho…...

(一)基于IDEA的JAVA基础7
关系运算符 运算符 含义 范例 结果 等于 12 false ! 不等于 1!2 true > 大于 1>2 false < 小于 …...

MySQL数据库概念及MySQL的安装
文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统(DBMS)4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能(数据库与外界对接࿰…...

redis实际应用场景及并发问题的解决
业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候,有千分之三的概率掉落金币,每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群(这个要求暂时不实现) 编写接口&…...

考研数学|汤家凤《1800》基础部分什么时候做完?
从我个人的经验来看,做完汤家凤1800的基础部分在第一轮复习中并不是必须的,但是可以作为一个有效的复习工具。 我认为汤家凤1800的基础部分确实涵盖了考研高数的基础知识点,并且题目难度适中,适合用来巩固基础。在第一轮复习中&a…...
JS的设计模式(23种)
JavaScript设计模式是指在JavaScript编程中普遍应用的一系列经过验证的最佳实践和可重用的解决方案模板,它们用来解决在软件设计中频繁出现的问题,如对象的创建、职责分配、对象间通信以及系统架构等。 设计模式并不特指某个具体的代码片段,…...

[自研开源] MyData v0.7.5 更新日志
开源地址:gitee | github 详细介绍:MyData 基于 Web API 的数据集成平台 部署文档:用 Docker 部署 MyData 使用手册:MyData 使用手册 试用体验:https://demo.mydata.work 交流Q群:430089673 介绍 MyData …...

3月份的倒数第二个周末有感
坐在图书馆的那一刻,忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成,所以就选了嘉定图书馆,不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光,那是多么美好且短暂的时光。凝视着窗…...
Java 变得越来越像 Rust
Java 变得越来越像 Rust 介绍 随着编程的增强和复杂性越来越流行,许多编程语言也相互效仿。 Java 也不例外。 尽管社区内部存在问题,Rust 仍逐年赢得了开发人员的喜爱。并且有充分的理由:由于编译器,Rust 使开发人员能够避免整…...
通过git bash 或命令行ssh访问服务器 sftp上传下载文件
上传下载文件 sftp -P 端口 appywIP 示例:sftp -P 10022 appyw25.222.133.222 然后输入密码即可 ls 查看文件 lls 查看本地文件 cd 跳转 lcd 本地跳转 get ... 下载文件 put 本地文件名 远程文件夹 //上传文件 put -r 本地文件夹 远程文件夹 //上传文件夹服务器…...

27 OpenCV 凸包
文章目录 概念Graham扫描算法convexHull 凸包函数示例 概念 什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。 正式定义: 包含点集合S中所有点的最小凸多边形称为凸包 Graham扫描算法 首先选择Y方向最低…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...