C++类和对象,初见类
坚持看完,结尾有思维导图总结
这里写目录标题
- C语言和 C++ 的区别
- 类的定义
- 类的初认识
- 类的内容
- 访问限定符
- 类的作用域
- 类的实例化
- 类中的 this 指针
- 总结
C语言和 C++ 的区别
C++ 的祖师爷除了在 C语言的基础上化简了一些复杂操作
更为重要的是,两个语言实现的过程是不一样的
C 语言是一种面向过程的语言,而 C++ 是一种面向对象的语言
如果是洗衣服
C 语言会这样洗
那盆子,放水,放衣服,加洗衣粉,手搓,晾干
而 C++ 会先分析有哪些对象
会有 人 衣服 洗衣机 洗衣粉
通过这些对象的交互完成洗衣服
人只要做把衣服放进洗衣机,加洗衣粉,打开洗衣机就可以
不需要关注衣服是怎么洗的
类的定义
类的初认识
上面我们如果是用 C 语言来写,就要定义一个盆子,然后放水是一个函数
放衣服是一个函数,加洗衣粉是一个函数,手搓衣服是一个函数,晾干是一个函数
然后一步步地走
但是 C++ 不同
他会把人 衣服 洗衣粉 洗衣机分别定义成一个个的类
人有哪些特性,功能,归到人这个类里面
衣服有哪些特性功能,归到衣服这个类中
洗衣机有哪些特性功能,归到洗衣机这个类中
我们很自然地联想到,一个自定义的类型,在 C语言中我们常使用结构体定义
struct 但是 在 C 语言里面,结构体内部并不支持函数
然而在 C++ 中,我们可以在结构体里头写函数了 ,这样于 c语言结构体类似但是不同的东西 我们把他叫做类
类的定义是这样的
class Name
{
//成员函数和成员变量
};// 注意分号
类的内容
类中的内容可以分成两类,一类是 成员变量 , 一类是成员函数
如果我们认识一个人,我们能知道这个人是谁,叫什么名字,是什么性别
class Person
{
//成员函数
public:void personinfo(){cout << _name << ' ' << _age << ' ' << _sex << endl;}
// 成员变量
private:char* _name;int _age;char* _sex;
};
这里的实现是声明和定义放在一起的
有时候,类中声明和函数放在一起的情况,编译器可能会把成员函数看做是内联函数
如果我们想要把声明和实现分离


在实现的位置,一个是不要忘记头文件的应用
在引用完头文件后,要说明实现的函数属于哪一个类,这里是类的作用域的问题
声明则放在类里面
访问限定符
有一件奇怪的事情
为什么成员变量前面要加上 private 而 成员函数前面要加上 public
这里就设计到访问限定符的问题
我们都用过洗衣机,也大概都知道怎么用洗衣机
就那几个按钮的事情对吧
我们不会为了使用洗衣机去研究洗衣机的结构
类也是这样,除了设计者
使用的人只要会用成员函数就可以了,并不会去关注成员变量有哪些
public 变式公共的 ,能够为外界调用
private 表示私人,就是不能被类之外的操作访问,但是类内的函数(成员函数)是可以访问的
那我们就能够调用 public 的函数来间接按照特定的方式访问 private 的成员
还有 一个访问限定符 叫 protected 因为是 简略说明 ,所以暂时不介绍
其中需要注意的是
class的默认访问权限为private,struct为public(因为struct要兼容C)
访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止, 如果后面没有访问限定符,作用域就到 } 即类结束。
而这种通过访问权限,隐藏类的成员变量结构,显示类的访问方式的做法,就是封装
就好像是洗衣机内部被洗衣机外壳包起来,我们看不到内部结构的方式,就是封装
而封装是面向对象 的三大特性之一
类的作用域
之前在初识C++ 中,我们说为了防止多个程序员使用同名变量,同名函数
我们可以用不同的作用域,来圈定哪些变量属于程序员 A ,哪些变量属于程序员 B
而当我们定义一个类的时候,会自动生成一个类的作用域
不同的类是可以使用同名函数和变量的,使用类的作用域能够很好地应对这种情况
因为成员变量已经在类里面了不用再表明属于哪一个类
而当函数声明和实现分离时,在实现函数的时候,必须指明属于哪一个类,防止实现的混淆
类的实例化
前面我们解决的是类的声明的问题
类的声明,就好像把动物分成一个个种类,比如像熊猫,这是一类动物
但是其中的每一只熊猫都有自己的特征,自己的名字等
这种就叫做实例化
在计算机中,我们说类有 成员函数,成员变量,都是类的声明
而在使用中调用的类,才是类的实例化
我们可以简单理解为为类开空间就是类的实例化
既然为类开空间了,那就说明有空间大小
空间大小是如何计算呢?
尤其是一个类中有成员函数,整个类大大小计算更加奇怪了
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;class Date
{
public:void DateInit(Date& date, int year = 1, int month = 1, int day = 1);
private:int _year;int _month;int _day;
};void Date::DateInit(Date& date,int year,int month,int day)
{date._year = year;date._day = day;date._month = month;
}int main()
{Date d1;d1.DateInit(d1,2023,2,14);cout << sizeof(d1) << endl;return 0;
}
我定义了一个日期类,其中内部成员有年月日
通过计算大小,发现

