C++成员函数指针实战指南(从入门到精通的稀缺教程)

第一章:C++成员函数指针的核心概念解析

在C++中,成员函数指针是一种特殊的指针类型,用于指向类的成员函数。与普通函数指针不同,成员函数指针必须结合具体对象才能调用,因为它不包含隐式的this指针信息。

成员函数指针的基本语法

定义成员函数指针需要指定所属类、返回类型和参数列表。其通用形式如下:
// 定义一个指向类A的成员函数的指针
class A {
public:
    int func(int x) { return x * 2; }
};

int (A::*ptr)(int) = &A::func;  // 指向成员函数func
A obj;
int result = (obj.*ptr)(5);       // 通过对象调用
上述代码中,A::*ptr声明了一个指向类A中接受int并返回int的成员函数的指针。使用obj.*ptr通过对象调用,或使用ptr与指针对象配合->*操作符。

成员函数指针的关键特性

  • 必须绑定到类的具体实例才能调用
  • 不能指向静态成员函数(静态成员函数可用普通函数指针)
  • 支持多态调用,若指向虚函数则会动态绑定

常见应用场景对比

场景是否适用成员函数指针说明
回调机制是常用于事件处理系统中绑定对象方法
泛型编程有限支持需配合模板或std::function提升灵活性
跨模块通信否因类型强绑定,难以通用传递
成员函数指针在底层机制上可能包含多个地址字段,尤其在涉及多重继承或虚函数时,编译器会生成复杂结构以支持正确调用。因此,其大小通常大于普通函数指针。

第二章:成员函数指针的基础语法与调用机制

2.1 成员函数指针的声明与定义:理解语法结构

成员函数指针不同于普通函数指针,因其必须绑定到特定类的实例。其声明语法较为复杂,需标明所属类及函数签名。
基本语法格式
返回类型 (类名::*指针名)(参数列表);
例如,对于类 MyClass 中的成员函数 void func(int),其指针声明如下:
class MyClass {
public:
    void func(int x) { /* ... */ }
};

void (MyClass::*ptr)(int) = &MyClass::func;
此处 ptr 是指向 MyClass 类中 func 成员函数的指针。
调用方式
通过对象实例或指针调用成员函数指针:
  • 使用对象:(obj.*ptr)(10)
  • 使用对象指针:(ptr_obj->*ptr)(10)
该机制支持运行时动态绑定成员函数,为回调和策略模式提供底层支持。

2.2 普通成员函数的指针绑定与调用实践

在C++中,普通成员函数的指针需通过类作用域进行绑定。与普通函数指针不同,成员函数指针必须关联具体对象实例才能调用。
成员函数指针的声明与绑定
class Calculator {
public:
    int add(int a, int b) { return a + b; }
};

// 声明成员函数指针
int (Calculator::*funcPtr)(int, int) = &Calculator::add;
Calculator calc;
int result = (calc.*funcPtr)(3, 5); // 调用结果为8
上述代码中,funcPtr指向add函数,通过对象calc和操作符.*完成调用。
调用方式对比
  • .*:用于对象实例直接调用成员函数指针
  • ->*:用于对象指针调用成员函数指针

2.3 静态成员函数与普通函数指针的异同分析

基本概念对比
静态成员函数属于类,但不依赖于任何对象实例,调用时无需 this 指针。普通函数指针则指向全局或静态函数,无法直接绑定非静态成员函数。
调用机制差异

class Math {
public:
    static int add(int a, int b) { return a + b; }
};
int (*funcPtr)(int, int) = &Math::add; // 合法:静态成员函数可被函数指针指向
上述代码中,Math::add 被成功赋值给函数指针,因其调用约定与普通函数一致,无隐含 this 参数。
核心区别总结
特性静态成员函数普通函数指针
所属作用域类内部全局/命名空间
访问非静态成员不可访问N/A
能否被函数指针指向可以(若签名匹配)自身即为指针类型

2.4 通过对象和指针调用成员函数指针的两种方式

在C++中,成员函数指针的调用可通过对象或对象指针实现,两者语法略有差异但本质一致。
通过对象调用
使用对象调用时,需通过“.*”操作符绑定对象与成员函数指针:

class Calculator {
public:
    int add(int a, int b) { return a + b; }
};
int (Calculator::*funcPtr)(int, int) = &Calculator::add;
Calculator calc;
int result = (calc.*funcPtr)(2, 3); // 调用 add
此处 funcPtr 指向 add 函数,calc.*funcPtr 表示通过对象 calc 解引用来调用。
通过指针调用
当使用对象指针时,应采用“->*”操作符:

