• c++面试问题的几个方向


    1 关于多态,面向对象的几个要点
    作为面向对象的程序员,这个问题是必须要弄清楚的,网上、教科书上都是标准答案,关键是理解内涵哦。

    2 关于虚函数表和RTTI
    这个Inside C++ Object Model讲的相当明确
    虚函数表的第一项就是关于RTTI的,RTTI就是Run Time Type Identification。
    后面就是虚函数指针项了。
     
    3 C++对象的内存布局
    在引入了虚函数、继承、多继承、虚拟继承后,再加上内存对齐,这个问题就不那么简单了。
     
    4 构造函数、析构函数与虚函数
    一系列问题,作为一个C++程序员,这个务必要搞清楚。
     
    5 虚函数的缺省参数问题
    代码估计更能描述清楚问题:
    class A
    {
    public:
        virtual void function(int type = 0) {...}   
    }
     
    class B : public A
    {
    public:
        virtual void function(int type = 2) {...} // 注意这里type缺省值被改成了2
    }
    这样改有什么问题呢?
    我们知道virtual是动态绑定的,为了效率考虑,缺省参数是静态绑定的,使用的是基类的缺省参数。这样一来上面的做法就会出现问题了。
    如果能使用静态绑定和动态绑定来解释这个问题,那你就上了一个台阶了,我是从来没这样用过啊,不知道问题所在。有文章说没有吃过苦头的C++程序员不是好程序员,驯服不了C++这个怪物,此言非虚!?
     
    6 关于运算符
    重载的问题,运算符和函数
     
    7 关于new与delete的形式

     
    8 关于private继承
    不知道多少人用过,用了又能有多少好处,而且有些语言已经禁止private继承了,纠缠这个有何意义呢。
     
    9 关于STL的Iterator
    STL有很多牛思想,不过我还没被问过,像Traits编程技法等等。面试常见的是,++前置与后置的效率问题。

    为了编译器区分前置和后置++,C++规定后置形式有一个int类型参数 ,当函数被调用时,编译器传递一个0做为int参数的值给该函数。不这样规定,无法区分,因为都仅以自身对象为入参

    class  CInt  {
    private:
        int  m_value;
        // 
        CInt  &  CInt:: operator ++ ()  //  前置的是没有参数的,并且返回引用 
        {
            this->m_value += 1;
            return   *this;
        }
        const  CInt CInt::operator++ (int)  //  后置的有一个匿名参数,并且返回const值 
        {
            CInt old = *this;
            ++(*this);
            return  old;
        }
    };

    上面的实现解释了一个关键问题:前置比后置效率高 ,后置需要构造临时对象并返回

    为什么前置和后置返回参数不同呢

        前置仅仅是对自身进行运算,并将自身返回,这样外面可以直接对这个返回对象再进行操作 ,如(++it)->function()。

        后置因其返回的不是原来的对象,此时再进行额外操作,改变的是临时对象的状态,并不异义 ,容易误解。

        那为什么不返回const &呢?因为不能这么做,返回引用将无效,临时对象已经不存在了。

        所以后置返回const 对象即限制对此临时对象进行误操作,并显式地告诉调用者此对象仅为原对象的副本。


    10 关于C++的异常
    C++有异常处理机制,虽然不够完善,但还是应该去仔细了解了解。
     
    11 关于C++与C的效率问题
          这个问题最不好讲,效率的比较,环境是什么,先决条件又是什么呢,从语言层面讲C++比起C语言来主要的效率损失来自于virtual导致的非直接调用,这个Inside C++ Object Model讲的相当明确了。

  • 相关阅读:
    struct和typedef struct彻底明白了
    jsoncpp使用
    JsonCpp使用注意
    vscode 远程 Linux 开发环境搭建
    Ubuntu 更换国内源
    java~PECS原则
    DLL劫持——DLL sideloading 这玩意从EDR检测厂商看,就S1有防护能力
    apache jmeter报告模板
    http压测工具 jmeter 安装配置
    golang项目部署
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3965186.html
Copyright © 2020-2023  润新知