zoukankan      html  css  js  c++  java
  • 一道Apple公司(中国)的面试题目

    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 >= 0 && frame_id <=3){
                    pFunc pf;
                    pf = (pFunc)*((int *)*(int *)this + frame_id);
                    pf();
                }
            }
    };
    
    int main(){
        Solution sln;
        sln.doSomething(0);
        sln.doSomething(1);
        sln.doSomething(2);
        sln.doSomething(3);
        return 0;
    }

    执行结果如下:

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

  • 相关阅读:
    拾遗:systemctl --user
    拾遗:~/.zshrc 配置
    拾遗:YouCompleteMe 前传——编译安装 llvm + clang
    洛谷P1546 最短网络 Agri-Net(最小生成树,Kruskal)
    洛谷P1462 通往奥格瑞玛的道路(二分+spfa,二分+Dijkstra)
    HDU6669 Game(思维,贪心)
    HDU6672 Seq(找规律)
    HDU6668 Polynomial(模拟)
    洛谷P1378 油滴扩展(搜索)
    机器学习数学基础(四)
  • 原文地址:https://www.cnblogs.com/fangying7/p/4961599.html
Copyright © 2011-2022 走看看