Calculator* pCalc = &calc;
int result2 = (pCalc->*funcPtr)(4, 5);
pCalc->*funcPtr 实现了通过指针间接调用成员函数,适用于动态分配对象场景。

2.5 成员函数指针的类型匹配与编译错误规避

成员函数指针的类型必须严格匹配其指向的函数签名,包括返回类型、参数列表和所属类。不匹配将导致编译失败。
类型匹配规则
成员函数指针需包含类名、返回类型和参数类型。例如:
class Calculator {
public:
    int add(int a, int b) { return a + b; }
};
int (Calculator::*funcPtr)(int, int) = &Calculator::add;
上述代码中,int (Calculator::*)(int, int) 是 funcPtr 的完整类型,必须与 add 的签名一致。
常见错误与规避
  • 遗漏类作用域:未使用 ClassName::* 声明指针类型
  • 调用约定不匹配:如虚函数或多重继承中的调整问题
  • 误用普通函数指针语法:成员函数隐含 this 指针
正确声明可避免链接或运行时异常,提升代码健壮性。

第三章:深入多态与继承场景下的调用行为

3.1 虚函数与成员函数指针的交互机制

在C++中,虚函数通过虚函数表(vtable)实现动态绑定,而成员函数指针则封装了调用特定函数的地址信息。当两者结合时,其交互机制变得复杂但高效。
虚函数调用的底层结构
每个含有虚函数的类都有一个隐式vtable,对象指针通过偏移访问该表,进而调用实际函数:
class Base {
public:
    virtual void func() { cout << "Base::func" << endl; }
};
class Derived : public Base {
public:
    void func() override { cout << "Derived::func" << endl; }
};
上述代码中,Base::func 为虚函数,Derived 覆盖其实现。通过基类指针调用 func() 将触发动态分发。
成员函数指针的绑定方式
成员函数指针可指向虚函数,并保持多态性:
void (Base::*ptr)() = &Base::func;
Derived d;
Base* b = &d;
(b->*ptr)(); // 输出 "Derived::func"
此处,ptr 指向虚函数,调用时仍遵循vtable机制,确保运行时正确解析目标函数。

3.2 在继承体系中调用基类与派生类成员函数指针

在C++继承体系中,成员函数指针的调用需明确绑定到具体类的作用域。当基类与派生类存在同名函数时,函数指针的类型决定了调用的解析路径。
函数指针的类型匹配
成员函数指针必须与目标函数所属类精确匹配。例如:
class Base {
public:
    virtual void func() { cout << "Base::func" << endl; }
};
class Derived : public Base {
public:
    void func() override { cout << "Derived::func" << endl; }
};

void (Base::*ptr)() = &Base::func;
Derived d;
(d.*ptr)(); // 输出: Derived::func(多态生效)
上述代码中,尽管函数指针定义在Base类,但指向Derived实例时,由于虚函数机制,实际调用的是派生类重写版本。
调用行为分析
  • 非虚函数:调用由指针声明类型决定,静态绑定;
  • 虚函数:通过对象动态类型调用,实现运行时多态;
  • 函数指针赋值:派生类可隐式转换为基类函数指针。

3.3 多重继承下成员函数指针的地址调整与调用陷阱

在多重继承结构中,成员函数指针的调用涉及复杂的地址调整机制。当派生类继承多个基类时,成员函数指针可能指向不同基类子对象,编译器需进行隐式偏移修正。
虚继承布局带来的挑战
多重继承下,若存在虚继承或虚函数,对象布局包含多个vptr(虚函数表指针),导致成员函数指针的二进制表示不再仅为简单地址,而是包含this指针偏移信息。

struct A { virtual void foo() {} };
struct B { virtual void bar() {} };
struct C : A, B { void foo() override; void bar() override; };

void (C::*pfn)() = &C::foo;
C c;
(c.*pfn)(); // 正确调用
上述代码中,pfn实际存储了C到A的this指针调整偏移。若直接将&C::bar赋值给B*类型的指针并调用,可能因未正确调整this而导致未定义行为。
调用陷阱与解决方案
  • 跨基类调用时,编译器插入this调整代码
  • 函数指针转换需确保类型兼容性
  • 避免将派生类函数指针强制转为非最左基类指针直接调用

