文章目录
1.什么是面向过程和面向对象
简述一下:
我们先来了解什么是面向过程,顾名思义这里注重的就是过程
比如我们要去洗衣服,我们是先拿盆->拿洗衣粉->接水->泡衣服->手搓->过水->晾衣服(这里的每一步都需要我们亲力亲为)
而面向对象注重的就是对象本身,它靠对象与对象之间的交互解决问题
同样的洗衣服,我们将衣服和洗衣粉直接倒入洗衣机中靠洗衣机这个对象帮我们解决问题
2.什么是类
类其实说白了也是一种自定义的类型,他就是一个自定义的变量类型,在这里看不出它和C语言中的struct有什么太大的区别但是在C++中把struct和class进行了一个升级,也就是说class和struct本质其实相差不大就是在访问限定上有出入。
2.1类的引入(通过结构体)
在C++中可以在struct中定义成员函数,也就是说在C++中我们可以在结构体中定义函数,也就是说之前我们利用C语言学习了一种数据结构-栈,当时我们是把数据和函数进行了一个分离,这下既然在结构体中我们可以声明和定义函数了我们就把整块儿要用到的函数直接放入到对应的结构体中那么我们是不是就方便了很多呢?这也能初步理解一下什么是面向对象了,就是把一个地方画地为牢,让这里变成一个整体然后来帮助我们解决问题。
这里C++的栈我没有实现,但是实现的思路和C语言一样,我们可以看见我们可以把这些函数直接放在结构体中
我们喜欢把这种结构体换个名字称作类,class。
2.2定义一个类
class是类的关键字,classname是类的名称,我们把类中的变量称为成员变量或者类的属性把在类中的函数称为成员函数或者类的方法
类的两种实现方式:
第一种:声明和定义放在一起但是这里要注意,在类中定义的函数默认都是内联函数
第二种:声明和定义分离,也就是指成员函数的声明在.h的头文件中,成员函数的定义在.cpp的文件中
注意:成员函数名前需要加类名::(这种较为推荐)
2.3访问限定符号,结构体和类的区别
访问限定符号共有三种:public(共有),protected(保护),private(私有)。
访问限定符号的注意事项:
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- 如果后面没有访问限定符,作用域就到 } 即类结束。
- class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:在继承和模板参数列表位置,struct和class也有区别
3.如何计算类的大小
3.1类的实例化
在讲计算之前我们应该先了解一下如何实例化我们类的对象,我们的类可以看作是一张图纸,我们不能直接在图纸里进行操作吧,比如我们这是一张房屋的构造图,它是一张图,你买个冰箱能放在图纸里吗?显然是不可以的,所以我们需要通过类去制造一个对象,再利用对象去存贮一系列数据和结构体的对象一样都是类 或者 结构体 加变量名
3.2类的计算方式
在C语言中我们学习过结构体的计算方式那就是结构体对齐规则
没学过的点击这里<
在计算类的大小的时候只用计算成员变量,因为只有成员变量的地址是在类中的,成员函数的地址不是存放在类中的它是存在代码段的公共区,所以当我们学会结构体的大小计算方式我们也就会计算类的大小
4.this指针
什么是this指针呢?
我们用类实例化了两个对象,那么当这两个对象都去调用一个函数的时候,这个编译器是怎么区分的呢??
这才是你调用成员函数的时候它的真实样子它会自动的处理成员函数隐藏的this指针,所以我们才能够去区分哪个对象调用的是哪个函数?哪个函数需要用到哪个对象的成员变量。
this指针的用法或者特性:
- this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
- 只能在“成员函数”的内部使用
- this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给
this形参。所以对象中不存储this指针。 - this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
递,不需要用户传递