全面且深度学习c++类和对象(上)
文章目录
- 过程和对象
- 类的引入,
- 类的定义
- 类的访问限定符及封装
- 类的访问限定符
- 封装
- 类的实例化
- 类大小
- 内存对齐规则:
- this指针
- this特性
过程和对象
C语言面向过程设计,c++面向对象设计,
举例:洗衣服
C语言:放衣服,放洗衣粉,启动洗衣机,脱水,拿出来晾干。
而c++关注对象,一共四个对象,人,衣服,洗衣粉,洗衣机。
这个过程是4个对象交互完成的,人不需要关注洗衣机如何工作洗衣服的,
类的引入,
C语言中结构体中只能定义变量,c++中可以定义变量和函数,如C语言实现的栈只能定义变量,而c++代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int DateType;
struct pll {void StackInit(int capacity = 4){_a = (DateType*)malloc(sizeof(DateType) * capacity);if (_a == NULL){perror("malloc fail");return;}_capacity = capacity;_size = 0;}void StackPush(int x){if (_size == _capacity){DateType* tmp = (DateType*)realloc(_a,sizeof(DateType) * _capacity * 2);if (tmp == NULL){perror("fail realloc");return;}_a = tmp;_capacity *= 2;}_a[_size++] = x;}int Top(){return _a[_size-1];}void Destroy(){if(_a)free(_a);_a = nullptr;_capacity = 0;_size = 0;}DateType* _a;int _capacity;int _size;
};
int main()
{pll st;st.StackInit();st.StackPush(2);st.StackPush(5);st.StackPush(6);st.StackPush(7);st.StackPush(4);cout << st.Top() << endl;st.Destroy();return 0;
}
4
注意,c++结构体中,定义的变量无先后顺序,无需注意定义变量的位置,所以结尾定义的_capacity等,开头的函数也能用。
🚩 并且在c++中,我们用class来代替struct
类的定义
class stu
{
public:void test(int age=4){_age=age;cout << _sex << _age << endl;}
public:char _sex;int _age;
private:string _birthday;
};
为了防止类中函数参数也有sex,age这种,我们类中定义变量都是前面加_,方便与函数参数区分。
类的访问限定符及封装
类的访问限定符
🚩 c++实现封装的方式:用类将对象的属性和方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部用户使用。
访问限定符说明:
1, public在类外可以被直接访问。
2, protected和private在类外不能被直接访问。
3,访问权限从类的访问限定符出现位置开始,持续到下一个类的访问限定符的出现,
4,如果后面没有类的访问限定符就持续 }即类的结束,
5, class的默认访问权限是private,struct默认访问权限是public(因为要兼容c语言)。
class和struct区别?
:c++兼容C语言,所以struct和class都可以定义结构体,还可以都定义类,区别是class默认访问权限private,struct访问权限public。
封装
在类和对象阶段,主要研究类和对象的封装,那么什么是封装?
🚩封装:通过类的方式将数据和操作数据结合起来,隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,
封装本质上是一种管理,方便用户更容易操作类。例如电脑对外公开键盘,鼠标,显示屏,方便用户操作,但计算机真正工作是cpu,显卡,内存等硬件。
在c++,通过类对数据和操作数据有机结合起来,通过访问限定符隐藏对象内部实现细节,决定是否对外公开接口。
类的实例化
#include <iostream>
#include <string>
using namespace std;
class stu
{
public:void test(){cout << _sex << _age << endl;}
public:char _sex;int _age;
private:string _birthday;
};
int main()
{stu st;return 0;
}
和结构体用法一样,用类创建实例对象就叫类实例化,一个类可以有多个实例化对象。
创建出的类就相当于建房子的一张图纸,没有分配实际的物理空间,创建实例对象的过程,就是拿着图纸建房子,分配了实际物理内存空间,。
类大小
#include <iostream>
using namespace std;
class cs1
{
public:void test1(){int a;}
};
class cs2
{
public:void test2();
private: long long a;int b;char c;
};
class cs3
{};
int main()
{cout << sizeof(cs1) << endl;cout << sizeof(cs2) << endl;cout << sizeof(cs3) << endl;return 0;
}
1
16
1
类大小计算,里面函数不占字节,函数放在公共代码区只保存一次,多个实例化对象只需要保存各自的成员变量,成员变量需要内存对齐
编译器给空类一个字节,方便辨识
内存对齐规则:
1,第一个成员在结构体偏移量0位置处。
2,接下来的成员变量大小对齐在对齐数的整数倍地址,总大小是对齐数的整数倍
3,对齐数:编译器默认大小 和 该类最大类型的大小,vs默认8
这里该类对齐数8,因为long long字节占8,排0-7,int从8开始排8-11,char12,总共13字节,但补充13-15,总共16字节
4,如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍
this指针
#include <stdio.h>
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(2020,2,12);Date d2;d2.Init(2021, 3, 14);return 0;
}
我们面临一个问题,d1,d2初始化时怎么确定是哪个_year,
所以引入了this指针:c++给每个非静态函数引入了this指针,this指向当前运行函数,函数内对成员变量的操作都是通过this指针访问完成的。只不过所有操作对用户是透明的,即用户不需要传递,编译器自动完成了。
this特性
1,this类型 *const,即不能改变 this指向,
2,this指针只能在自己本身函数使用
3,this指针是成员函数形参,函数调用将实参传给形参,所以类中不存储this
4,this指针是隐藏的指针,编译器通过ecx寄存器自动传递,不需要用户动手
相关文章:
全面且深度学习c++类和对象(上)
文章目录 过程和对象类的引入,类的定义类的访问限定符及封装类的访问限定符封装 类的实例化类大小内存对齐规则: this指针this特性 过程和对象 C语言面向过程设计,c面向对象设计, 举例:洗衣服 C语言:放衣服…...
QML元素 - RectangularGlow
QML 的 RectangularGlow 是 Qt Quick Effects 模块中专门为矩形元素设计的外发光效果,适用于为卡片、按钮、面板等矩形或圆角矩形添加柔和的边缘光晕,相比通用 Glow 更高效且支持圆角匹配。以下是详细使用技巧和优化指南: 1. 基本用法 impor…...
GraphPad Prism项目的管理
《2025新书现货 GraphPad Prism图表可视化与统计数据分析(视频教学版)雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism统计数据分析_夏天又到了的博客-CSDN博客 项目…...
uniapp自定义日历计划写法(vue2)
文章目录 uniapp自定义日历计划写法(vue2)1、效果2、实现源码前言:我们有时候需要实现的日历找不到相应的插件的时候,往往需要手动去写一个日历,以下就是我遇到这样的问题时,手搓出来的一个解决方案,希望可以帮助到更多的人。创作不易,请多多支持uniapp自定义日历计划写…...
差分探头为什么要选择使用屏蔽双绞线
市面上很多各种品牌的差分探头,其使用的线缆都使用了屏蔽双绞线(STP),这主要是因为在测试过程中因高压线路周围强电场或磁场在信号线与地线间感应出共模电压而产生的电磁耦合效应会对测试结果产生干扰,而屏蔽双绞线可以…...
Qt—用SQLite实现简单的注册登录界面
1.实现目标 本次实现通过SQLite制作一个简易的登录窗口,当点击注册按钮时,登录窗口会消失,会出现一个新的注册界面;完成注册或退出注册时,注册窗口会消失,重新出现登录窗口。注册过的用户信息会出现在SQLi…...
Visual Studio旧版直链
[Visual Studio 2019 社区版](https://aka.ms/vs/16/release/vs_community.exe) [Visual Studio 2019 专业版](https://aka.ms/vs/16/release/vs_professional.exe) [Visual Studio 2019 企业版](https://aka.ms/vs/16…...
elementUI源码学习
学习笔记。 最近在看element的table表格优化,又去看了一下element源码框架。element 的架构是很优秀,通过大量的脚本实现工程化,让组件库的开发者专注于事情本身,比如新加组件,一键生成组件所有文件,并完成…...
【LeetCode 热题 100】搜索插入位置 / 搜索旋转排序数组 / 寻找旋转排序数组中的最小值
⭐️个人主页:小羊 ⭐️所属专栏:LeetCode 热题 100 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置搜索旋转排序数组寻找旋转排序数组中的最小值…...
捌拾伍- 量子傅里叶变换 (3)
前期的内容在 捌拾叁- 量子傅里叶变换 前期的内容在 捌拾肆- 量子傅里叶变换 (2) 9. 之前的 之前的公式写错了! Markdown 的 KaTeX 真难用!!! 而且之前的公式是从 j1 – jn ,但量子计算都是从 0 开始的,…...
探索ISBN查询接口:为图书管理系统赋能
在开发图书管理应用时,ISBN(国际标准书号)查询接口是获取图书元数据的核心工具。通过扫描图书条形码得到ISBN,再调用API即可轻松获取书名、作者、出版社、封面等信息。本文详细介绍几种主流ISBN查询API,包括国际和国内…...
Linux 内核中 inet_accept 的实现与自定义传输协议优化
在 Linux 内核中,网络协议栈的核心功能由一系列精心设计的函数实现,其中 inet_accept 是 TCP 协议接受新连接的关键入口。本文将深入分析该函数的实现逻辑,并探讨在实现自定义传输协议时如何权衡性能优化与代码简化。 一、inet_accept 函数解析 1. 功能概述 inet_accept 是…...
SAP-ABAP:SAP DMS(文档管理系统)的详细说明,涵盖其核心功能、架构、配置及实际应用
1. DMS 概述 SAP DMS(Document Management System)是SAP系统中用于管理企业文档的核心模块,支持文档的全生命周期管理(创建、存储、版本控制、审批、归档)。它与其他模块(如物料管理MM、生产计划PP、设备维…...
前端方法的总结及记录
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
【Arthas实战】常见使用场景与命令分享
简介: Arthas是一款Java诊断工具,适用于多种场景,如接口响应变慢、CPU占用过高、热更新需求等。其核心命令包括实时监控面板(dashboard)、线程状态查看(thread)、方法调用链路追踪(trace&#x…...
SearchClassUtil
路径扫描工具SearchClassUtil,用于扫描指定包(XXXX)下的所有.class文件,并将它们的全限定类名(如tomcat.SearchClassUtil)收集到列表中返回。该工具使用递归文件遍历和反射机制,是实现 Spring 框…...
开放世界地形渲染:以三角洲行动为例(下篇)
本文主要介绍如何提升室外画面渲染的品质 版权声明 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本:见文末 渲染品质提升 要提升画面的品质,就是去提升渲染的画…...
GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈
摘要: 网络延迟在AI开发中常被忽视,却严重影响效率。GpuGeek通过技术创新,提供学术资源访问和跨国数据交互的加速服务,助力开发者突破瓶颈。 目录 一、引言:当算力不再稀缺,网络瓶颈如何破局? …...
关于 Web安全:1. Web 安全基础知识
一、HTTP/HTTPS 协议详解 1. HTTP协议基础 什么是 HTTP? HTTP(HyperText Transfer Protocol)是互联网中浏览器和服务器之间传输数据的协议,基于请求-响应模式。它是一个无状态协议,意思是每次请求都是独立的&#x…...
debugfs:Linux 内核调试的利器
目录 一、什么是 debugfs?二、debugfs 的配置和启用方式2.1 内核配置选项2.2 挂载 debugfs2.3 Android 系统中的 debugfs 三、debugfs 的典型应用场景3.1 调试驱动开发3.2 内核子系统调试3.3 性能分析 四、常见 debugfs 子目录与功能示例4.1 /sys/kernel/debug/trac…...
Spyglass:跨时钟域同步(同步使能)
相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 简介 同步使能方案主要用于数据信号跨时钟域同步,该方案将一个控制信号同步至目标时钟域并用其作为数据信号的捕获触发器的使能信号,如图1所示…...
安装Minikube
环境 CentOS7 参考 minikube start | minikube 创建虚拟机,参考 模拟Gitlab安装-CSDN博客 下载二进制包 curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 报错不能解析host,配置host 下载成功 安装 sudo install minikube-linux-am…...
图像锐化调整
一、背景介绍 之前找多尺度做对比度增强时候,发现了一些锐化相关算法,正好本来也要整理锐化,这里就直接顺手对之前做过的锐化大概整理了下,方便后续用的时候直接抓了。 这里整理的锐化主要是两块:一个是参考论文&#…...
【CanMV K230】AI_CUBE1.4
《k230-AI 最近小伙伴有做模型的需求。所以我重新捡起来了。正好把之前没测过的测一下。 这次我们用的是全新版本。AICUBE1.4.dotnet环境9.0 注意AICUBE训练模型对硬件有所要求。最好使用独立显卡。 有小伙伴说集显也可以。emmmm可以试试哈 集显显存2G很勉强了。 我们依然用…...
STM32外设AD-定时器触发 + DMA读取模板
STM32外设AD-定时器触发 DMA读取模板 一,方法思路二,定时器基础与配置1,定时器时钟源 (Clock Source)2,预分频器 (Prescaler - PSC)3,自动重装载寄存器 (Auto-Reload Register - ARR) / 周期 (Period)4,触…...
数据库故障排查指南:从入门到精通
1. 常见数据库故障类型 1.1 连接故障 数据库连接超时连接池耗尽网络连接中断认证失败1.2 性能故障 查询执行缓慢内存使用过高CPU使用率异常磁盘I/O瓶颈1.3 数据故障 数据不一致数据丢失数据损坏事务失败2. 故障排查流程 2.1 初步诊断 -- 检查数据库状态SHOW STATUS;SHOW PRO…...
【AT32】 AT32 移植 Freemodbus 主站
基于野火开发板 at32f437zgt6芯片 和at32 官方开发工具 移植了网上一套开源的freemodbus 主站 这里对modbus 协议不做过多的讲解 主要已实现代码为主 AT32 Work Bench 参考之前我之前的配置 与stm32cubemx软件差不多 注意485芯片的收发脚配置即可 AT32 IDE 说实话这软件太垃…...
内网环境下如何使用ntpdate实时同步时间
背景介绍 NTP(Network Time Protocol)是一种网络协议,用于同步计算机系统的时间。ntpdate是一个用于手动同步时间的命令行工具,它可以从指定的NTP服务器获取当前时间并更新本地系统时间。 ntpdate 服务介绍 功能:ntp…...
python版本管理工具-pyenv轻松切换多个Python版本
在使用python环境开发时,相信肯定被使用版本所烦恼,在用第三方库时依赖兼容的python版本不一样,有没有一个能同时安装多个python并能自由切换的工具呢,那就是pyenv,让你可以轻松切换多个Python 版本。 pyenv是什么 p…...
工商总局可视化模版 – 基于ECharts的大数据可视化HTML源码
概述 在大数据时代,数据可视化已成为各行各业进行数据分析和决策的重要工具。幽络源今天为大家带来一款基于ECharts的工商总局数据可视化HTML模版,帮助开发者快速搭建专业级工商广告数据展示平台。这款模版设计规范,功能完善,适合…...
计算机网络 : 网络基础
计算机网络 : 网络基础 目录 计算机网络 : 网络基础引言1. 网络发展背景2. 初始协议2.1 初始协议2.2 协议分层2.2.1 软件分层的好处2.2.2 OSI七层模型2.2.3 TCP/IP五层(四层)模型 2.3 TCP/IP协议2.3.1TCP/IP协议与操作系统的关系&…...
eSwitch manager 简介
eSwitch manager 的定义和作用 eSwitch manager 通常指的是能够配置和管理 eSwitch(嵌入式交换机)的实体或接口。在 NVIDIA/Mellanox 的网络架构中,Physical Function(PF)在 switchdev 模式下充当 eSwitch manager&am…...
物联网技术在银行安全用电系统中的应用与实践研究
摘要 随着金融科技的快速发展,银行业电子设备数量激增,用电安全管理问题日益突出。本文基于2019年农业银行与2020年中国邮政储蓄银行发布的安全用电相关政策,分析了银行场景下存在的五大用电安全隐患,提出以物联网技术为核心的安…...
589. N叉树的前序遍历迭代法:null指针与栈的巧妙配合
一、题目描述 给定一个N叉树的根节点,返回其节点值的前序遍历结果。前序遍历的定义是:先访问根节点,再依次遍历每个子节点(从左到右)。例如,对于如下N叉树: 1/ | \3 2 4 / \ 5 6前序遍历结果…...
【洗车店专用软件】佳易王洗车店多项目会员管理系统:一卡多用扣次软件系统实操教程 #扣次洗车管理软件
一、软件试用版资源文件下载说明 (一)若您想体验软件功能,可通过以下方式获取软件试用版资源文件: 访问头像主页:进入作者头像主页,找到第一篇文章,点击文章最后的卡片按钮,即可了解…...
小红书笔记详情接口如何调用?实操讲解。
调用小红书笔记详情接口通常需要经过申请权限、构建请求、发送请求并处理响应等步骤,以下是详细的实操讲解: 一、申请接口权限 注册小红书开放平台账号 访问小红书开放平台官网/第三方开放平台,按照提示完成注册流程,提供必要的…...
leetcode 57. Insert Interval
题目描述 代码:由于intervals已经按照左端点排序,并且intervals中的区间全部不重叠,那么可以断定intervals中所有区间的右端点也已经是有序的。先二分查找intervals中第一个其右端点>newInterval左端点的区间。然后按照类似于56. Merge In…...
杰理ac696配置mic
省电容mic有概率不出声解决办法如下...
COMSOL随机参数化表面流体流动模拟
基于粗糙度表面的裂隙流研究对于理解地下水的流动、污染物传输以及与之相关的地质灾害(如滑坡)等方面具有重要意义。本研究通过蒙特卡洛方法生成随机表面形貌,并利用COMSOL Multiphysics对随机参数化表面的微尺度流体流动进行模拟。 参数化…...
Linux远程连接服务
远程连接服务器简介 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功能 分享主机的运算能力 远…...
用Python绘制梦幻星空
用Python绘制梦幻星空 在这篇教程中,我们将学习如何使用Python创建一个美丽的星空场景。我们将使用Python的图形库Pygame和随机库来创建闪烁的星星、流星和月亮,打造一个动态的夜空效果。 项目概述 我们将实现以下功能: 创建深蓝色的夜…...
EWOMAIL
1、错误 Problem: problem with installed package selinux-policy-targeted-3.14.3-41.el8.noarch package fail2ban-server-1.0.2-3.el8.noarch requires (fail2ban-selinux if selinux-policy-targeted), but none of the providers can be installed - package fail2ban-…...
网安面试经(1)
1.说说IPsec VPN 答:IPsec VPN是利用IPsec协议构建的安全虚拟网络。它通过加密技术,在公共网络中创建加密隧道,确保数据传输的保密性、完整性和真实性。常用于企业分支互联和远程办公,能有效防范数据泄露与篡改,但部署…...
【每天一个知识点】意图传播(Intent Propagation)
在人工智能(AI)快速发展的背景下,自然语言处理(NLP)已成为推动智能系统理解与生成自然语言的核心技术。其中,“意图识别”作为人机交互的关键步骤,已被广泛应用于智能客服、对话系统、语音助手等场景。而“意图传播”(Intent Propagation)作为更深层的机制,逐渐成为当…...
【串流VR手势】Pico 4 Ultra Enterprise 在 SteamVR 企业串流中无法识别手势的问题排查与解决过程(Pico4UE串流手势问题)
写在前面的话 此前(用Pico 4U)接入了MRTK3,现项目落地需要部署,发现串流场景中,Pico4UE的企业串流无法正常识别手势。(一体机方式部署使用无问题) 花了半小时解决,怕忘,…...
工具:shell命令提示符自定义之显示GIT当前分支
1 背景 在命令行操作,每次想查看当前分支都要手动执行命令(git branch)太麻烦了,想着在命令提示符上面显示当前分支,很直观也很方便 2 实现 编辑 vim ~/.bashrc 文件,添加如下内容 function update_prom…...
现代计算机图形学Games101入门笔记(十四)
Irradiance 微小的能量/微小的面积 用Irradiance解释能量大小解释冬夏 Intensity没变,但是Irradiance是衰减的,外圈面积变大,单位面积上接受的能量就变小了。 入射进来 离开 这里就是从某个方向来了一个能量,经过反射,…...
前端开发笔记与实践
一、Vue 开发规范与响应式机制 1. 组件命名规范 自定义组件使用大驼峰命名法(如 MyComponent),符合 Vue 官方推荐,便于与原生 HTML 元素区分。 2. Proxy vs defineProperty 特性Proxy(Vue3)Object.defi…...
机器学习知识自然语言处理入门
一、引言:当文字遇上数学 —— 自然语言的数字化革命 在自然语言处理(NLP)的世界里,计算机要理解人类语言,首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”,例…...
泰迪杯特等奖案例深度解析:基于多级二值化与CNN回归的车牌识别系统设计
(第八届泰迪杯数据挖掘挑战赛特等奖案例全流程拆解) 一、案例背景与核心挑战 1.1 行业痛点与场景需求 在智慧交通与无感支付场景中,车牌识别是核心环节。传统车牌识别系统在复杂光照、污损车牌、多角度倾斜等场景下存在显著缺陷。根据某智慧油站2024年运营数据显示,高峰期…...