类和对象(上)

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++的封装特征,即对不同的功能进行了不同程度的操控限制,可以一定程度上规范程序员的代码使用变规范.

相关推荐
西西弗Sisyphus1 小时前
Qt6 实现 会动的界面像物理世界一样
c++·qt
谢亮_vipxieliang1 小时前
Go GMP调度模型——从原理到实战的完整指南
开发语言·网络·golang
UIU1141 小时前
头文件可以防什么错?运用头文件做声明
c++·学习·c#
聪明蛋子哟2 小时前
Python与Java双栈实战:手撸一个支持RAG与Tool Calling的高性能Agent框架
java·开发语言·python
谢亮_vipxieliang2 小时前
Go Context 控制协程生命周期
开发语言·golang
by209992 小时前
list:迭代器与资源管理实现的综合叙述(下)
数据结构·c++·笔记·list
xuxigifxfh2 小时前
HJ4 字符串分隔
java·开发语言·华为机考
MayZork2 小时前
Qt 开发集成CMake + vcpkg
开发语言·c++·qt
零基础1232 小时前
PDF 处理工具全攻略:pdf24、PDFgear、Adobe Acrobat DC 与 Stirling-PDF 深度对比
java·开发语言·pdf
Java后端的Ai之路2 小时前
01-React基础教程
开发语言·前端·python·react.js·前端框架