网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
2.引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象,虽然引用不可以改变指向,但是可以改变初始化对象的内容
3.引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节
4.引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为NULL,所以不安全。
5.引用仅在声明时带有引用运算符“&”,以后像普通变量一样使用,不能再带“&”,其它场合使用的“&”都是地址操作符。
六、构造函数和析构函数
**构造函数的作用:**用于新建对象的初始化工作。(一个类可以有多个构造函数,构造函数可以重载,不可以加虚函数)
**析构函数的作用:**用于在撤销对象前,完成一些清理工作,比如:释放内存等。(一个类只能有一个析构函数,不可以重载)
**拷贝构造函数:**拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量,该参数是const类型,不可变的。
七、深拷贝和浅拷贝
**浅拷贝:**浅拷贝是对指针进行拷贝,拷贝后两个指针指向同一块内存空间。C++中如果不定义类的赋值构造函数,就会调用类的默认赋值构造函数,而类的赋值构造函数是浅拷贝。
**深拷贝:**深拷贝是对指针进行拷贝而且还对内容进行拷贝,拷贝完成后,指针指向的地址不一样,但是值是一样的。
**浅拷贝和深拷贝的区别:**前者就是使用编译器提供的默认拷贝构造函数或者默认赋值构造函数。后者是自己显示实现的拷贝/赋值构造函数。
八、对多态的理解
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类类,别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。
多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。
多态的条件:
1.必须有继承
2.要有虚函数重写
3.用父类指针(引用)指向子类对象
多态的基础理论:
**联编:**一个程序模块,代码之间互相关联的过程
**动态联编:**把程序联编的过程,推迟到运行时进行
静态联编
多态的实现效果:
同样的调用语句,不同的表现形态
**多态的意义:**设计模式的基础、编写框架的基础、函数指针做函数参数
九、数据结构有哪些
什么是数据结构:
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。
**常用的数据结构有:**数组,栈,链表,队列,树,图,堆,散列表等。
**数组:**数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问
**栈:**栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出。
**队列:**队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。
**链表:**链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
**树:**树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。
十、socket包安全
TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的。这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的。TCP的发送方无法保证对等方每次接收到的是一个完整的数据包。就会出现分包或粘包的问题.
**分包:**传输数据不完整,一条信息被分成多次发送。
比如我们发送了一条信息:“你好”,我们可能只收到了“你”,却没有收到“好”,这样就会导致数据的不完整。
粘包: