C++回调函数例子,供初学者使用

  • t7_793938
    了解作者
  • 4.2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-21 06:43
    上传日期
通过Qt控制台工程写了几个回调函数的例子,希望对初学者有帮助
callback.zip
  • test_Callback
  • test_Callback.pro.user
    18.8KB
  • main.cpp
    4.2KB
  • test_Callback.pro
    94B
内容介绍
#include <iostream> #include <algorithm rel='nofollow' onclick='return false;'> using namespace std; typedef void (*Fun)(char*, int);//定义一个函数指针类型 Fun p = NULL;//用Fun定义一个变量p,它指向一个返回值为空参数为int的函数 void caller(Fun pCallback) { p = pCallback; //达成某一条件后,通过名片(函数指针p),传回结果 char* c = "回调函数 a="; int result = 1; (*p)(c, result); } void callback(char* c, int a)//回调函数 { std::cout<<c<<a<<std::endl; } //回调函数 int ADD(int (*callbac)(int, int), int a, int b){ return (*callbac)(a,b); } //返回值(*指针名)(参数列表) typedef int (*Fun1)(int, int); int ADD1(Fun1 p, int a, int b){ return (*p)(a,b); } //函数 int add(int a, int b){ return a+b; } bool cmp(int a, int b){ return a rel='nofollow' onclick='return false;'>b; } typedef void (*FUNP)(char*); class Test1 { public: void fun1(FUNP p){ char* c = "回调函数 Test1's fun1"; (*p)(c); } }; class Test2 { public: Test2(){ test1.fun1(fun2); } static void fun2(char* c){ std::cout<<c<<std::endl; } private: Test1 test1; }; struct Student{ int id; int age; }; //类型重定义:函数指针类型 typedef bool (*pFun)(Student, Student); typedef bool (*pFun2)(int, int); //冒泡排序法:能够按AGE或ID排序,用同一个函数实现 void sort(Student stu[], const int num, pFun fun) { Student temp; for(int i=0; i<num; ++i) { for(int j=0; j<num; ++j) { if((*fun)(stu[j], stu[j+1])) { temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } } void sort(Student stu[], const int num, pFun2 fun, const int type=1) { Student temp; for(int i=0; i<num; ++i) { for(int j=0; j<num; ++j) { if(type == 1){ if((*fun)(stu[j].age, stu[j+1].age)) { temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } //2 compare id else{ if((*fun)(stu[j].id, stu[j+1].id)) { temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } } } //回调函数:比较年龄 bool CompareAge(Student stu1, Student stu2){ return stu1.age < stu2.age; } //回调函数:比较id bool CompareId(Student stu1, Student stu2){ return stu1.id < stu2.id; } bool CompareAgeOrId(int a, int b){ return a<b; } int main() { cout << "学习回调函数!" << endl; callback("调用函数 a=", 2); caller(callback); std::cout<<"函数 add="<<add(1,2)<<std::endl; std::cout<<"回调函数 ADD="<<ADD(add,3,2)<<std::endl; int a[8] = {1,21,3,41,5,61,7,81}; std::sort(a, a+8, cmp); std::cout<<"冒泡排序1: "; for(int i=0; i<8; ++i) std::cout<<a[i]<<"\t"; std::cout<<std::endl; Test2 test2; test2.fun2("调用函数 Test2's fun2"); Student stu1[]={{1103, 24}, {1102, 45}, {1104, 1}}; Student stu2[]={{1103, 24}, {1102, 45}, {1104, 1}}; Student stu3[]={{1103, 24}, {1102, 45}, {1104, 1}}; Student stu4[]={{1103, 24}, {1102, 45}, {1104, 1}}; pFun fun1 = CompareAge; pFun fun2 = CompareId; pFun2 fun3 = CompareAgeOrId; int size = sizeof(stu1)/sizeof(Student); sort(stu1, size-1, fun1); sort(stu2, size-1, fun2); sort(stu3, size-1, fun3, 1); sort(stu4, size-1, fun3, 2); std::cout<<"冒泡排序2 CompareAge: "; for(int i=0; i<size; ++i) std::cout<<stu1[i].age<<","<<stu1[i].id<<"\t"; std::cout<<std::endl; std::cout<<"冒泡排序2 CompareId: "; for(int i=0; i<size; ++i) std::cout<<stu2[i].age<<","<<stu2[i].id<<"\t"; std::cout<<std::endl; std::cout<<"冒泡排序2 CompareAgeOrId'Age: "; for(int i=0; i<size; ++i) std::cout<<stu3[i].age<<","<<stu3[i].id<<"\t"; std::cout<<std::endl; std::cout<<"冒泡排序2 CompareAgeOrId'Id: "; for(int i=0; i<size; ++i) std::cout<<stu4[i].age<<","<<stu4[i].id<<"\t"; std::cout<<std::endl; return 0; }
评论
    相关推荐
    • C++ Primer
      C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。 对C++基本概念和技术全面而且权威的阐述,对...
    • c++课件
      c++课件c++课件c++课件c++课件c++课件c++课件c++课件c++课件c++课件c++课件c++课件c++课件c++课件
    • C++ PRrimer
      本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的...
    • C++
      C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
    • C++ primer
      本文档具有C++ primer 以及 C++ primer 标准答案各一份,内容清晰充实!希望与热爱C++的学友们一起同舟共济,努力学习!
    • C++ primer
      本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的...
    • c++yuyanbiancheng
      这是C和C++集成的编程环境!这是C和C++集成的编程环境!这是C和C++集成的编程环境!这是C和C++集成的编程环境!这是C和C++集成的编程环境!
    • effective C++
      有关C++编程方面的检验性介绍,对由C转向C++,和有C++编程基础的程序员有帮助,不过是英文版
    • C++ Primer
      这本处适合各个阶段的C++程序员,这本书可以帮助初学者快速入门,里面有最实用,最容易理解的代码;同时这也是有经验的C++程序员最好的一本参考手册
    • C++ Primer
      本书是久负盛名的C++经典教程引,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++