C++基础面经
创始人
2025-05-31 16:34:16
0

C++基础面经

  • 面向对象相关
    • 1. 面向对象是什么?
    • 2. 面向对象的三大特征是什么?
    • 3. 重载和重写的区别是什么?
    • 4. 重载和重写是怎么实现的?
    • 5. 构造函数的种类有哪些?
    • 6. 定义一个空类时,默认生成哪些函数?
    • 7. 类对象初始化的顺序是什么?
    • 8. 向下转型和向上转型是什么?
    • 9. 深拷贝和浅拷贝是什么?
    • 10. 模板类是在什么时候实现的?
    • 11. 类继承时,不同关键字的访问权限?
    • 12. 类内可以定义引用数据成员嘛?
    • 13. 构造函数为什么不能声明为虚函数?

面向对象相关

1. 面向对象是什么?

  • 面向对象是一种编程思想,把一切东西看作一个个对象,每个对象有他们各自的属性。
  • 把这些对象拥有的属性和操作这些属性的函数打包成一个类来表示。.

2. 面向对象的三大特征是什么?

  • 面向对象的三大特征是继承,封装,多态。
  • 继承,可以使用现有的类的所有功能,在无需重新编写原来代码的基础上进行扩展。
  • 封装,将属性和操作属性的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
  • 多态,用父类型别的指针指向子类的实例,通过父类的指针调用子类的成员函数。

3. 重载和重写的区别是什么?

  • 重写,是指派生类中存在重新定义的函数。函数名,参数列表,返回值类型都和基类中的函数一样。基类中的被重写函数需要有 virtual 修饰。
  • 重载,是指声明多个多个具有不同参数列表的同名函数,根据参数列表决定调用哪个函数。

4. 重载和重写是怎么实现的?

  • 对于重载,在预编译阶段,可以通过命名倾轧来修改函数名,以区分参数列表不同的同名函数。
  • 对于重写,通过在基类的函数前加上 virtual 关键字,运行时会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

5. 构造函数的种类有哪些?

  • 默认构造函数和初始化构造函数,在定义类的对象的时候,完成对象的初始化工作。
  • 拷贝构造函数,将已存在对象的值,赋给当前的对象。
  • 移动构造函数,使用右值引用作为参数,将一个对象的资源更高效的转移到另一个对象上,避免不必要的资源拷贝。

6. 定义一个空类时,默认生成哪些函数?

  • 无参构造函数,定义类的时候完成初始化的操作。
  • 拷贝构造函数,将已存在对象的值,赋给当前的对象。
  • 赋值运算符。
  • 析构函数。

7. 类对象初始化的顺序是什么?

  • 父类构造函数–>成员类对象构造函数–>自身构造函数。

8. 向下转型和向上转型是什么?

  • 向下转型,父类转换为子类,可以采用强制转换,但是不安全。
  • 向上转型,子类转换为父类,使用 dynamic_cast(expression),这种转换比较安全。

9. 深拷贝和浅拷贝是什么?

  • 浅拷贝为值拷贝,将源对象的值拷贝到目标对象中去。本质上源对象和目标对象共用一份实体,只是所引用的变量名不同,地址还是相同的。
  • 深拷贝为开辟一片新的空间,将源对象中的值拷贝到目的对象中去,这两个指针指向了不同的内存位置。深拷贝通过拷贝构造函数和赋值运算符重载实现。

10. 模板类是在什么时候实现的?

  • 模板的实例化分为显示实例化和隐式实例化,前者是告诉模板应该使用什么样的类型去生成具体的函数,后者是编译器在编译的过程中去决定用什么类型实例化一个模板。
  • 模板的具体化,当函数模板使用某种类型实例化后的类或函数不满足要求时,可以考虑对模板进行具体化,具体化可以修改模板的定义,当遇到需要具体化的类型时,按照自己的需求处理。

11. 类继承时,不同关键字的访问权限?

  • 类中的成员可以分为三种类型,public,protected,public。
  • private继承,子类对象不可以访问父类的任何成员。
  • public继承,子类对象可以访问父类的 public,但不能访问基类中的private和protected成员。
  • protect继承,子类可以访问父类的 public,protected,但不能访问基类中的private成员。

12. 类内可以定义引用数据成员嘛?

  • 可以,但是需要遵循三个原则:
  • 不能使用默认构造函数进行初始化,必须提供构造函数来进行初始化。
  • 提供构造函数的形参必须也是引用类型。
  • 不能在构造函数体中初始化,必须在初始化列表中初始化。

13. 构造函数为什么不能声明为虚函数?

  • 虚函数主要用于在信息不全的情况下,可以使重载的函数得到对应的调用,构造函数本身就是要初始化实例,那么虚函数就没有意义。
  • 此外虚函数是在构造函数之后才建立的,所以构造函数不可能称为虚函数。

相关内容

热门资讯

不是假体检!但爱康国宾的麻烦还... 本文由无冕财经(wumiancaijing)原创发布作者:贾琦编辑:陈涧设计:岚昇监管部门针对爱康国...
周大福突发!明天涨价! “今年1月买的算上折扣总共花了2万多,没想到一年不到升值了2倍多。” 周大福天猫官方旗舰店12月17...
君禾股份:跨境电商突围+仓储网... 跨境电商+国内仓储,君禾股份(603617.SH)以双轮驱动加快销售渠道升级。具体来看,君禾股份一方...
港股航空股大涨 12月18日,香港恒生指数收涨0.12%,恒生科技指数跌0.73%。 煤炭、交通运输、银行、石油石化...
花1亿元买单陈年纠纷,重庆啤酒... 有结果未尝不是一件好事经过多年的拉锯战,重庆啤酒与重庆嘉威啤酒有限公司(下称重庆嘉威)的合同纠纷案算...
丝芭传媒维权风波:偶像产业背后... 12月17日,丝芭传媒猝然发布声明,宣称针对前成员曾艳芬的“陪酒”爆料采取报警处理举措,此消息一经公...
年内涨幅超10倍大牛股屡屡上演... 本文来源:时代周报 作者:郭鹏最近几个交易日,*ST亚振(603389.SH)股价如同坐上过山车一般...
北京711推出“人间烟火味”的... 01.“鸿蒙智行大饭店”将实行预约制02.苏宁易购一元甩卖子公司03.美国版蜜雪冰城最高可选200%...
联创电子:控股股东筹划控制权变... 新京报贝壳财经讯 12月17日,联创电子发布公告称,公司近日收到控股股东江西鑫盛的通知,获悉江西鑫盛...
多轮调整后 青岛港46亿收购计... 中经记者 庄灵辉 卢志坤 北京报道筹划超两年,青岛港(601298.SH)向关联方抛出的收购计划终止...