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. python快速生成注释文档的方法

    python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...

  2. Java Generics and Collections-2.4-2.5

    2.4 The Get and Put Principle Get and Put Principle: 用于取对象的泛型集合,声明为 <? extends T> 用于存对象的泛型集合,声 ...

  3. 安装Oracle 10g

    本文仅用于学习交流,商业用途请支持正版!转载请注明: http://www.cnblogs.com/mxbs/p/6217052.html 准备: Oracle 10g for Win(32-Bit) ...

  4. 虚拟机+apache+php+mysql 环境安装配置

    虚拟机的安装:直接下一步即可,注意修改路径. 安装完成后新建虚拟机,直接下一步.如果选择镜像文件后出现错误,可以试着去修改电脑bios中的虚拟化设置,改为enable,如下图: apache安装: 1 ...

  5. activity的启动模式

    有四种启动模式:standard.singleTop.singleTask.singleInstance. 可在AndroidManifest.xml设置android:launchMode属性,如: ...

  6. [LeetCode] Largest Number 最大组合数

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  7. [LeetCode] Word Ladder 词语阶梯

    Given two words (beginWord and endWord), and a dictionary, find the length of shortest transformatio ...

  8. [LeetCode] Scramble String 爬行字符串

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  9. 简单的浏览器调试——console命令

    一.显示信息 <script type="text/javascript"> console.log('hello'); console.info('信息'); con ...

  10. FPGA与simulink联合实时环路系列——实验二LED

    实验二LED 实验内容 在实验一的基础上,将simulink产生的测试信号输出到FPGA开发板上的LED灯进行显示,这里要在生成的硬件模型上进行修改,将传送到FPGA的信号输出到8个LED灯上,并且对 ...