typedef、函数指针、成员函数指针
typedef
#define 宏为文本串替换 typedef为将已有标识定义为一个新标识 typedef为逻辑语句 后方要加分号;
函数指针
函数指针定义方式
函数指针只考究函数签名(函数隶属,返回值,函数参数必须完全相同)
void (*pFun)(int);//即定义了一个变量 叫做pFun 可以指向返回值为void 参数int的函数
void (A::*pFun)(int);//此指针指向A类中的同上类型函数
typedef与函数指针
typedef void(A::*pFun)()//此时是产生了一个叫做pFun的新标识,作为A内这一类函数的指针
在不知道另一类具体函数名称时,提前写出操作,让另一个类进行函数回调,如下
B根据A绑定的函数,来进行操作。
#include<iostream>
using namespace std;
class A {
public:
void print()
{
cout << "A_called" << endl;
}
};
typedef void(A::* aFun)();
class B {
public:
A* a;
aFun pf;//这里可以看出typedef的简洁性,否则要写 void(A::*pf)();
void bind(A* a, aFun pf)
{
this->a = a;
this->pf = pf;
}
void call()
{
(a->*pf)();//此处便为对成员函数指针的调用;
}
};
int main()
{
A* a;
B* b;
a = new A;
b = new B;
b->bind(a, &A::print);
b->call();
}
还有另一个简单示例,可以看出函数指针的作用,就是为了把函数当作参数使用。
#include<iostream>
using namespace std;
typedef void(*pfun)();
void fun1(){cout << "fun1" << endl;}
void fun2() { cout << "fun2" << endl; }
void fun3() { cout << "fun3" << endl; }
void print(pfun pf) {
(*pf)();
}
int main()
{
pfun myfun = &fun1;
//pfun myfun = &fun2;
//pfun myfun = &fun3;
//根据赋值不同 调用函数就不一样
print(myfun);
}
成员函数指针
上方已经有过使用经历,这里注意
.* ->* 均不可以重载
使用方式形如 (a.*pfun)() (a->*pfun)()
还有成员变量指针,了解即可