MST

星途 面试题库

面试题:C++ 函数指针在类成员函数中的安全调用

在C++类中,有一个成员函数`void MyClass::memberFunc(int param)`,现在有一个指向该成员函数的指针`void (MyClass::*memberFuncPtr)(int)`。请实现一个安全调用该成员函数指针的机制,确保在对象指针为空或成员函数指针为空时,程序不会崩溃,并解释实现原理。
24.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

以下是实现安全调用该成员函数指针的机制代码:

#include <iostream>

class MyClass {
public:
    void memberFunc(int param) {
        std::cout << "memberFunc called with param: " << param << std::endl;
    }
};

// 安全调用函数
void safeCall(MyClass* obj, void (MyClass::*memberFuncPtr)(int), int param) {
    if (obj && memberFuncPtr) {
        (obj->*memberFuncPtr)(param);
    }
}

你可以通过以下方式调用:

int main() {
    MyClass* obj = nullptr;
    void (MyClass::*memberFuncPtr)(int) = &MyClass::memberFunc;

    safeCall(obj, memberFuncPtr, 42);

    obj = new MyClass();
    safeCall(obj, memberFuncPtr, 42);

    delete obj;
    return 0;
}

原理解释

  1. 条件判断:在safeCall函数中,首先判断obj(对象指针)和memberFuncPtr(成员函数指针)是否为空。只有当两者都不为空时,才进行成员函数的调用。
  2. 成员函数调用语法(obj->*memberFuncPtr)(param) 这种语法用于通过对象指针obj来调用指向的成员函数memberFuncPtr,并传递参数param。当obj为空或者memberFuncPtr为空时,不进行调用,从而避免程序崩溃。