Qt

和老大提出辞职之后,商量了关于我的工作后续的事情,便开始寻找新工作...... 目的地是在重庆的一家公司,具体什么名字,暂时不透露了,面的C++ & Qt,按照面试官的说法,这是一个纯Qt的岗位,所以接下来的问题大概全部是和Qt相关的,当然也会有部分C++的问题在其中。

废话不多说,我们进入正题:

C++部分的问题:

  • 第一部分是关于C++这门语言的,面向对象是什么?

    1
    2
    // OOP
    // 封装,继承,多态
  • 对于多态的理解?

    1
    2
    3
    4
    5
    // 首先是如何实现多态?
    1. 多态发生在继承关系中。
    2. 需要重写虚函数。
    3. 父类的指针指向子类的对象。
    4. 通过父类指针对重写的虚函数发起调用,最终调用你要想调用的函数。

    example:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    class A
    {
    public:
    A(){std::cout<<"A"<<std::endl;}

    virtual void function_virtual()
    {
    std::cout<<"function_A"<<std::endl;
    }
    private:
    int menber;

    };

    class B: public A
    {
    public:
    B():A(){std::cout<<"B"<<std::endl;}

    virtual void function_virtual()
    {
    std::cout<<"function_B"<<std::endl;
    }
    };

    class D: public A
    {
    public:
    D():A(){std::cout<<"D"<<std::endl;}

    virtual void function_virtual()
    {
    std::cout<<"function_D"<<std::endl;
    }
    };

    int main()
    {
    A * a = new A;
    B * b = new B;
    D * d = new D;

    A * ptr = b;
    ptr->function_virtual();

    ptr = a;
    ptr->function_virtual();

    ptr = d;
    ptr->function_virtual();

    return 0;
    }

    结果如下: polymorphism

  • 多态的实现 -- 虚函数表

    • 验证虚函数表:

      1
      2
      3
      4
      5
      6
      7
      8
      // 一个简单的C 不带有虚函数 
      class C
      {
      public:
      C(){std::cout<<"C"<<std::endl;}
      private:
      long long member;
      };

      输出结果: virtual_table

      virtual table 2
      • 上面的结果可以看出存在一个成员(存在虚函数的情况),大小为8个字节(64位软件)。

Qt部分

  • 元对象系统
  • 窗口刷新机制
  • 内存托管(删除机制)
  • Qquick
  • Qt的布局

OPENGL部分

  • 缓冲(双缓冲)

  • 着色器程序(语言)