C++基础-02

函数重载

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

- 重载函数匹配规则:

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

匹配优先级从上往下降低,即用规则1匹配到函数就调用该函数,否则用下一规则匹配

函数对象

- 具有函数行为的对象,可以实现和函数指针一样的功能

- 实质是一个重载了()运算符的类对象

 1 class Addition
 2 {
 3     int a;
 4     int b;
 5     public:
 6         Addition(int a, int b):a(a),b(b)
 7         {}
 8         int operator() ()
 9         {
10             return a+b;
11         }
12 };
13
14 void test1(Addition add)
15 {
16     cout << "函数对象:" << add() << endl;;
17 }
18
19 int addition(int a, int b)
20 {
21     return a+b;
22 }
23
24 typedef int (*pAddFunc) (int, int);
25
26 void test2(int a, int b, pAddFunc addFunc)
27 {
28     cout << "函数指针:" << addFunc(a,b) << endl;;
29 }
30
31 int main()
32 {
33     Addition add(1,2);
34     test1(add);
35
36     pAddFunc addFunc = addition;
37     test2(1, 2, addition);
38 }

函数对象和函数指针

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

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

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

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

时间: 2024-10-13 19:50:59

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

小白之Python-基础中的基础02

Python-基础中的基础02 继续整理笔记,反复练习!fighting! -----------------华丽的分界线-------------变量:第一次出现叫做定义变量,再次出现为为该变量赋值>>>money=3.5  #定义money变量>>>money=4.5 >>>money=3.5 #定义money变量 >>>money=4.5 #为money变量重新赋值 >>>print money #打印mone

Linux命令工具基础02 文件及目录管理

文件及目录管理 文件管理不外乎文件或目录的创建.删除.查询.移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询:find的参数丰富,也非常强大: 查看文件内容是个大的话题,文本的处理有太多的工具供我们使用,在本章中只是点到即止,后面会有专门的一章来介绍文本的处理工具: 有时候,需要给文件创建一个别名,我们需要用到ln,使用这个别名和使用原文件是相同的效果: 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 $rm *log 等价: $

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

面向对象基础02 实现的目标 1.String类的使用 2.掌握this关键字的使用3.掌握static关键字的使用 String类 实例化String对象一个字符串就是一个String类的匿名对象,就是已经开辟了堆内存空间的并可以直接使用的对象.1.采用直接赋值的方式进行操作. String name = "zhangsan"; 使用这种方式,如果一个字符串已经被一个名称所引用,则以后再有相同的字符串声明时,就不会再开辟内存空间.2.直接调用String类的构造方法(public S

C#语言基础02

字符串:string s="ab";string s1="a\nb";//n:newline或者next的意思. string s="a\\b"; string s="c:\\temp\\fasdf\\dd\\aaa\\1.jpg";stirng s="\\\\"; string [email protected]"\\\\"; //前边加@代表不把\当成转义字符.string [ema

【C++基础 02】深拷贝和浅拷贝

我的主题是,每天积累一点点. =========================================== 在类定义中,如果没有提供自己的拷贝构造函数,则C++提供一个默认拷贝构造函数. C++提供的默认拷贝构造函数的工作方法是:完成一个成员一个成员的拷贝.如果成员是类对象,则条用其拷贝构造函数或者默认拷贝构造函数. 简单的自定义拷贝构造函数: class Student{ public: //拷贝构造函数 Student(Student& s) { a = s.a; } protec

iOS基础 02 StoryBoard 故事板文件

iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyboard文件,它被称为“故事板”(storyboard)文件. 它可以描述应用中有哪些界面,界面有哪些控件以及它们的事件. 此外,故事板还能描述界面之间是如何导航的. 1. 故事板的导航特点 在包含多个视图控制器的情况下,采用故事板管理比较方便,而且故事板还可以描述界面之间的导航关系. 下面我们举例

Java基础02 方法与数据成员(转载)

对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class).同一类的对象属于相同的类型(type).我们可以定义类,并使用该定义来产生对象. 调用同一对象的数据成员 方法可以调用该对象的数据成员.比如下面我们给Human类增加一个getHeight()的方法.该方法返回height数据成员的值: public class Test{    public static void main(String[] args){        Human aPer

Android基础-02

Android基础-02 1.单元测试的相关概念 测试分类: 1.根据是否知道源代码分类: 黑盒测试: 白盒测试: 2.根据测试的粒度: 方法测试:写完一个能够独立运行的方法后就去测试: 单元测试:写完一个能够运行的业务逻辑单元就去测试:JUnit单元测试: 模块测试:对模块做整体测试: 集成测试:对整个软件做集成测试:与服务器端做链条测试: Debug调试:使用debug调试程序: 3.根据测试的次数分类: 压力测试:LoadRunner.Jmeter: 冒烟测试:在同一时间内高频次的访问应用

第七章、函数的基础02

目录 第七章.函数的基础02 一.函数的定义 二.为何用函数 三.如何用函数 第七章.函数的基础02 一.函数的定义 定义:在程序中,函数就好比某个功能的工具,准备工具就是定义了函数,遇到应用场景拿来用就是函数的调用 二.为何用函数 解决以下三个问题: 程序冗余 长须的拓展性差 程序的可读性差 三.如何用函数 先定义,后调用 定义函数 def 函数名(param1.param2--): """ 函数功能的描述信息 :param1:描述 :param2:描述 :return:返

Python数据分析——基础02

Python数据分析--基础02 元组(tuple) 元组是一个固定长度,不可改变的序列对象. 创建元组 用逗号分隔一列值 tup = 1,2,3 # (1, 2, 3) 用圆括号 tup = (1,2,3), (4,5,6,7) # ((1, 2, 3), (4, 5, 6, 7)) 使用tuple()可以将任意序列或迭代器转换成元组 tuple([1,2,3,4]) # (1, 2, 3, 4) tuple('string') # ('s', 't', 'r', 'i', 'n', 'g')