第四章:高性能与泛型编程中的实战应用

4.1 结合模板实现通用成员函数指针调用器

在C++中,成员函数指针的调用受限于具体类类型,难以泛化。通过函数模板与模板参数推导,可构建通用调用器,屏蔽类型差异。
模板封装调用逻辑
使用类模板绑定对象与成员函数指针,实现统一调用接口:
template <typename T, typename Ret, typename... Args>
class MemberFunctionCaller {
    Ret (T::*func)(Args...);
public:
    explicit MemberFunctionCaller(Ret (T::*f)(Args...)) : func(f) {}
    Ret operator()(T* obj, Args... args) {
        return (obj->*func)(args...);
    }
};
上述代码中,func 存储成员函数指针,operator() 实现调用转发。模板参数 T 为类类型,Ret 和 Args... 分别表示返回值与参数包,支持变参调用。
使用示例
  • 实例化时自动推导函数签名;
  • 通过对象指针和参数列表触发调用;
  • 适用于不同类但相同调用约定的成员函数。

4.2 使用成员函数指针构建事件回调系统

在C++中,普通函数指针无法直接指向类的成员函数,因其调用需绑定特定对象实例。为实现对象级别的事件回调,成员函数指针成为关键工具。
成员函数指针语法基础
成员函数指针需明确类名和参数类型:
class EventHandler {
public:
    void onEvent(int data) { /* 处理逻辑 */ }
};

void (EventHandler::*ptr)(int) = &EventHandler::onEvent;
EventHandler handler;
(handler.*ptr)(42); // 调用实例方法
上述代码定义了一个指向 EventHandler::onEvent 的指针,并通过实例调用。
封装回调注册机制
使用函数对象和模板可统一接口:
  • 将对象与成员函数指针组合为可调用对象
  • 通过 std::function 和 std::bind 实现类型擦除
  • 支持动态注册与触发多播事件
该机制广泛应用于GUI框架与异步通信模型中,提升模块解耦程度。

4.3 在STL容器中存储和调度成员函数指针

在C++中,将成员函数指针存入STL容器可实现灵活的回调机制。由于普通函数指针与成员函数指针类型不兼容,需使用特定语法定义。
成员函数指针的声明与存储
使用std::vector存储类成员函数指针时,需指定完整类型:
class Task {
public:
    void runA() { /* ... */ }
    void runB() { /* ... */ }
};
using MemberFunc = void (Task::*)();
std::vector<MemberFunc> funcs = {&Task::runA, &Task::runB};
该代码定义了指向Task类成员函数的指针类型,并将其存入vector。
动态调度执行
通过对象实例调用存储的成员函数:
Task t;
for (auto func : funcs) {
    (t.*func)(); // 正确调用语法
}
注意必须使用.*或->*操作符解引用,括号不可省略,以保证运算优先级正确。

4.4 成员函数指针在状态机与命令模式中的工程实践

在嵌入式系统与游戏开发中,成员函数指针为实现灵活的状态切换与命令封装提供了底层支持。
状态机中的动态行为绑定
通过成员函数指针数组,可将不同状态映射到对应处理函数:
class StateMachine {
public:
    void idle() { /* 空闲逻辑 */ }
    void running() { /* 运行逻辑 */ }
    using StateFunc = void (StateMachine::*)();
    StateFunc currentState = &StateMachine::idle;

    void update() { (this->*currentState)(); }
};
上述代码中,currentState 指向当前状态函数,update() 通过解引用调用实际逻辑,实现运行时状态迁移。
命令模式的解耦设计
成员函数指针可用于封装对象与行为,构建通用命令接口:
  • 避免虚函数开销,提升性能
  • 支持动态绑定任意类成员方法
  • 适用于事件回调、任务队列等场景

第五章:总结与进阶学习路径建议

构建持续学习的技术栈体系
现代后端开发要求开发者不仅掌握语言本身,还需深入理解系统架构、性能调优与云原生生态。以 Go 语言为例,掌握 context、sync 包和并发模型是基础,但生产环境中的真实挑战往往涉及分布式锁、限流熔断机制。
  • 深入阅读 etcd 源码,学习其基于 Raft 的一致性实现
  • 实践 Gin 或 Echo 框架中间件设计,理解责任链模式的应用
  • 使用 Prometheus + Grafana 构建服务监控体系
