C++基础-02
2016-09-26 11:59
169 查看
函数重载
- 函数重载依据参数列表,而不依据返回类型
- 重载函数匹配规则:
精确匹配,不需要类型转换,但可以数组名到指针、函数名到指针和T到const T
提升匹配,bool、short、char到int的整型提升以及无符号版本
内置标准类型转换
自定义类型转换
匹配优先级从上往下降低,即用规则1匹配到函数就调用该函数,否则用下一规则匹配
函数对象
- 具有函数行为的对象,可以实现和函数指针一样的功能
- 实质是一个重载了()运算符的类对象
函数对象和函数指针
- 函数对象和函数指针在回调方面可以实现相同的功能,上面代码分别用函数指针和函数对象实现了把两数相加的函数的回调
- 但是,函数对象是数据和方法的集合。细心观察上面的代码可以知道用函数对象实现回调时,对于用户来说使用更方便,数据
都封装在对象里,不用额外的传参(test1);用函数指针时则需要额外的参数(test2)。
- 函数指针的优势是定义方便,不用定义一整个类,而且开销小。
- 函数重载依据参数列表,而不依据返回类型
- 重载函数匹配规则:
精确匹配,不需要类型转换,但可以数组名到指针、函数名到指针和T到const T
提升匹配,bool、short、char到int的整型提升以及无符号版本
内置标准类型转换
自定义类型转换
匹配优先级从上往下降低,即用规则1匹配到函数就调用该函数,否则用下一规则匹配
函数对象
- 具有函数行为的对象,可以实现和函数指针一样的功能
- 实质是一个重载了()运算符的类对象
class Addition { int a; int b; public: Addition(int a, int b):a(a),b(b) {} int operator() () { return a+b; } }; void test1(Addition add) { cout << "函数对象:" << add() << endl;; } int addition(int a, int b) { return a+b; } typedef int (*pAddFunc) (int, int); void test2(int a, int b, pAddFunc addFunc) { cout << "函数指针:" << addFunc(a,b) << endl;; } int main() { Addition add(1,2); test1(add); pAddFunc addFunc = addition; test2(1, 2, addition); }
函数对象和函数指针
- 函数对象和函数指针在回调方面可以实现相同的功能,上面代码分别用函数指针和函数对象实现了把两数相加的函数的回调
- 但是,函数对象是数据和方法的集合。细心观察上面的代码可以知道用函数对象实现回调时,对于用户来说使用更方便,数据
都封装在对象里,不用额外的传参(test1);用函数指针时则需要额外的参数(test2)。
- 函数指针的优势是定义方便,不用定义一整个类,而且开销小。
相关文章推荐
- C02-程序设计基础提高班(C++)第6周上机任务-数组
- C02-程序设计基础提高班(C++)第8周上机任务-结构体
- C++基础_02
- C++基础02
- 【C++基础复习02】双向链表实现动态分区分配算法
- 【每天学一点】C++基础02
- C02-程序设计基础提高班(C++)第8周上机任务-结构体
- 【C++基础 02】深拷贝和浅拷贝
- c++复习基础要点02 虚函数与模板 与static inline是否共存
- 【C++基础 02】深拷贝和浅拷贝
- 【C++基础02】类中不写成员函数易犯错误模型
- C02-程序设计基础提高班(C++)第6周上机任务-数组
- c++复习基础要点02 虚函数与模板 与static inline是否共存
- 【C++基础】----运算符重载 (02)
- 图像处理C++基础 02 ——使用读写文件的矩阵乘法
- C++基础<02>—变量和基本类型
- c++复习基础要点02 虚函数与模板 与static inline是否共存
- c++基础学习(02PM)
- C02-程序设计基础提高班(C++)第6周上机任务-数组
- C02-程序设计基础提高班(C++)第8周上机任务-结构体