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. 构造函数为什么不能声明为虚函数?
- 虚函数主要用于在信息不全的情况下,可以使重载的函数得到对应的调用,构造函数本身就是要初始化实例,那么虚函数就没有意义。
- 此外虚函数是在构造函数之后才建立的,所以构造函数不可能称为虚函数。
相关内容
keil调试专题篇
调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...