游戏开发面试总结2

总结一些面试常问的吧

1:聊一聊虚函数吧

C++中,虚函数主要是实现了多态机制,简而言之就是用父类型的指针指向了子类型的实例,然后通过父类的指针去调用子类的成员函数。

每一个含有虚函数的类都至少有一个与之对应的虚函数表,存放着这个类所由虚函数对应的函数指针。

虚函数表在构建的过程中的步骤:

  1:拷贝基类的虚函数表

  2:替换重写的虚函数指针

   3:追加子类的虚函数指针

这些步骤是编译器完成的

2:

虚析构函数:虚析构函数使得在删除指向子类对象的基类指针的时候可以调用子类的析构函数达到释放子类中堆内存的目的,防止内存泄漏

当delete父类的指针时,由于子类的析构函数和父类的析构函数形成多态,所以先调用子类的析构函数再调用父类的析构函数

纯虚函数:形式为virtual void fun() = 0; 不需要实现,因为不会被调用到

抽象基类:至少有一个纯虚函数的类,抽象基类不能产生改类的对象,但是可以有这个类的指针或者引用;子类中必须将纯虚函数实现,否则子类也是抽象基类

3:

聊一聊堆排序吧

堆排序分为两个步骤:

  1:根据初始的输入数据,进行HeapAdjust形成初始堆

    复杂度为O(n),包括比较和交换 公式可以写为s = 2^( i - 1 ) * ( k - i ),2^( i - 1) 表示该层上有多少个元素,( k - i) 表示子树上要下调比较的次数。可以求得S = 2^k -k -1 , log(n) =k带入得到S = n -lgn -1

  2:通过对象交换和重新调整进行堆排序

    复杂度为O(nlgn) log2 + log3 + ... + logn ≈ log(n!) 和 nlogn是同阶函数

堆的应用场景:找TOP K , 实现优先队列等。。

猜你喜欢

转载自www.cnblogs.com/amadios/p/11520662.html