函数重载

- 函数重载依据参数列表,而不依据返回类型

- 重载函数匹配规则:

  1. 精确匹配,不需要类型转换,但可以数组名到指针、函数名到指针和T到const T
  2. 提升匹配,bool、short、char到int的整型提升以及无符号版本
  3. 内置标准类型转换
  4. 自定义类型转换

匹配优先级从上往下降低,即用规则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(,);
test1(add); pAddFunc addFunc = addition;
test2(, , addition);
}

函数对象和函数指针

- 函数对象和函数指针在回调方面可以实现相同的功能,上面代码分别用函数指针和函数对象实现了把两数相加的函数的回调

- 但是,函数对象是数据和方法的集合。细心观察上面的代码可以知道用函数对象实现回调时,对于用户来说使用更方便,数据

都封装在对象里,不用额外的传参(test1);用函数指针时则需要额外的参数(test2)。

- 函数指针的优势是定义方便,不用定义一整个类,而且开销小。

C++基础-02的更多相关文章

  1. javascript基础02

    javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...

  2. javaSE基础02

    javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...

  3. java基础学习05(面向对象基础02)

    面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...

  4. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  5. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  6. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  7. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  8. day32-线程基础02

    线程基础02 3.继承Thread和实现Runnable的区别 从java的设计来看,通过继承Thread或者实现Runnable接口本身来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thre ...

  9. java基础-02数据类型

    基本类型 整数 byte byte 数据类型是8位.有符号的,以二进制补码表示的整数 最小值是 -128(-2^7) 最大值是 127(2^7-1) 默认值是 0 byte 类型用在大型数组中节约空间 ...

  10. 第9天 py就业班基础02.01-02

    明天该看就业班的02    03字串符 2018-4-21 10:47:34 数据类型  py自动给数据分类型 2018-4-21 10:55:05 input使用 定义一个变量 然后input输给变 ...

随机推荐

  1. Android自动化学习笔记之Robotium:学习官网实例

    ---------------------------------------------------------------------------------------------------- ...

  2. webstrom11 和12破解码

    很多人都发现 http://idea.lanyus.com/ 不能激活了 很多帖子说的 http://15.idea.lanyus.com/ 之类都用不了了,最近封的厉害仅作测试. 红色字体的是最近大 ...

  3. php创建文件并写入信息

    $myfile = fopen("c:\\newfile.txt", "w") or die("Unable to open file!") ...

  4. Sql获取数据集中各类型中的最大值(最新值)

    select * from  (    SELECT t.*,ROW_NUMBER() over (partition by t.pid order by t.op_time desc) num    ...

  5. dedecms讲解-arc.listview.class.php分析,列表页展示

    ./plus/list.php - 动态展示栏目列表页(也可能是频道封面)arc.listview.class.php 是dedecms的列表页的相关处理类__construct()         ...

  6. Android开发--页面切换

    1.创建android项目.项目文档如下 2.activity_main布局,Androidv4包里自带的,既然是自带的那么直接拿来用就可以了,当然前提是你得工程里有v4包 <LinearLay ...

  7. promise实例小球运动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. An exception occurred while acquiring a poolable resource. Will retry.

    我的是mysql-connector-java-5.1.20.jar加到lib下面就行了.或者在pom中加入配置也行.

  9. 通过profiler对unity进行针对性优化

    转 : http://user.qzone.qq.com/289422269/blog/1453815629?ptlang=2052 通过profiler对unity进行针对性优化  1. CPU U ...

  10. scikit-learn实现ebay数据分析 的随笔

    注:只是随笔 import pandas as pd train = pd.read_csv()  读入scv格式的文件 train = train_set.drop(['EbayID','Quant ...