c++ 函数指针
来源:互联网 发布:最花钱的游戏知乎 编辑:程序博客网 时间:2024/06/05 16:51
在c++中, 函数指针虽然并不常用, 但还是非常有必要了解的
1.函数指针和其他指针一样, 指向某种特定类型. 函数指针的类型由它的返回类型和形参类型共同决定, 与函数名无关, 例如:
bool lengthCompare(const string&, const string&);bool (*pf)(const string&, const string&); // 未初始化
2.把函数名作为一个值使用时, 该函数自动地转换成指针.例如
pf = lengthCompare;pf = &lengthCompare;
3.函数指针作为形参的写法
// 虽然第三个形参是函数类型, 但它会自动转换成指向函数的指针void useBigger(const string &s1, const string &s2, bool pf(const string&, const string&); void useBigger(const string &s1, const string &s2, bool (*pf)(const string&, const string&);
直接使用函数指针类型显得冗长而繁琐, 可以为它定义类型别名, 通常我们使用第三种写法
// func和Func2是函数类型 typedef bool func(const string&, const string&);typedef decltype(lengthCompare) Func2;// FuncP和FuncP2是指向函数的指针typedef bool(*FuncP)(const string&, const string&);typedef decltype(lengthCompare) *FuncP2;
此时, useBigger可以重新声明为
void useBigger(const string&, const string&, Func);void useBigger(const string&, const string&, FuncP2)
例如我们要定义一个形参为一个int, 返回一个FuncP类型的函数,代码如下
FuncP f1(int); // 正确func *f1(int); // 正确func f1(int); // 错误
6.类的成员函数指针
必须注意的是,:
在定义类的成员函数指针时, 必须加上"类名::", 而调用类的非静态函数时都有一个隐含的this指针, 如果使用this调用, 则格式为(this->*pFunc)(实参列表),
或(该类对象指针->*pFunc)(实参列表)
假如CTest类有函数func1~func3和 invoke, invoke函数内部可能需要调用func1~func3中的其中一个, 我们的代码如下
class CTest{public: CTest();private: void func1() { std::cout << __PRETTY_FUNCTION__ << std::endl; } void func2() { std::cout << __PRETTY_FUNCTION__ << std::endl; } void func3() { std::cout << __PRETTY_FUNCTION__ << std::endl; } typedef void (CTest::*FuncPointer)(); void invoke(FuncPointer func) { (this->*func)(); }};
0 0
- C指针函数 && 函数指针
- C++----函数&函数指针
- C++,C函数指针
- C/C++:函数指针
- 【c/c++】指针函数和函数指针
- 【C和指针】函数指针
- 《c和指针》函数指针
- c语言函数指针
- C/C++函数指针
- C语言函数指针
- [C]函数指针数组
- C 函数指针
- C 函数指针数组
- c 函数指针
- c/c++函数指针
- c 函数指针
- c中的函数指针
- c函数指针
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 设计模式(一) 简单工厂模式
- C# 操控滚动条
- Andorid 布局layout_margin和padding分析
- 【干货分享】流程DEMO-事务呈批表
- c++ 函数指针
- Python yield解析
- 编写更好的 Java 单元测试的 7 个技巧
- 使用 XHR、jQuery 和 Fetch 实现 AJAX
- 每天一个linux命令(28):tar命令
- 把web项目打成war
- log4j详解
- Centos7安装Docker Engine
- 调试selenium的扩展JS代码(FireFox中JavaScript调试工具)