本文由 @lonelyrains 出品,转载请注明出处。
文章链接: http://blog.csdn.net/lonelyrains/article/details/25870465
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二位字符数组,要改为字符指针数组