Apple在中国(上海)有公司业务,但是感觉主要是做测试工作的部门,主要是保障Apple的产品质量QE。面试的时候,面试官出了一道题目,我貌似曾今开过类似的题目,但是由于当场发挥不佳没有答出来。题目大意是这样的:

在公司的某个通信协议中存在这样一个场景,甲给乙发送了一个数据帧,这个数据帧最前面的一个字节代表是数据帧的类型(总共四种),只可能为0,1,2,3。甲每次给乙发送一个数据包后,乙要通过自己写程序调用对应数据帧类型的函数来对这个数据帧进行处理。处理函数必须要和帧相对应,不然得不到真确的结果。要求不能使用if...else...,switch和三目表达式语句。

题目到这里,想必大家都已经知道可以使用C++的虚函数来做,可是到底应该怎么写呢?下面给出一种实现方法。

#include <iostream>
using namespace std;
typedef void (*pFunc)(void);
class Solution{
public:
virtual void func1(){ cout << "func1 executed ..." << endl;}
virtual void func2(){ cout << "func2 executed ..." << endl;}
virtual void func3(){ cout << "func3 executed ..." << endl;}
virtual void func4(){ cout << "func4 executed ..." << endl;}
void doSomething(int frame_id) {
if(frame_id >= && frame_id <=){
pFunc pf;
pf = (pFunc)*((int *)*(int *)this + frame_id);
pf();
}
}
}; int main(){
Solution sln;
sln.doSomething();
sln.doSomething();
sln.doSomething();
sln.doSomething();
return ;
}

执行结果如下:

aaarticlea/png;base64,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" alt="" />

其中关于如何获取指向虚函数的指针的方法,可以参见文章:http://www.cppblog.com/xczhang/archive/2008/01/20/41508.html

一道Apple公司(中国)的面试题目的更多相关文章

  1. 全网最全C#实习面试题目

    整个内容是我在春招面试时候整理的一些题目,里面涵盖有网上搬运的(由于当时没有记录来源,如果有转载没标注来源,请与我联系),还有我面试到的.整个排版很乱,后期我会一步一步整理.整个内容大概快有两万字.整 ...

  2. 2016年Web前端面试题目汇总

    转载: 2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢 ...

  3. Android面试题目及其答案

    转自:http://blog.csdn.net/wwj_748/article/details/8868640 Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应 ...

  4. 经典面试题目——250M内存处理10G大小的log文件

    前言 周末逛知乎的时候,看到的一个经典面试题目:http://www.zhihu.com/question/26435483.非常经典的一道分而治之的题目. 题目描写叙述例如以下: 有次面试遇到一个问 ...

  5. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  6. (转)喜马拉雅2018 Java面试题目

    背景:将网上的题目整理下. java基础 1:hashTable hashMap ConcurrentHashMap 的区别.数据结构.线程安全 2:equals和==区别, 重写equals一定要重 ...

  7. C语言经典面试题目(转的,不过写的的确好!)

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

  8. linux面试题目—2

    linux面试题目—2 二 选择题 1.关闭linux系统(不重新启动)可使用命令 B . A Ctrl+Alt+Del B halt C shutdown -r now D reboot 2.实现从 ...

  9. linux面试题目--1

    Linux面试题目 填空题1. 在Linux系统中,以 (文件)方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节 ...

随机推荐

  1. 基于jquery实现图片拖动和曲线拖放

    功能:图片的拖动.曲线的拖放和绘制 一. 准备工作 1. 点击此下载相关的文档 二. 在浏览器中运行 dragDrop.html 文件,即可看到效果 三. 效果图

  2. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  3. 曝光最新WIN10系统32位,64位系统ghost版

    系统妈 随着Windows 10Build 10074 Insider Preview版发布,有理由相信,Win10离最终RTM阶段已经不远了.看来稍早前传闻的合作伙伴透露微软将在7月底正式发布Win ...

  4. 使用maven给spring项目打可直接运行的jar包(配置文件内置外置的打法)

    从网上看过许多打jar包的例子,大多是将配置文件打进jar包的.经过本人一番研究,终于搞清楚了怎样将jar包的配置文件外置. 废话不说,直接上spring的pom.xml的配置文件. <proj ...

  5. 【转】 XenServer架构之HA概述

    一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...

  6. POJ 2255. Tree Recovery

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11939   Accepted: 7493 De ...

  7. spring3 循环依赖

    循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则它们最终反映为一个环.此处不 ...

  8. JAVA设计模式之3-抽象工厂模式

    书接上文,简单工厂模式解决的是可以枚举种类的类的问题,但是带来了高耦合的问题,并且对类系列繁多无从下手,那么我们想起了一种方法,那就是抽象类,建一个抽象工厂,抽象工厂里的方法都是根据系列类的差异区分出 ...

  9. [LeetCode] Merge Sorted Array 混合插入有序数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...

  10. NPOI操作EXCEL(四)——反射机制批量导出excel文件

    前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...