当前位置: 首页 > news >正文

C++语法系列之前言


前言

蓝桥杯考完了,博主考的细碎,第一次参加编程比赛问题和错误出现了很多,主要原因还是练的太少。等明年蓝桥杯的时候再接着算法的更新吧。打完蓝桥杯了之后博主现在的主要目标是学习C++,主要会更新一些语法上的知识,本来最开始学C语言和数据结构的时候就准备更新来着,因为大一上忙这忙那就懒得更新了,数据结构部分我想在我们学校学习的时候更新,就是一些用C语言模拟实现的一些数据结构,栈,堆,队列,二叉树等,现在我正在学习C++,就开始进行C++的更新了,更新的内容和我学习的一致,绝对会包含学校学的知识点,目前学校学习了类,引用,模板,重载运算符等知识,我认为这些不算太复杂就没写博客,我会在这篇文章中指出一些注意事项,下一篇就是正式语法的更新(应该是继承)


1.protected 和 private

1.对于protected 和 private在继承这个语法里面有明显区别,其他情况下区别并不大,具体区别下一节继承会讲,不论继承的话,可以这么说,protected为未来继承预留了访问接口(还是继承

2.class

2.class 不写访问限定符类成员默认为private,而struct默认为public,平常为了图方便,可以使用struct,或者这样,这种自己看看就行,如果要上传git或者找工作的时候,private还是要区分开的,不希望被类外面直接访问的元素还是要加private

class a {public:
};

3.结构体size

3.关于类对象size大小的计算
//别告诉我直接sizeof就出来了奥(
这个设计到结构体内存对齐规则,一共有四条
1.第一个成员与结构体变量偏移量为0的地址处
2.其他成员变量要对齐到对齐数的整数倍的地址处
(对齐数 : 编译器默认对齐数与该成员大小的较小值 (Vs中默认对齐数的值为8))
3.结构体总大小为最大对齐数的整数倍
4.如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数的整数倍
举个例子就懂了
在这里插入图片描述
这里会输出16,根据规则,w四个字节,c一个,d八个,记住对齐数是和编译器默认的取小,所以w和c正常放进去(w是最开始的放在起点,c的字节数是1,对齐数取小就是1,任何数都是1的倍数,那他接着放在5就可以了),放d的时候,对齐数是8,其他成员变量要对齐到对齐数的整数倍的地址处,所以d起点是8,大小是8,所以最后size是16

4.关于初始化的一些问题

class Person {
public:Person():age(18),GPA(2.0),name("..."){}
private:string name;int age;double GPA;
};
int main()
{return 0;
}

那我问你,初始化的顺序是什么?
age -> GPA -> name?
其实不然
是声明的顺序
name-> age -> GPA
你可能会说了,那你问我,有啥区别啊,反正都初始化成功了,那我再问你,看下图
在这里插入图片描述
还觉得没问题吗?当一个依赖于另一个成员变量初始化的时候就要注意顺序了

5.关于this指针

this 指针是一个隐含的指针,存在于每个非静态成员函数中,它指向调用该成员函数的对象。借助 this 指针,你可以在成员函数内部访问当前对象的成员。
this指针并不存在于对象中!!!只是调用函数的时候通过形参来传入的

6.构造函数

编译器:对内置类型不做处理
,对自定义类型会调用它的默认构造函数
所以,一定别默认一个int类型的变量就是0了,要初始化!!!!

7 static

那我先问你,static修饰的变量存在于什么区?—静态区
在这里插入图片描述

静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
静态成员函数没有this指针
初始化static成员:

在这里插入图片描述
只能这么初始化!!!

8 深拷贝和浅拷贝

什么是深拷贝? 什么是浅拷贝?
通俗一点:浅拷贝只拷贝了数据,没有额外开辟空间,他们的指针成员变量指向了同一块内存,如下图
在这里插入图片描述
会不会有问题呢?
当然会,这两个对象被销毁时,同一块空间会被释放两次,程序就崩溃了
所以要有深拷贝,深拷贝就是为他开辟一块空间来存放数据,相对来说更安全,浅拷贝更方便

class a {
public:int* ptr;a(){ptr = new int(10);}a(const a& other){ptr = new int(*other.ptr);}
};
int main()
{a a1;a a2 = a1;getchar();return 0;
}

9.const

首先知道下const 和 static的区别
static主要修饰存储类型和作用域,“静态”
const修饰----“只读”
在这里插入图片描述
常用于函数参数,避免拷贝并防止修改

void print(const int& value)

在类里面
声明为const的成员函数不能修改类的非静态成员,防止出问题
非const成员可以调用const成员函数
但const成员只能调用const成员函数
下一个:权限不能放大!
在这里插入图片描述
非const < const --权限可以缩小 但是不能放大
有人会整出这么一份代码
在这里插入图片描述
这样涉不涉及到权限放大呢?当然没有,这是把10这个值赋值给了p
如果想func() = 2;当然就错了
还有一句,临时变量具有常性,常性类似于const
比如

const int func()
{return 1;
}int func()
{  
return 1;
}
没有什么本质区别

10引用 和 指针区别

引用不占用内存空间,而指针本身需要占用一定的内存空间来存储所指向变量的地址。
其他区别没什么好说的,注意不要随便返回引用,如
在这里插入图片描述
因为局部变量和临时变量出了声明周期就会被销毁,而你想去返回被销毁的东西当然会有问题,答案正确只是一些优化罢了
下面是一些八股文
在这里插入图片描述
五一可能会更新继承,就这样吧,作为C++语法的第一期水一水()

http://www.xdnf.cn/news/232201.html

相关文章:

  • 三轴云台之摄像模组篇
  • el-tabs与table样式冲突导致高度失效问题解决(vue2+elementui)
  • Maven插件学习(五)—— 将项目构建生成的 OSGi Bundles(或 Features)发布到一个 P2 仓库
  • Nginx核心
  • VMware Workstation 创建虚拟机并安装 Ubuntu 系统 的详细步骤指南
  • C++后端服务器开发:侵入式与非侵入式程序结构解析
  • 鸿蒙 应用开发 项目资源结构及资源访问
  • AI重构家居营销新范式:DeepSeek如何破解行业流量与转化困局?
  • 大模型优化利器:RLHF之PPO、DPO
  • 深入掌握CSS背景图片:从基础到实战
  • 深入探讨Facebook隐私政策的演变
  • 运维仙途 第2章 日志深渊识异常
  • 【Linux调整FTP端口】
  • 软件分析师-第三遍-章节导图-15
  • 量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解
  • 数据结构每日一题day14(链表)★★★★★
  • 读论文笔记-LLaVA:Visual Instruction Tuning
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 网络基础-----C语言经典题目(12)
  • ActiveMQ 可靠性保障:消息确认与重发机制(一)
  • [实战] Petalinux驱动开发以及代码框架解读
  • Mac下安装Python3,并配置环境变量设置为默认
  • 深度学习论文: Describe Anything: Detailed Localized Image and Video Captioning
  • 分组密码算法ShengLooog设计原理详解
  • 如何正确使用日程表
  • 【Java】equals、==、hashcode详解
  • 单片机的各个种类及其详细介绍
  • 复杂度和顺序表(双指针方法)
  • 国标GB28181视频平台EasyGBS在物业视频安防管理服务中的应用方案​
  • 进程地址空间