实战驱动的进阶路线
建议通过重构小型项目逐步引入复杂性。例如,从单体 API 服务演进为基于 gRPC 的微服务架构,并集成 OpenTelemetry 实现链路追踪。

// 示例:使用 context 控制请求超时
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
defer cancel()

result, err := db.QueryContext(ctx, "SELECT * FROM users")
if err != nil {
    if ctx.Err() == context.DeadlineExceeded {
        log.Println("query timed out")
    }
}
技术成长路径推荐
阶段目标推荐项目
初级掌握 HTTP 路由与数据库操作博客系统 + JWT 认证
中级实现服务解耦与异步处理订单系统 + RabbitMQ
高级构建高可用分布式系统短链服务 + Redis 集群 + 一致性哈希
C++成员函数指针揭秘 前言 语法 与其它语言机制的混合使用 继承 虚函数 多继承 实现 Microsoft的实现 内部表示 Vcall_addr实现 This指针调整 结论 GCC的实现 内部表示 实现机制 语言限制与陷阱 例子 static_cast干了些什么 默认的转换 教训 如何避开陷阱 参考书目 前言 C++语言支持指向成员函数的指针这一语言机制。就像许多其它C++语言机... 阅读详情

相关推荐

C++空指针访问成员函数

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码的健壮性 示例: //空指针访问成员函数 class Person { public: void ShowClassName() { cout << "我是Person类!" << endl; } void ShowPerson() { if (this == NULL) { return; } cout << mAge &l

希望我的博客,能帮上你解决学习中工作中所遇到的问题 561

C++: 实现相同原型的函数指针放入数组

✅结论+ lambda 捕获this是最安全、最通用、最现代的方案。

weixin_42849849的博客 894

软件工程:数据字典

数据字典

永远怀着至诚之心拥抱世界 4275

C++ 指针从入门到精通实战:全面掌握指针的概念与应用

在C++中,指针是一种变量,用于存储另一个变量的内存地址。指针提供了一种间接访问和操作内存的方式,使得程序员能够高效地管理内存和数据结构。// 普通变量// 指针变量,存储var的地址cout << "var的值: " << var << endl;// 输出:10cout << "ptr存储的地址: " << ptr << endl;// 输出var的地址cout << "*ptr的值: " << *ptr << endl;// 输出:10return 0;var的值: 10。

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1315

GD32F4系列定时器正交译码器实战:用TIMER1读取旋转编码器信号(附完整代码)

本文详细介绍了GD32F4系列定时器正交译码器的实战应用,重点讲解如何使用TIMER1模块高效读取旋转编码器信号。内容涵盖硬件连接、定时器配置、方向判断与速度计算等关键环节,并提供了完整的代码实现和优化建议,帮助开发者快速掌握GD32微控制器在工业控制和消费电子领域的编码器接口设计。

weixin_29169505的博客 201

hcaptcha-challenger:基于本地AI模型自动破解验证码的工程实践

验证码作为区分人类与机器的经典安全机制,其核心原理是通过图像识别、行为分析等交互式挑战来阻挡自动化程序。传统绕过方法依赖第三方打码平台或脚本,存在成本高、稳定性差的问题。随着多模态大语言模型和计算机视觉技术的发展,本地化AI求解成为新的技术方向,它通过集成YOLO、ResNet等模型,在本地完成图像语义理解,实现了高隐私、低成本、可进化的验证码自动化解决方案。这种范式尤其适用于需要大规模稳定处理网页交互的场景,如电商数据采集和社交媒体管理。hcaptcha-challenger项目正是这一理念的工程实践,它

weixin_42587866的博客 1026

C++指向对象成员函数的指针

指向对象成员函数的指针 对象的成员函数是一个函数,那么,我们可以定义一个函数指针,指向对象的成员函数。但是,该函数指针变量的定义,与普通的函数指针变量定义不同。 首先,我们先看看指向“普通函数”的指针变量的定义方法: 数据类型名 (* 指针变量名)(参数列表); 例如: void (*pf)(int); //定义函数指针pf,指向的函数是带有1个int类型的参数,并且,返回类型是void 所以,它可以指向一个函数,并通过函数指针调用该函数,如下: pf = func;...

LC的专栏 3507

FLUKA软件在Ubuntu的安装指南(亲测有效)

FLUKA其强大的蒙特卡洛模拟能力使得用户能够模拟复杂的辐射相互作用过程

chencheng1127的博客 2886

C++入门到精通指南

