C++ c++;:无法理解消息处理程序

C++ c++;:无法理解消息处理程序,c++,function-pointers,C++,Function Pointers,事实上,我对编写处理程序还不熟悉,但不知何故,我成功地编写了这段代码: #include<iostream> using namespace std; class test { public: typedef void (test::*MsgHandler)(int handle); test() { cout<<"costructor called"<<endl; } void Initialize() { add_msg_Handl

事实上,我对编写处理程序还不熟悉,但不知何故,我成功地编写了这段代码:

#include<iostream>

using namespace std;

class test
{
public:
typedef void (test::*MsgHandler)(int handle);

test()
{
    cout<<"costructor called"<<endl;
}

void Initialize()
{
    add_msg_Handler(4,&test::System);
}

void System(int handle)
{
    cout<<endl<<"Inside System()"<<endl;
    cout<<"handle:"<<handle<<endl;
}

protected:
MsgHandler message[20];
void add_msg_Handler(int idx,MsgHandler handler)
{
    cout<<endl<<"Inside add_msg_Handler()"<<endl;
    cout<<"handler:"<<handler<<endl;
    message[idx]=handler;
    cout<<"message:"<<message[idx]<<endl;
}
};

int main()
{
test obj;
obj.Initialize();

return 0;
}
但有几件事超出了我的范围。如果我是对的,那么应该在此行中调用System():

add_msg_Handler(4,&test::System);
但这并没有发生。我需要帮助纠正这个问题

第二件事是,我无法理解为什么我会得到这样的输出:

handler:1

我的意思是处理程序是如何初始化为1的。有人能帮我解决这个问题吗???test::System不是函数调用,而是指向成员函数的指针
test::System

(一个调用看起来像
System(0)
,如果将其用作相关参数,则不会编译。)

如果查看
添加消息处理程序的定义

cout<<endl<<"Inside add_msg_Handler()"<<endl;
cout<<"handler:"<<handler<<endl;
message[idx]=handler;
cout<<"message:"<<message[idx]<<endl;

couthow是MsgHandler定义的吗?“如果我是对的,应该调用System()”—不,您从未调用过System()或handler()。@ShlomiAgiv,第8行。
cout<<endl<<"Inside add_msg_Handler()"<<endl;
cout<<"handler:"<<handler<<endl;
message[idx]=handler;
cout<<"message:"<<message[idx]<<endl;