首页 > 编程语言 >C++ 成员函数指针简单测试

C++ 成员函数指针简单测试

时间:2024-09-16 10:36:05浏览次数:12  
标签:short pfunc Dog C++ goodAfternoon 测试 函数指针 id goodMorning

class Dog
{
public:
    void Update_Func(short i);
    short (Dog::*pfunc)(short);
    std::function<short(short)> ffunc;
public:
    short goodMorning(short id);
    short goodAfternoon(short id);
};

void Dog::Update_Func(short i)
{
    switch (i)
    {
    case 1:
        pfunc = &Dog::goodMorning;
        ffunc = std::bind(&Dog::goodMorning, this, std::placeholders::_1);
        break;
    case 2:
        pfunc = &Dog::goodAfternoon;
        ffunc = std::bind(&Dog::goodAfternoon, this, std::placeholders::_1);
        break;
    }
}

short Dog::goodMorning(short id)
{
    return id + 1;
}

short Dog::goodAfternoon(short id)
{
    return id + 10;
}


int main()
{
    Dog dog;
    dog.Update_Func(1);
    auto res = (dog.*(dog.pfunc))(10);
    //auto res = (dog.*pfunc)(1);  // 这样是不行的,如果放在类外是可以的。
    cout << res << endl;

    short (Dog::*p)(short);
    p = &Dog::goodAfternoon;
    res = (dog.*p)(10);  // 放在类外,这样调用是可以的。
    cout << res << endl;

    /*用 function 应该是直接可以的*/

    res = dog.ffunc(10);
    cout << res << endl;
    dog.Update_Func(2);
    res = dog.ffunc(10);
    cout << res << endl;

    system("pause");
    return EXIT_SUCCESS;
}

输出:

11
20
11
20

如果成员函数指针放在类外,或用 function 绑定,goodMorninggoodAfternoon 两个函数必须是 public 外部可访问的。 如果是类内部成员函数指针,goodMorninggoodAfternoon 这两个函数可以是私有的。

标签:short,pfunc,Dog,C++,goodAfternoon,测试,函数指针,id,goodMorning
From: https://www.cnblogs.com/huvjie/p/18416056

相关文章

  • 【GESP】C++一级练习BCQM3005,基本输出语句printf
    一道基础练习题,练习基本输出语句printf。BCQM3005题目要求描述输出表达式1234∗5678的结果。输入无输出1234∗5678=7006652输入样例无输出样例1234*5678=7006652全文详见个人独立博客:https://www.coderli.com/gesp-1-bcqm3005/【GESP】C++一级练习B......
  • 软件测试面试题(4)——二面
    是二轮,线上笔试后的约的线下面试,这里我记录一下面试过程中大概遇到的问题。        1、设计测试用例的主要方法:流程图法,等价类划分,边界值分析法,因果图法等等这里他问我熟悉哪种方法,给他讲一下:(我说的流程图,问我用什么画图,我回答是亿图图示)(1)流程图法定义:根据软件的......
  • 阅读周·深入浅出的Node.js | 代码测试,开发者掌握代码的行为和性能的极佳思路
    背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效。已读完书籍:《架构简洁之道》。当前阅读......
  • C++数据结构-二叉树的三种遍历方法(进阶篇)
    1.遍历简介:树作为非线性数据结构,在我们取出数据时就需要设计遍历,所谓遍历,就是按照一定的规则性,将数据结构中的所有数据全部依次访问,而二叉树本身并不具有天然的全局次序,故为实现遍历,需通过在各节点与其孩子之间约定某种局部次序,间接地定义某种全局次序,这便是我们常规定的先序......
  • C++数据结构-二叉树的存储方法(基础篇)
    1.简介根据前文的介绍,我们知道了二叉树的性值,其就是一种每一个结点中只允许拥有左右孩子(或为空)的树,这种数据结构在我们的实际设计中非常常用,如前文提到的STL中的set集合,其底层就是一颗标准的红黑树(二叉树的一种),我们这里以创建一颗二叉树并实现通过特定的插入顺序和读取顺序达......
  • C++ 左值和右值
    一般而言,一个左值表达式表示的是一个对象的身份,而一个右值表达式表示的是对象的值。我们不能将其绑定到要求转换的表达式、字面常量或是返回右值的表达式(参见2.3.1节,第46页)。右值引用有着完全相反的绑定特性:我们可以将一个右值引用绑定到这类表达式上,但不能将一个右值引用......
  • C++-练习-40
    题目:编写一个程序,她每次读取一个单词,知道用户只输入q。然后,该程序指出有多少个单词以元音大头,而多少个单词以辅音大头,还有多少个单词不属于着两类。源代码:#include<iostream>#include<cctype>//元音:A、E、I、O、Uintmain(){ usingnamespacestd; charword[20];......
  • 南沙C++信奥老师解一本通题:2110:【例5.1】素数环
    ​【题目描述】输入正整数n,把整数1,2,…,n 组成一个环,使得相邻两个整数之和均为素数。【输入】输入正整数n。【输出】输出任意一个满足条件的环。【输入样例】6【输出样例】432561【提示】数据满足:4≤n≤30#include<bits/stdc++.h>usingnamespace......
  • Kali Linux 2024.3 发布下载 - 领先的渗透测试发行版
    KaliLinux2024.3发布(Multipletransitions)-领先的渗透测试发行版ThemostadvancedPenetrationTestingDistribution请访问原文链接:https://sysin.org/blog/kali-linux/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgKaliLinux2024.3已经可以下载,发行......
  • 南沙C++信奥老师解一本通题 1228:书架
    ​ 【题目描述】John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。John共有NN头奶牛(1≤N≤20,000),每头奶牛有自己的高度Hi(1≤Hi≤10,000),N头奶牛的总高度为S。书架高度为B(1≤B≤S<2,000,000,007)。为了到达书架顶层,奶牛可以踩着其他奶牛的......