配色: 字号:
C++运算符重载
2020-11-24 | 阅:  转:  |  分享 
  
C++演讲人2020-11-23目录01.模板02.引用03.运算符04.内存模型01模板模板函数模板类模板类模板与函数模板区别特点使用方法
普通函数与模板函数区别普通模板与函数调用规则模板的局限性模板函数模板1模板不可以直接使用,他只是一个框架函数模板特点2模板的通用不
是万能的使用方法自动推导类型必须推导出一致的数据类型T才可以使用模板必须确定出T的数据类型,才可以使用显式调用普通函数与模板函数
区别普通函数调用可以发送自动类型转换函数模板调用时显示指定类型的方式,可以发生隐式类型转换利用自身自动类型推导,不会发生隐式类型
转换01如果函数模板和普通函数都可以实现,优先调用普通函数02可以通过空模板参数列表来强制调用函数模板03函数模板可以发送重载04
如果函数模板可以发生更好的匹配,优先调用函数模板05总结:既然提供了函数模板,最好不要提供普通函数,否则容易出现二义性函数模板普通
模板与函数调用规则函数模板模板的局限性特定数据类型,需要用具体化的方式特殊实现模板建立一个通用的类,类中的成员类型可以不具体指定,
用一个虚拟的类型来代表成员函数调用时机类模板一般类模板头文件和源文件写在一起,后缀改为.hpp类模板对象做函数参数继承类模板ABC
成员函数调用时机类模板对象做函数参数建立一个通用的类,类中的成员类型可以不具体指定,用一个虚拟的类型来代表DE继承一般类模板头文件
和源文件写在一起,后缀改为.hpp类模板A类模板中的成员函数在调用时才创建成员函数调用时机普通函数中成员函数一开始就可以创建B指定
传入类型参数模板化整个类模板化类模板类模板对象做函数参数子类继承的父类是一个类模板时,子类在声明的时候,需要指出父类中T的类型要想
灵活指定出父类中T的类型,子类也需要变为类模板类模板继承如果不指定,编译器无法给予类分配内存模板A类模板在模板参数列表中可以有默认
参数类模板与函数模板区别类模板没有自动类型推导的使用方式B类模板与函数模板区别类模板没有自动类型推导的使用方式类模板在模板参数列表
中可以有默认参数02引用引用定义注意事项引用参数传参引用返回值引用的本质在C++内部就是一个指针常量引用定义给一个变量取别名010
2引用必须初始化引用初始化后不可以改变引用注意事项引用0102简化指针修改实参引用参数产生的效果同按照地址传递是一样的。引用语法更
清楚简单引用参数传参函数调用可以作为左值不要返回局部变量引用B引用引用返回值A03运算符运算符函数调用运算符左移运算符赋值运算符关
系运算符递增运算符加号运算符运算符没有固定写法,形参可以自定义,返回值可以自定义函数调用运算符名称名称operator()()也叫
仿函数函数调用运算符没有固定写法,形参可以自定义,返回值可以自定义名称不会利用成员函数重载<<运算符,因为无法实现co
ut在左侧全局重载左移运算符配合友元可以输出自定义的类型运算符左移运算符左移运算符名称不会利用成员函数重载<<运算符,
因为无法实现cout在左侧operator<<()全局重载左移运算符配合友元可以输出自定义的类型friendost
ream&Personoperator<<(ostrema&out,Person&p)
利用深拷贝替换浅拷贝问题名称B运算符赋值运算符A赋值运算符名称Person&operator=()返回引用利用深拷贝替
换浅拷贝问题运算符关系运算符名称关系运算符名称booloperator==(Person&p,Person&p1
)运算符递增运算符ABC名称前置自增后置自增LOGOoperator++()递增运算符名称可以全局,可以成员函数https://w
ww.wps.cn返回引用Person&operator++()B递增运算符前置自增A后置自增Personoper
ator++(int)形参int是为了区别前置自增返回值,不返回引用0102名称成员函数重载运算符加号运算符0304全局函数重载
函数重载加号运算符名称成员函数重载operator+()Personoperator+(Person&p)全局函数重载函
数重载Personoperator+(Person&p1,Person&p2)Personoperator+
(Person&p,inta)04内存模型代码区存放函数体的二进制代码,由操作系统管理共享的只读的全局区存放全局变量和静
态变量以及常量程序结束后操作系统释放栈区编译器自动分配释放,存放函数参数,局部变量等不要返回局部变量的地址,栈区数据由编译器释放堆区程序员分配和释放C++new在堆区开辟内存感谢聆听
献花(0)
+1
(本文系职场细细品原创)