类和对象(上)

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

相关推荐
Sunshine for you6 分钟前
实时操作系统中的C++
开发语言·c++·算法
史蒂芬_丁11 分钟前
C++深度拷贝例子
java·开发语言·c++
Knight_AL44 分钟前
Nacos 启动问题 Failed to create database ’D:\nacos\nacos\data\derby-data’
开发语言·数据库·python
「QT(C++)开发工程师」1 小时前
C++11三大核心特性深度解析:类型特征、时间库与原子操作
java·c++·算法
leiming61 小时前
CAN 通信协议学习讲义(带图文 + C 语言代码)
c语言·开发语言·学习
xht08322 小时前
PHP vs C语言:核心差异全解析
c语言·开发语言·php
yoothey2 小时前
Java字节流与字符流核心笔记(问答+考点复盘)
java·开发语言·笔记
查古穆2 小时前
python进阶-Pydantic模型
开发语言·python
沐知全栈开发2 小时前
Bootstrap4 导航栏
开发语言
kyriewen112 小时前
异步编程:从“回调地狱”到“async/await”的救赎之路
开发语言·前端·javascript·chrome·typescript·ecmascript·html5