C++入门到精通指南C++是一门功能强大的编程语言,广泛应用于系统开发、游戏开发、高性能计算等领域。本指南将带你从C++基础知识入门,逐步深入到高级特性,最终达到精通水平。第一部分:C++基础编译器:GCC(MinGW)、MSVC、Clang集成开发环境(IDE):推荐使用 VS Code + MinGW 或 Visual Studio 作为初学者的开发环境。

yunxizujian的博客 1379

基于STM32F103C8T6的智能蓝牙手环系统设计与实现

摘要:本文设计并实现了一款基于STM32F103C8T6单片机的智能蓝牙手环系统。该系统集成了ADXL345加速度计、DS18B20温度传感器、plusesennor心率模块和BT06蓝牙模块,实现了心率(±2bpm)、体温(±0.5℃)、步数(±3%)等健康数据的实时监测与显示。通过OLED屏提供人机交互界面,支持蓝牙APP远程控制,具备自动步数清零、异常提醒等功能。测试表明系统各项功能均达到设计要求,响应时间0.1-0.5秒,心率检测准确率98%,体温检测准确率99%,功耗50mA(工作)/10mA(待

3254968421的博客 205

【数据分析八步法】将模糊需求转化为可验证的分析问题

国内访问Huggingface官方源常遇网络问题,可通过切换国内镜像提升下载速度。三种配置方式:1)设置HF_ENDPOINT环境变量;2)在from_pretrained中直接指定镜像参数;3)修改本地Huggingface配置文件。常用镜像包括hf-mirror.com、阿里云ModelScope和清华镜像源。注意镜像同步延迟、私有模型限制,建议配合huggingface-cli工具使用,必要时取消代理设置。合理配置镜像源可显著改善Huggingface生态使用体验。

Mr数据杨 858

c++成员函数指针的本质

       关于c++成员函数指针的声明,类型定义,赋值和调用就不再赘述了,需要了解的朋友可以看这篇文章:        http://www.cppblog.com/colys/archive/2009/08/18/25785.html              写这篇文章的目的在于看到有文章说c++的成员函数指针并不是普通函数指针,现在我要证明,在我的编译环境中,所看到的c++的成员函数指针...

tangchuxian080的博客 5965

