类和对象(上)

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

相关推荐
寻寻觅觅☆7 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
fpcc8 小时前
并行编程实战——CUDA编程的Parallel Task类型
c++·cuda
l1t8 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
赶路人儿8 小时前
Jsoniter(java版本)使用介绍
java·开发语言
ceclar1239 小时前
C++使用format
开发语言·c++·算法
码说AI9 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS9 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
lanhuazui109 小时前
C++ 中什么时候用::(作用域解析运算符)
c++
charlee449 小时前
从零实现一个生产级 RAG 语义搜索系统:C++ + ONNX + FAISS 实战
c++·faiss·onnx·rag·语义搜索
星空下的月光影子10 小时前
易语言开发从入门到精通:补充篇·网络爬虫与自动化采集分析系统深度实战·HTTP/HTTPS请求·HTML/JSON解析·反爬策略·电商价格监控·新闻资讯采集
开发语言