C++基礎--回調的應用

1、類成員函數的回調函數

1. 類成員函數的回調,函數的調用必須經過類來調用;spa

CallBack.hcode

#pragma once

class CallBack
{
public:
    CallBack();
    ~CallBack();
    typedef void (CallBack::*pFunc)(int);
    void printFunc(int x);
    void FuncCall(CallBack *obj, CallBack::pFunc p);
};

 CallBack.cppblog

#include "CallBack.h"
#include <stdio.h>

CallBack::CallBack()
{
}

CallBack::~CallBack()
{
}

void CallBack::printFunc(int x)
{
    printf("CALLBACK x value is %d\n", x);
}

void CallBack::FuncCall(CallBack *obj, CallBack::pFunc p)
{
    int x = 5;
    (obj->*p)(x);
}

main.cpp繼承

#include "CallBack.h"

int main()
{
    CallBack *cb = new CallBack();
    cb->FuncCall(cb, &CallBack::printFunc);
    
    return 0;
}

運行結果爲:回調函數

 2、靜態函數的回調string

注意:1. 靜態函數只能在聲明這個函數的文件中調用;io

CallBack.hclass

#pragma once

typedef void(*pFunc)(int);
static void printFunc(int x);
void FuncCall(pFunc p, int x);
void excute(int x);

CallBack.cppim

#include "CallBack.h"
#include <stdio.h>

static void printFunc(int x)
{
    printf("CALLBACK x value is %d\n", x);
}

void FuncCall(pFunc p, int x)
{
    (*p)(x);
}

void excute(int x)
{
    FuncCall(printFunc, x);
}

main.cpp

#include "CallBack.h"

int main()
{
    int x = 5;
    excute(x);
    return 0;
}

運行結果爲:

 3、回調函數在繼承裏的應用

Base.h

#pragma once
class CBase
{
public:
    CBase();
    virtual ~CBase();

    char* x;
    typedef void (CBase::*pFunc)();
    virtual void printX();
    void FuncCall(CBase* bs, pFunc p);
};

Base.cpp

#include "Base.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

CBase::CBase()
{
    x = NULL;
    x = (char*)calloc(1, 256);
    strcpy_s(x, 256, "Base X\n");
}

CBase::~CBase()
{
}

void CBase::printX()
{
    printf_s("BASE %s", x);
}

void CBase::FuncCall(CBase *obj, CBase::pFunc p)
{
    (obj->*p)();
}

CallBack.h

#pragma once
#include "Base.h"

class CallBack:public CBase
{
public:
    CallBack();
    ~CallBack();

    virtual void printX();
};

CallBack.cpp

#include "CallBack.h"
#include <stdio.h>
#include <string.h>

CallBack::CallBack()
{
}

CallBack::~CallBack()
{
}

void CallBack::printX()
{
    strcpy_s(x, 256, "EXTERN x");
    printf_s("EXTERN %s", x);
}

main.cpp

#include "CallBack.h"
#include "Base.h"

int main()
{
    CBase *b = new CallBack();
    b->FuncCall(b, &CBase::printX);
    return 0;
}

運行結果:

相關文章
相關標籤/搜索