C语言的封装风格:
数据用struct进行封装,然后吧数据以引用或者指针的方式传给行为
C++认为C语言封装不彻底:
- 数据和行为分离了
- 没有权限控制
对内:数据开放,逻辑抽象
对外:提供接口
C语言默认所有属性都是public的
C++则默认是private,增加了权限控制,数据和行为在一起,对内开放数据,逻辑抽象,对外提供接口
类,类对象,对象调用行为完成需求
声明和实现要分开,类似于头文件和cpp文件那种分开
如果成员函数返回的是引用,要用const修饰该成员函数,防止对象的私有数据被绕过接口修改
创建链表类:
constructor 构造器
- 与类名相同,无返回值,系统生成对象的时候自动调用,用于初始化对象
- 可以有参数,构造器的重载,默认参数,重载和默认参数不同时存在
- 如果未提供任何构造器,系统默认生成一个无参构造器,保证必能生成一个对象,无参构造器是标配
- 如果提供了有参构造器,则不再生成默认构造器
- 实际上可以通过默认参数来包含无参的情况,能够实现对象的无参创建
destructor 析构器
- ~与类名相同,无参数,无返回值
- 用于对象销毁时的内存处理工作
- 如果未提供,系统默认提供空析构器
先构造的后析构,后构造的先析构
拷贝构造器
如果不提供,系统也有默认
1.格式:A(const A & other)
2.一旦自定义,系统不再提供默认拷贝构造器
3.系统提供的默认是一种等位拷贝,即浅拷贝
4.浅拷贝会导致内存重析构,double free,在有些情况下(含有堆空间的时候),要自实现拷贝构造
5.
上面这段内存会被释放两次,在有些平台会崩溃
👇调用拷贝构造器,用一个对象,完成一个对象从无到有的创建过程
赋值运算符重载:
1.系统(编译器)提供默认的赋值运算符重载,也是一种等位赋值。一旦自定义则系统不再提供默认
2.默认赋值运算符重载也是等位赋值,也就是浅赋值
3.浅赋值,有可能导致:自身内存泄漏、内存重析构、自赋值
格式:
链式表达式: