运算符重载
运算符重载使得用户自定义的数据以一种更简洁的方式工作
运算符重载时,运算符函数只能定义为两种方式:
类的成员函数
友员函数
这两种方式非常相似,关键区别在于
成员函数具有 this 指针
友员函数没有 this 指针
用成员函数重载运算符
运算符通过运算符函数重载。
运算符函数是一种特殊的成员函数,语法形式为:
type operator @ ( 参数表 )
{
// 相对于该类定义的操作
}
不能重载的运算符:. , * , :: , ? , sizeof
重载应注意的问题:
1、优先级和结合顺序不变
2、不能改变目数
3、类外定义至少有一个相应类的参数
运算符成员函数——调用成员函数的对象隐式成为表达式的第一个运算数
外部运算符函数——其第一个参数直接对应表达式的第一个运算数;
重载运算符的注意事项
运算符重载后,可以按它的表达方式使用
不能改变它们的优先级,不能改变算符要求的操作数数目
一个运算符被重载后,原有意义没有失去,只是定义了相对一特定类的一个新运算符
函数重载
两个以上的函数,取同一名字,只要使用不同类型的参数或参数个数不同,编译器便知道
在什么情况下该调用哪个函数,这就叫函数重载
寻找一个严格的匹配
通过内部转换寻找一个匹配
通过用户定义的转换寻找一个匹配
重载使用说明
重载函数仅仅返回类型不同是不行的
重载函数至少在参数个数,参数类型或顺序上有所不同
不能用typedef定义的类型来区分重载函数声明中的参数
typedef INT int;
void func(int x); void func(INT x);
让重载函数执行不同的功能,是不好的编程风格
- [wukong] 这是钱林松老师的课件摘录的,讲的比这还详细 03/07 19:40
- [wukong] 只是方便用户,对象可以向基本类型那样,进行+-等运算。 03/07 19:38
- [chinatree] 不懂,什么书讲这么详细? 03/07 11:20
- [chinatree] 重载不是相同函数只是参数不同吗?运算符怎么重载?作用是什么? 03/07 11:13
- [tomato] c++的基本思想和java基本差不多,只是有一些细节的差别。 03/05 20:33
- [tomato] 我不是什么老师,只是一个搞技术的程序员。 03/05 20:32
- [tomato] 支持你! 03/04 23:07
- [wukong] 是的,一定努力,多动手,谢谢!!! 03/04 22:52
- [tomato] 明白了C++中的构造函数和析构函数,谢谢博主的这篇博文。嘿嘿。 03/04 22:30
- [tomato] 开始学习C++了?不仅要学习知识还要实验才行。 03/04 22:26