跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 可调用对象
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 可调用对象的类型 == === 1. 函数指针 === 函数指针是最基础的可调用对象类型,它直接指向一个函数。 <syntaxhighlight lang="cpp"> #include <iostream> // 普通函数 void greet(const std::string& name) { std::cout << "Hello, " << name << "!\n"; } int main() { // 函数指针 void (*funcPtr)(const std::string&) = &greet; // 调用函数指针 funcPtr("Alice"); // 输出: Hello, Alice! return 0; } </syntaxhighlight> '''输出:''' <pre> Hello, Alice! </pre> === 2. 函数对象(仿函数) === 函数对象是重载了函数调用运算符`operator()`的类对象。 <syntaxhighlight lang="cpp"> #include <iostream> // 函数对象类 struct Adder { int operator()(int a, int b) const { return a + b; } }; int main() { Adder add; // 创建函数对象 std::cout << add(3, 4) << "\n"; // 输出: 7 return 0; } </syntaxhighlight> '''输出:''' <pre> 7 </pre> === 3. Lambda表达式 === Lambda表达式是C++11引入的匿名函数对象,语法简洁。 <syntaxhighlight lang="cpp"> #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; // Lambda表达式作为可调用对象 auto print = [](int n) { std::cout << n << " "; }; // 使用STL算法 std::for_each(numbers.begin(), numbers.end(), print); // 输出: 1 2 3 4 5 return 0; } </syntaxhighlight> '''输出:''' <pre> 1 2 3 4 5 </pre> === 4. 类的成员函数指针 === 成员函数指针可以指向类的成员函数,需要通过对象或指针来调用。 <syntaxhighlight lang="cpp"> #include <iostream> class MyClass { public: void sayHello() { std::cout << "Hello from MyClass!\n"; } }; int main() { MyClass obj; // 成员函数指针 void (MyClass::*memFuncPtr)() = &MyClass::sayHello; // 调用成员函数指针 (obj.*memFuncPtr)(); // 输出: Hello from MyClass! return 0; } </syntaxhighlight> '''输出:''' <pre> Hello from MyClass! </pre>
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)