首页 > 代码库 > 设计的两道面试题C++

设计的两道面试题C++

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二位字符数组,要改为字符指针数组