先来看看面向对象和面向过程的区别
1.打个比方有个外卖系统这个系统是一个结构
面向过程的内容是:顾客下单,商家接单,骑手接单,送单,顾客点评
面向对象的内容是:商家的操作,骑手的操作,顾客的操作
通过3个不同对象的交互关系 来达到外卖系统的功能
1.类的关键字:
class , struct,这是类的俩个关键字,
区别:
class 默认成员变量和函数是私有的,struct 默认是共有的因为要兼容c的语法;
2.访问限定符:
public:
private:
protected:
只有public内的成员才是在类外面可以被访问的,将对象和方法封装到一起就实现了封装,就限定了接口,比如栈:在c语言中可以这样访问:x.a.top由于底层逻辑不同就可能导致错误
3.在类里面定义函数编译器会将其当成内敛函数,所以一般情况下,最好将定义和声明分开写,
在一般情况下写在类里面写定义长度比较短的函数。
4.隐藏的this指针,为什么会有隐藏的this指针呢?因为在类的定义中,创建一个类的变量
只有成员变量会占有空间,成员函数不占用空间,且满足内存对齐规则,如果只有函数或者什么都没有,那么会占用一个字节,来标记该变量存在。函数被放在代码区,this指针会在调用函数时自动传递过去的,不能在形参和实参中显示写出,这个工作是由编译器自己做的。
5.构造函数,负责:类对象成员的初始化工作,没有返回值,可以带参数,函数名就是类名,一般是全缺省参数或者不写参数
传参是要在变量后面传;
对于内置类型,默认的生成的构造函数不会处理,对于自定义类型默认的构造函数会处理,
什么是默认是构造函数?
有3类:
(1)自己写的全缺省参数的构造函数;
(2)自己不写编译器默认生成的;
(3)自己写的不带参数的构造函数
不传递参数的时候编译器会自动调用其中的一种经行对变量初始化.
6.析构函数:
特点没有参数没有返回值,在类名前面加上~
负责对象的清理:malloc,new,realloc等,空间的释放,在变量声明周期结束时自动调用。对内类类型不做处理。
7.拷贝构造函数:没有返回值,参数只有一个类型必须是引用:传值调用会引发无限递归
:
这是浅拷贝。
使用方式:
自定义类型对象之间互相赋值。