C++面试常考知识点汇总

文章目录

      • 1.面向对象
        • 类和对象
        • 继承
        • 封装
        • 多态
      • 2.内存管理
      • 3.进程与线程
      • 4.指针和引用
      • 5.函数
      • 6.重载和重写(覆盖)
        • 重载
        • 重写
        • 区别
      • 6.关键字

1.面向对象

C++是面向对象的编程语言。面向对象的程序设计开发时间短,效率高, 可靠性高。面向对象编程的编码具有高可重用性,可以在应用程序中大量采用成熟的类库(如STL),从而虽短了开发时间,软件易于维护和升级。

  • 面向对象的基本概念:类、对象和继承。所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。
  • 面向对象的基本特征/三大特性:封装、继承和多态
    封装:将低层次的元素组合起来形成新的、更高实体的技术;
    继承:广义的继承有三种实现形式:实现继承、可视继承、接口继承。
    多态:允许将子类类型的指针赋值给父类类型的指针
类和对象

把一些具有共性的对象归类后形成一个集合,也就是所谓的类。 类是对象的抽象,对象是类的实例。

  • C++空类默认有哪些成员函数?
    默认构造函数、析构函数、复制/拷贝构造函数、赋值函数
  • 一个类的构造函数和析构函数什么时候被调用,是否需要手工调用?
    答:构造函数在创建类对象的时候被自动调用,析构函数在类对象生命期结束时,由系统自动调用。
  • 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义
    这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。
  • 在类的内部定义成员函数的函数体,这种函数会具备那种属性
    种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。
  • 成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?
    通过this指针指向对象的首地址来区分的。
  • 拷贝构造函数在哪几种情况下会被调用?
    a.当类的一个对象去初始化该类的另一个对象时;
    b.如果函数的形参是类的对象,调用函数进行形参和实参结合时;
    c.如果函数的返回值是类对象,函数调用完成返回时。
  • 构造函数与普通函数相比在形式上有什么不同?
    构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。
    构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。
  • 什么时候必须重写拷贝构造函数?
    当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
  • 构造函数的调用顺序是什么?
    a.先调用基类构造函数
    b.按声明顺序初始化数据成员
    c.最后调用自己的构造函数。
  • 哪几种情况必须用到初始化成员列表?
    a.类的成员是常量成员初始化;
    b.类的成员是对象成员初始化,而该对象没有无参构造函数。
    c.类的成员为引用时。
  • 静态函数存在的意义?
    静态私有成员在类外不能被访问,可通过类的静态成员函数来访问;
    当类的构造函数是私有的时,不像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。
  • 如何定义和实现一个类的成员函数为回调函数?
    答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。
    定义一个类的成员函数时在该函数前加CALLBACK即将其定义为回调函数,函数的实现和普通成员函数没有区别
继承
  • 公有继承、受保护继承、私有继承
    答:a、公有继承时,派生类对象可以访问基类中的公有成员,派生类的成员函数可以访问基类中的公有和受保护成员;
    b、私有继承时,基类的成员只能被直接派生类的成员访问,无法再往下继承;
    c、保护继承时,基类的成员也只被直接派生类的成员访问,无法再往下继承。
    d、公有继承时基类受保护的成员,可以通过派生类对象访问但不能修改。
  • 继承的优缺点
    • 优点:
      a、类继承是在编译时刻静态定义的,且可直接使用,
      b、类继承可以较方便地改变父类的实现。
    • 缺点:
      a、因为继承在编译时刻就

你可能感兴趣的:(C++,面试,C++,面试)