产生回调的原因:通过一系列约定实现 约定参数类型 约定返回值类型等
结论:回调函数的本质:提前做了一个协议的约定(把函数的参数、函数返回值提前约定)
C++编译器通过多态的机制(提前布局vptr指针和虚函数表,找虚函数入口地址来实现)
int myAdd(int a, int b){
cout << "myAdd a+b: " << a + b << endl;
return a + b;
}
int myAdd2(int a, int b){
cout << "myAdd2 a+b+b: " << a + b + b << endl;
return a + b + b;
}
int myAdd3(int a, int b){
cout << "myAdd3 a+a+b: " << a + a + b << endl;
return a + a + b;
}
//定义一个类型
typedef int(*MytypeAdd)(int a, int b);
//函数指针 做参数
int mainOp(MytypeAdd myfun){
return myfun(3, 4);
}
int mainOp2(int(*MytypeAdd)(int a, int b)){
return MytypeAdd(5, 6);
}
Main:
MytypeAdd add = NULL;
add = myAdd;
add(4, 5);
mainOp(myAdd);
mainOp2(myAdd);
//主框架不发生变化 类似多态
MytypeAdd add2 = NULL;
add2 = myAdd2;
mainOp(myAdd2);
mainOp2(myAdd2);