运算符重载
函数重载:函数名相同、函数功能相似、参数不同(个数、类型、顺序)、与返回值类型无关的一组函数!
运算符:+、-、++、--、 = 等等
为什么要进行重载的?
两数求和:
类型: int、 double、char、 类对象求和呢?
为什么要进行运算符重载:
让我们的运算更丰富一些,适用各种各样的数据类型!
运算符重载的方式有几种?
两种,一种是使用成员函数进行重载;使用友元函数进行重载。
+: 必须是两个
注意:运算符重载的时候,操作数的个数是不能发生变化的,并且参数是不能有默认值!
格式是什么样子?
友元的格式:
类类型 Operator+(参数1, 参数2);
成员的格式:
类类型 Operator+(参数2);
以复数类为例子: 1+2j 2+3j
1-1、友元函数重载+运算符
使用:
1-2、成员运算符+重载:
使用
区别:
友元运算符重载的参数个数比成员运算符重载的参数个数多一个;
成员运算符重载:隐藏的参数this代表它自己,表示第一个操作数,只需要给第二个操作数即可!
函数类型是类类型的时候,也会执行拷贝构造函数!
1-3、前++运算符重载
什么时候函数类型设计成类类型的引用:
如果我们返回的对象和参数传进来的对象是同一个的话,用引用!
1-4、后置++运算符重载
调用:
问:所有的运算符都可以通过友元和成员函数进行重载吗?
1-5、<<运算符重载—友元重载
输出流对象 << 输出的内容
模板: 函数模板和类模板
什么是模板:
Ppt、简历
泛型编程 : 就是类型是不确定的!逻辑是一致的!
2-1、函数模板
两数求和:
函数重载存在的问题:
只要类型不同就需要重新定义函数,造成逻辑冗余!
解决:把数据类型参数化
共同的逻辑提取出来,得到了函数模板!
函数模板的格式:
template<class/typename 形参>
函数类型 函数名(参数列表){}
函数模板是函数吗?不是函数,是模板!是不占内存的
什么时候函数模板才会变成真这个的函数呢?
实例化的时候
实例化的时候类型一样的,模板函数只会生成一个,后面要用的时候直接使用即可!
函数模板是可以进行重载的!
使用:
2-2、类模板
单链表为例子:
链表是由一个一个的节点组成的。
每一个节点: 数据域和指针域
一个类是模板,类中的所有的成员函数都是函数模板!!!
使用:
练习: 写两数比大小的函数模板,并测试!!!
C++中标准模板库 STL
C++中很多代码都是通过模板去实现的!
STL S标准 T模板L 库
就包含了很多的函数模板和类模板
学习一个类模板
3-1、 vector—向量—数组
是一种顺序容器,容器就是用来保存数据
结构:
引入文件 #include <vector>
容器的begin() 和 end()的位置如下:
面试题目:
总结一下数组和vector的区别?
STL中的几大组件:https://blog.csdn.net/NXHYD/article/details/108072498