计算大小是 12 ,说明 ---- 内部只给内部成员开辟了空间,但是没有给函数开辟空间
那函数的空间开辟到哪里去了呢?
实际上,类的空间开辟,是这样的
事实上,每一个成员虽然不同,但是调用的成员函数传递的参数都是一样的
也就是说,对于类的成员函数来说
每个类只要把成员函数需要的参数传给我就可以了
成员函数是不管你是哪一个成员
我们在观察一下对应的汇编代码

可以看到调用的是同一个函数
既然编译器都帮你对应的函数调用转换了,和调用一个普通函数差不多
又何必开辟空间储存对应的函数指针甚至是整个函数栈帧呢,答案是没有必要浪费这个空间
但是要注意的是,如果实例化一个空类(一个没有内容的类)
他的空间大小是 1 ,用来占位
类中的 this 指针
在类的成员函数中,我们可以这样写初始化函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>using namespace std;class Date
{
public:void Init(int year,int month,int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};int main()
{Date d1;d1.Init(2023,2,16);return 0;
}
在调试中我们能够看到 d1 被初始化为 2023 2 16

但是传参中,我可是没有传递任何与 d1 相关的参数
只是之前的 d1.Init 指定了一下而已
成员函数是怎么样找到 d1 然后将 d1 初始化的呢?
实际上,编译器会自动帮我们传递一个 this 指针 的参数交给成员函数
这个 this 指针始终指向 调用这个成员函数的对象
比如我们 d1.Init 调用 Init 成员函数
编译器会把 this 指针传参
然后对应的成员 变成 this->成员 的解引用

但是我们不能直接把 this 指针当成一个参数写在函数上面
如果这样写,编译器会传递自己在函数自动传参的 this 指针
但是 用户写的 this 这个形参的坑就没有人填了,导致形参数量过多,出现问题
总结

希望大家看完,能够有所
如果有错误,请指出我一定虚心改正
动动小手点赞
鼓励我输出更加优质的内容
相关文章:
C++类和对象,初见类
坚持看完,结尾有思维导图总结 这里写目录标题C语言和 C 的区别类的定义类的初认识类的内容访问限定符类的作用域类的实例化类中的 this 指针总结C语言和 C 的区别 C 的祖师爷除了在 C语言的基础上化简了一些复杂操作 更为重要的是,两个语言实现的过程是…...
Redis常用数据结构及应用场景
1.总体结构 Redis中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。 2.string类型 Redis中最基本的类型,它是key对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以…...
C++虚继承内存布局
C菱形继承内存布局 编译器:Visual Studio 2019 关于如何查看内存布局 B class B { public:B(): _ib(10), _cb(B){cout << "B()" << endl;}B(int ib, char cb): _ib(ib), _cb(cb){cout << "B(int,char)" << endl;}vi…...
IO模型--从BIO、NIO、AIO到内核select、poll、epoll剖析
IO基本概述 IO的分类 IO以不同的维度划分,可以被分为多种类型;从工作层面划分成磁盘IO(本地IO)和网络IO; 也从工作模式上划分:BIO、NIO、AIO;从工作性质上分为阻塞式IO与非阻塞式IO;…...
Zebec完成BNB Chain以及Near链上协议部署,多链化进程加速
从去年开始,Zebec 就开始以多链的形式来拓展自身的流支付生态,一方面向更多的区块链系统拓展自身流支付协议,即从Solana上向EVM链上对协议与通证等进行迁移与拓展。目前基本完成了在BNB Chain以及Near上的合约部署,且能够在这些EV…...
wpscan常见的使用方法
目录 简单介绍 暴力破解 信息收集 指定用户爆破 命令集合 简单介绍 Wordpress是一个以PHP和MySQL为平台的免费自由开源的博客软件和内容管理系统。 WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安…...
Tree 底层源码实现(二叉树、递归、迭代)
树(Tree)是一种非线性数据结构,由一组节点和它们之间的边组成。在树中,每个节点都有零个或多个子节点,除了根节点外,每个节点都有且仅有一个父节点。树可以被用于许多应用程序,如文件系统、XML文…...
家政服务小程序实战教程13-接入客服
小程序在微信里使用,以其无需安装随用随走为特点。但是有个问题是,如果提供商品或者服务的,用户如果有问题往往希望平台的运营方给出专业的解答。为了满足这类需求,就需要我们提供客服接入的功能,用户可以点击客服图标…...
大白话高并发(三)
背景 高并发得第三篇,讲一讲压测吧,因为我的目的是模拟100万人同时来秒杀。 是不是真的要找100万个人 没必要 ,你就算100万人掐着表在同一毫秒内把请求请求某一台机器,服务器也不可能在同一时间处理那么多请求,因为…...
vue全家桶(四)前端工程化
vue全家桶(四)前端工程化1.模块化的相关规范1.1模块化概述1.2模块化的分类A.浏览器端的模块化B.服务器端的模块化C.ES6模块化1.2.1 Node.js中通过bable体验ES6模块化1.2.2 ES6模块化的基本语法1.2.2.1 默认导出与默认导入1.2.2.2 按需导出与按需导入1.2.…...
超螺旋滑模控制(STA)
超螺旋滑模控制(Super Twisting Algorithm, STA) 超螺旋滑模控制又称超扭滑模控制,可以说是二阶系统中最好用的滑模控制方法。 系统模型 对于二阶系统可以建立具有标准柯西形式的微分方程组 {x˙1x2x˙2fg⋅u\begin{cases} \dot x_1 x_2 \\ \dot x_2 f g \cdo…...
NX二次开发编译时dll自动数字签名及拷贝
前言 在UG5.0开始,所有基于UG二次开发的DLL都要“签名”后才能被客户端上正版的NX调用。 一、基于C# 开发签名 1、添加资源文件 (1)项目类库上右键–>属性–>资源–>添加资源右边小三角–>添加现有文件–>切换到UG安装目录下…...
教你如何搭建人事OA-薪资管理系统,demo可分享
1、简介1.1、案例简介本文将介绍,如何搭建人事OA-薪资管理。1.2、应用场景根据设置薪资基础及考勤和绩效的数据计算得到各个员工工资详情。2、设置方法2.1、表单搭建1)新建表单【工资表】,字段设置如下;名称类型名称类型人员资料分…...
ChIP-seq 分析:Mapped 数据可视化(4)
1. Mapped reads 现在我们有了 BAM 文件的索引,我们可以使用 idxstatsBam() 函数检索和绘制映射读取的数量。 mappedReads <- idxstatsBam("SR_Myc_Mel_rep1.bam")TotalMapped <- sum(mappedReads[, "mapped"])ggplot(mappedReads, aes(x…...
Jenkins 基于Kubernetes 弹性构建池
流程:创建Jenkins Agent;获取Jenkins Agent的参数;渲染yaml模板;调用K8s API在固定的NS中创建一个Pod;运行Jenkins pipeline到agent;创建Agentimport hudson.model.Node.Mode import hudson.slaves.* impor…...
经典算法题---链表奇偶重排(好题)双指针系列
我听别人说这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。——《阿甘正传》这一文章讲解链表的奇偶排序问题,这是一道不难但是挺好的链…...
数据仓库实战
目录1、最佳实战1.1 表的分类1.2 ETL策略1.3 任务调度2、项目实战2.1 项目概述2.2 数据描述2.3 架构设计2.4 环境搭建2.5 项目开发1、最佳实战 1.1 表的分类 维度建模中表的类型:事实表和维度表 事实表又可以分为:事务事实表、周期快照事实表、累积快照…...
GPT系列:GPT, GPT-2, GPT-3精简总结 (模型结构+训练范式+实验)
😄 花一个小时快速跟着 人生导师-李沐 过了一遍GPT, GPT-2, GPT-3。下面精简地总结了GPT系列的模型结构训练范式实验。 文章目录1、GPT1.1、模型结构:1.2、范式:预训练 finetune1.3、实验部分:2、GPT-22.1、模型结构2.2、范式:预…...
ASE12N65SE-ASEMI高压MOS管ASE12N65SE
编辑-Z ASE12N65SE在ITO-220AB封装里的静态漏极源导通电阻(RDS(ON))为0.68Ω,是一款N沟道高压MOS管。ASE12N65SE的最大脉冲正向电流ISM为48A,零栅极电压漏极电流(IDSS)为10uA,其工作时耐温度范围为-55~150摄氏度。ASE…...
centos8防火墙命令配置(开放端口)
查看防火墙状态:(root用户)firewall-cmd –state启动防火墙:(root用户)systemctl start firewalld.service查看防火墙开放端口:(root用户) firewall-cmd --list-ports …...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