上机任务一:空气质量指数 (air quality index,AQI是定量描述空气质量状况的指数。为了更好地了解和人们身体健康息息相关的天气状况,本书模拟生成500条某地区天气数据,一行样本对应一天

调整后的R平方为0.4308,考虑了模型中的自由度,它略低于多重R平方,说明模型的解释能力可能有限。总的来说,新的模型相对于之前的模型在AIC值上更优,包含了最高温度(X2)和最低温度(X3)这两个重要的预测因子,并且对AQI的解释能力较好。在表中,Df表示自由度,Sum Sq表示总平方和,Mean Sq表示均方(总平方和除以自由度),F value表示F统计量,Pr(>F)表示对应的p值。在分析这些结果时,需要关注系数的显著性(p值),系数的方向(正向或负向影响),以及系数的大小(估计值)。

Mrrunsen的博客 723

C++的成员函数指针简要

C++的成员变量指针和普通的指针没有什么大的区别,int类型成员变量的指针就是和int *, Foo类型的成员变量的指针就是Foo *,但是成员函数就不大一样了,主要是因为非静态成员函数实际上都隐藏这一个调用对象的指针的参数。静态成员函数指针,和普通的C函数指针没什么两样class Foo{public:    static int foo();};int (*fp)() = Foo::foo()

堕落兽人的专栏 1万+

Python爬虫分析二手交易平台商品定价合理性:基于多维度数据挖掘与机器学习

本文针对二手交易平台商品定价合理性问题,设计并实现了一个基于Python的多技术融合爬虫系统,结合Scrapy框架、Selenium自动化测试工具、Anti-Scraping对抗技术以及机器学习算法,对国内主流二手交易平台(闲鱼、转转等)进行大规模数据采集与分析。系统实现了商品信息的多维度采集、价格合理性模型构建、可视化展示等功能,为二手商品买卖双方提供科学的定价参考。实验结果表明,该系统能够有效识别定价异常商品,准确率达到89.7%,具有较高的实用价值。关键词:Python爬虫;二手交易;定价分析;

2201_76125261的博客 297

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

成员函数指针以及C++委托

原文地址:点击打开链接 说明

1797

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[翻译]C++教程:指向成员函数的指针

转自: 这是一篇翻译的文章,原文详细解释了C++中指向成员函数的指针,因为带有“教程”一词,所以比较通俗易懂。为了使文章读起来通俗有趣,翻译君并未一字一句一板一眼地翻译,并大量使用了诙谐的词汇(如“码农”)。另外,原文的某些地方分段不太合适(小学语文可能是体育老师教的。。),有些地方也稍嫌啰嗦,所以翻译君自己作了一些调整。如果对翻译君的翻译质量有意见,建议前往 原地址 围观。 咦?还不

飞鸟 968

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++教程:指向成员函数的指针

转载自:https://kelvinh.github.io/blog/2014/03/27/cpp-tutorial-pointer-to-member-function/ Kelvin的胡言乱语 ==============> 重剑无锋,大巧不工。 Blog Wiki Tags About GitHub RSS [翻译]C++教程:指向成员函数的指针 这

jerry_csdn_zhou的博客 783

C++ Primer 指向成员函数的指针

下面的pfi 是一个函数指针该函数没有参数返回类型为intint (*pfi) ();给出两个全局函数HeightIs()和WidthIs()int HeightIs();int WidthIs();把HeightIs()和WidthIs()中的任何一个或两个赋值给指针pfi 都是合法且正确的pfi = HeightIs;pfi = WidthIs;类Screen 也定义了两个访问函数——heig

HenryXueFeng的专栏 1451

C++成员函数指针详细使用指南

在C++程序中,很多函数是成员函数,即这些函数是某个类中的一部分。你不可以像一个普通的函数指针那样指向一个成员函数,正确的做法应该是,你必须使用一个成员函数指针。一个成员函数的指针指向类中的一个成员函数,并和以前有相同的参数,声明如下: float (SomeClass::*my_memfunc_ptr)(int, char *);  对于使用const关键字修饰的成员函数,声明如

kkForWork的专栏 851

C++ this指针与const成员函数

C++ this指针与const成员函数this指针 每个对象拥有一个this指针,通过this指针来访问自己的地址。 this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。 this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针 **在普通成员函数中,this是一个指向非const对象的const指针(如类类型为Student,那么thi

Summit的专栏 5930

C++成员函数指针的悲哀

源文:http://www.cnblogs.com/ly4cn/archive/2006/03/13/349180.html C语言的指针相当的灵活方便,但也相当容易出错。许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下。但不可否认的是,指针在C语言中的位置极其重要,也许可以偏激一点的来说:没有指针的C程序不是真正的C程序。  然而C++的指针却常常给我一种束手束脚的感觉。

huangpeng8612的专栏 1775

C++成员函数指针

C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回调函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。 成员函数指针的声明 一个成员函数指针包括成员函数的返回类型,后随::操作符类名,指针名和函数的参数。初看上去,语法有点复杂。其实可以把它理解为一个指向原函数的指针,格式是:函数返回类型,类名,:...

cchao985771161的博客 462

C++如何绑定成员函数指针

普通函数指针绑定方法: int (*p)(int,char); //函数指针 int fcn(int a,char b); int a=0;char b=""; p=fcn; //绑定函数 int c=(*p)(a,b); //调用 成员函数指针绑定方法: class A; //声明类 A obj; //定义对象 void (A::*p)(int a,char b); //成员指针 int a=0...

qq_25669417的博客 1567

C++成员函数指针的使用方法

C++成员函数指针(pointer to member function)的用法和C语言的函数指针有些相似. 下面的代码说明了成员函数指针的一般用法: class ClassName {public: int foo(int); } int (ClassName::*pmf)(int) = &ClassNmae::foo; ClassName  c;   //.*的用法

Pandoras Box 1343

c++入门 this指针、类的成员函数

目录this指针一、this指针的引出1.引入库this指针作用:2.this指针的特性二、类的6个默认成员函数1.构造函数1.1 概念1.2 特性2.析构函数2.1 概念2.2 特性3.拷贝构造函数3.1 概念3.2 特性4.运算符重载4.1 概念4.2 特性4.3 赋值运算符重载 this指针 一、this指针的引出 1.引入库this指针作用: C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,

Robotsfriend的博客 550
上一篇: 【大厂面试高频题精讲】:C++ STL map中lower_bound的实现原理全揭秘
下一篇: 【C++高性能系统设计必修课】:掌握future::get()异常处理的3种高级模式
VarFlow
博客等级 码龄1年 164粉丝 2189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值