C++ 面试

作者: 不要人夸颜色好 | 来源:发表于2018-07-24 18:58 被阅读46次

    为什么C++member function template不能是virtual的 ?

    一个类的成员函数不能既是 template 又是 virtual 的

    class Animal{
      public:
          template<typename T>
          virtual void make_sound(){
            //...
          }
    };
    

    因为C++的编译与链接模型是"分离"的 (至少是部分原因吧)。

    • Unix/C开始,一个C/C++程序就可以被分开编译,然后用一个linker链接起来。这种模型有一个问题,就是各个编译单元可能对另一个编译单元一无所知。
    • 一个 function template最后到底会被 instantiate为多少个函数,要等整个程序(所有的编译单元)全部被编译完成才知道。
    • 同时,virtual function的实现大多利用了一个"虚函数表"的东西,这种实现中,一个类的内存布局(或者说虚函数表的内存布局)需要在这个类编译完成的时候就被完全确定。

    所以,由上面的矛盾可知,C++member function 不能既是 template 又是 virtual 的。


    reverse 一个字符串

    手动循环还是使用系统库函数
    是否返回一个新的字符串,或者只是返回原来的
    是否支持 UnicodeUTF-8


    C++ 和其他语言有什么不同

    主观判断应聘者的答案


    shared_ptr 内部实现,(是否是多线程安全的)

    shared_ptr 本身是线程安全,但指向的对象操作不是线程安全


    多线程中栈与堆是公有的还是私有的

    栈私有, 堆公有


    Hash 表的原理

    处理关键字 key 冲突的办法 : 开放定址法, 链地址法


    什么是拷贝构造函数(如何调用)

    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:

    • 通过使用另一个同类型的对象来初始化新创建的对象。
    • 复制对象把它作为参数传递给函数。
    • 复制对象,并从函数返回这个对象。

    请问C++的类和C里面的struct有什么区别?

    C++中的类具有成员保护功能,并且具有继承,多态这类特点,而c里的struct没有
    c里面的struct没有成员函数,不能继承,派生等等.


    什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?

    用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。

    使用的时候要记得指针的长度。

    malloc的时候得确定在那里free.

    对指针赋值的时候应该注意被赋值指针需要不需要释放.

    动态分配内存的指针最好不要再次赋值.

    相关文章

      网友评论

        本文标题:C++ 面试

        本文链接:https://www.haomeiwen.com/subject/jgmymftx.html