您的位置:首页 > 编程语言 > C语言/C++

设计的两道面试题C++

2014-05-15 09:53 239 查看
本文由 @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二位字符数组,要改为字符指针数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 题目设计 C++