类和对象(上)

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

相关推荐
BestOrNothing_201510 分钟前
C++零基础到工程实战(4.3.3):vector数组访问与遍历
c++·迭代器·stl·vector·动态数组
贵沫末11 分钟前
python——打包自己的库并安装
开发语言·windows·python
charlie11451419116 分钟前
通用GUI编程技术——图形渲染实战(三十三)——Direct2D与Win32/GDI互操作:渐进迁移实战
c++·图形渲染·gui·win32
文祐22 分钟前
C++类之虚函数表及其内存布局(一个子类继承一个父类)
开发语言·c++
zuowei28891 小时前
华为网络设备配置文件备份与恢复(上传、下载、导出,导入)
开发语言·华为·php
xiaohe071 小时前
超详细 Python 爬虫指南
开发语言·爬虫·python
嗑嗑嗑瓜子的猫1 小时前
Java!它值得!
java·开发语言
xiaoshuaishuai82 小时前
C# GPU算力与管理
开发语言·windows·c#
lsx2024062 小时前
SVN 创建版本库
开发语言
xiaotao1312 小时前
01-编程基础与数学基石:Python错误与异常处理
开发语言·人工智能·python