You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在类的公有成员函数内通过成员函数指针调用私有成员函数

实现方法

callError 是类 A 的成员函数,天然拥有类内私有成员的访问权限,你只需要在该函数内声明指向私有成员函数error的指针,绑定当前实例的this指针调用即可,示例实现如下:

void A::callError(void) {
    // 声明指向A类无参无返回值成员函数的指针,指向私有成员error
    void (A::*err_ptr)(void) = &A::error;
    // 绑定当前实例调用成员函数指针
    (this->*err_ptr)();
}

补充说明

  • 成员函数指针必须带上类名A::*声明,取地址时必须写完整的&A::error,不可省略类名直接取地址
  • 调用成员函数指针必须绑定具体的类实例,除了当前实例的this指针,你也可以绑定其他同类型的类实例:
    void A::callError(void) {
        void (A::*err_ptr)(void) = &A::error;
        A another_obj;
        // 绑定其他同类型实例调用
        (another_obj.*err_ptr)();
    }
    
  • 该访问规则受C++权限控制约束,只有类成员函数、友元函数内部可以获取私有成员函数的指针,类外(比如main函数)尝试获取&A::error会直接编译报错。

完整可运行示例

#include <iostream>
class A
{
private:
    void error(void) {
        std::cout << "私有error函数被调用" << std::endl;
    }
public:
    void callError(void);
};

void A::callError(void) {
    void (A::*err_ptr)(void) = &A::error;
    (this->*err_ptr)();
}

int main(void)
{
    void (A::*abc)(void) = &A::callError;
    A test;
    (test.*abc)();
    return 0;
}

内容的提问来源于stack exchange,提问作者kuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:54:08