类和对象(上)

1.c++中的class和struct讲解

class和struct本质上都可以归为类,二者只有一点差异.

类中可以有变量,也可以有函数.变量叫成员变量,函数叫成员函数.

访问限定符

public,private,protected.

public是公开限定符,后面两个目前都可以视为功能一样的内部限定符.

作用范围是开头到一个限定符或一个限定符到另一个限定符或一个限定符到类的末尾.

在没有类的内部没有限定符时,class默认整体为private,struct默认整体为public.

在创建成员变量时,一般在成员变量名前加一条_.

c++在使用类时,可以不用再写struct或class了,可以只写类名了.

成员函数默认是有inline的.

类代表了一个新的域:类域,下面代码可以说明类是一个独立的域同时每个函数前面都有inline.

类里面夹类,如果二者是同一个域,那么应该是可以找到对方,但是没有,同时这个error恰好证明了有inline在函数前面.因此成员函数的定义和声明最好放在一起.

然而声明放类中,在外部像namespace引用那样定义是可以的.

但是类域不可以使用using展开,其他与其他类形得域无太大区别.

创造的一个类,它的本质就像一张图纸,是一个模板但不是成品.也就是类只是声明,编译器没有给它开辟空间,只有在其创建变量时,编译器才会给该变量开启空间.

回忆:为什么会有内存对齐?因为机器读取数据是从起始位置以某个整数倍一段一段进行读取的,因此只有内存对齐时才能保证每次读取的数据是完整的.

还有空类或只有成员函数的类的大小是一个字节,这一个字节单纯是为了表示该类是存在的.

2.每创建一个类的变量,同一个类型的不同变量中的成员变量不同,但他们的成员函数是共用同一个的.说明他们的成员函数本质是独立存在的,与成员变量之间没有一点关系.

原因:this指针

this指针是c++中的一个关键字.是c++在成员函数的参数中隐藏的一个形参,实参是对应变量的地址.

将this给完整呈现后就会和c语言的代码近乎一样,只是c++简化而已.

上述代码之所以要注释,是因为c++不允许在实参和形参中写出this的实参和形参,但是在函数代码中可以直接使用this的解引用.(只可以对成员变量使用)(即使不写,编译器也会对函数中的成员变量进行this添加)

没冒红,说明成立.

this指针是存在栈区的,不是存在对象里,从空类的大小即可发现.

对指针的本质进行回顾

指针是存储一个地址,然后指向该地址,然后根据其自身类型判断该地址所控制的空间大小.因此,除非是想通过解引用修改该指针指向的地址,不然指针自身的地址价值不高,而指针指向的空间才有价值.

常规情况下对类是传地址

类的指针就是传指针中的值了

3.封装

类体现了c++的封装特征,即对不同的功能进行了不同程度的操控限制,可以一定程度上规范程序员的代码使用变规范.

相关推荐
wdfk_prog14 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
闻道且行之17 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午18 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系18 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜18 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
c2385619 小时前
Bug 猎手入门指南
c++·算法·bug
chouchuang20 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云空21 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
techdashen21 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
C137的本贾尼21 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件