1、函数指针的,说明下面程序会出现编译错误吗?如果有怎么解决: class A { private : typedef void (*FUNC)(void); Func a; public : void funcA() {} void funcB() { a = funcA(); a(); } } void main() { A a; a.funcB(); } 2、map应用,下列函数的执行结果 #include <map> #include <iostream> static const char *IDS_BTN_1 = "IDS_BTN_1"; static const char *IDS_BTN_2 = "IDS_BTN_2"; static const char *IDS_BTN_3 = "IDS_BTN_3"; static const char *IDS_BTN_4 = "IDS_BTN_4"; static const char *IDS_BTN_5 = "IDS_BTN_5"; static const char *IDS_BTN_6 = "IDS_BTN_6"; static const char *IDS_BTN_7 = "IDS_BTN_7"; #define IDS_BTN_1 1021 #define IDS_BTN_2 1022 #define IDS_BTN_3 1023 #define IDS_BTN_4 1024 #define IDS_BTN_5 1025 #define IDS_BTN_6 1026 #define IDS_BTN_7 1027 class A { private : typedef std::map<const char*,int> MapCfgBtn; MapCfgBtn m_map_Cfg_Btn; int m_btn[7]; const char m_szConfig[7][100]; public : A() { m_btn[0] = IDS_BTN_1; m_btn[1] = IDS_BTN_2; m_btn[2] = IDS_BTN_3; m_btn[3] = IDS_BTN_4; m_btn[4] = IDS_BTN_5; m_btn[5] = IDS_BTN_6; m_btn[6] = IDS_BTN_7; strcpy(m_szConfig[0], IDS_BTN_1); strcpy(m_szConfig[1], IDS_BTN_2); strcpy(m_szConfig[2], IDS_BTN_3); strcpy(m_szConfig[3], IDS_BTN_4); strcpy(m_szConfig[4], IDS_BTN_5); strcpy(m_szConfig[5], IDS_BTN_6); strcpy(m_szConfig[6], IDS_BTN_7); for(int i=0; i<7; i++) { m_map_Cfg_Btn.insert(MapCfgBtn::value_type (m_szConfig[i], m_btn[i])); } } int funcB(const char* szIDS) { MapCfgBtn::iterator it = m_map_Cfg_Btn.find(szIDS); if( m_map_Cfg_Btn.end() != it ) { return it->second; } return 0; } } void main() { A a; std::cout << a.funcB(IDS_BTN_7); }
解答:
1、第一题考察类的函数指针的用法,
1)typedef void (*FUNC)(void); -> typedef void (A::*FUNC)(void);
2)a = funcA(); -> a = funcA;
3)a(); -> (this->*a)();
2、第二题输出0.
find查找的Key是指针,而不是指针对应的值。如果要输出IDS_BTN_7,需要将strcpy改为直接指针赋值,而且m_szConfig二位字符数组,要改为字符指针数组
原文地址:http://blog.csdn.net/lonelyrains/article/details/25870465