问题

  1. C++ 中析构函数可以为纯虚函数吗?

    可以为纯虚函数,如果基类将析构函数设置为纯虚函数,那么基类就会成为抽象类,是不能创建对象的。且如果基类不提供纯虚析构函数的定义的话,使用基类指针指向派生类对象会出现无法解析的外部符号命令错误,所以基类同时也必须提供纯虚析构函数的定义。

  2. 实现#define max(a, b, c)

    #define max(a, b, c) (a > b ? (a > c ? a : c) : (b > c ? b : c))
    
  3. C++ 中引用和指针的区别?

    • 引用是别名,在函数内操作一个通过传引用方式传入的变量,相当于直接操作函数外原本的变量。指针是一个变量,但是不同于一般变量,指针存放的是内存地址。传指针方式传入函数内的指针,只是拷贝外部指针的副本,可以在函数内修改它们共同指向的内存区域,但是却无法在函数内修改函数外指针本身。
    • 声明方式不同,一个通过&,一个通过*
    • 引用一旦绑定不可更改,指针可以更改指向地址。
    • 引用是和绑定变量共享内存的,并不另外为引用开辟一块内存。指针是一个独立的变量,需要占据内存,且可改变它存储的内容。
    • 引用不可以绑定到null值,指针可以直接指向null值。
    • 不可以创建引用数组,可以创建指针数组。int & a[];
  4. std::unordered_map/std::map的区别?

    • unordered_map内部采用哈希表实现,所有元素是无序的,map内部采用自平衡BST类似红黑树实现,除内置类型外,自定义类型在插入时需要重载比较<运算符帮助每次插入元素时进行比较,所以map中的元素是有序的。
    • unorder_map查询、插入和删除时间平均是O(1),最坏的情况是O(n),map查询log(n),插入和删除是log(n)+恢复平衡的花销。
  5. waiting...

results matching ""

    No results matching ""