C++ 特性及类(面试复习整理)

文章目录

  • 1、c++ 三大特性
  • 2、类与函数
    • 类访问修饰符及继承
    • 虚函数(virtual)
      • 构造函数可以用虚函数吗
      • 析构函数需要使用虚函数
      • 纯虚函数
  • 3、多态
  • 4、数据抽象

1、c++ 三大特性

封装:将某些东西隐藏起来,以特殊方式访问,增加安全性,简化编程
继承:面向对象的重要概念
多态:相同方式处理不同对象,提高代码重用性

2、类与函数

类访问修饰符及继承

public:外部可访问
private:类外部不可以访问,本类成员和友元可以访问
protected:子类可以访问

public继承:成员访问权限保持原样,不改变,不能访问基类private成员
private继承:所有基类成员都变为private,不能访问原基类private成员
protected:基类public对象变为protected,protected不变,不能访问原基类private成员

虚函数(virtual)

子类重写父类虚函数时,若没有使用virtual,自己会声明为virtual,为避免误会,应自己写上virtual。

虚函数表(vtable):指针数组有虚函数的类都有,存放所有指向虚函数的指针。子类继承父类时,同时继承父类的虚函数表,重写的虚函数将会更新自己的虚函数表,并且追加自己独有的虚函数指针,如果是多继承,就会有多个虚函数表

构造函数可以用虚函数吗

不可以,原因如下
1、构造函数没有调用时,对象没有实例化,没有空间去存储vtable
2、从使用角度来讲,虚函数表用于信息不全的状态下,用于确定调用函数。创建新对象时,将会自己调用构造函数,所以构造函数没必要声明为虚函数
3、构造函数仅仅在对象初始化时使用一次,类似于静态的,虚函数是动态的,没必要使用虚函数。

析构函数需要使用虚函数

需要,我们通过基类指针销毁对象,假如析构函数不是虚函数,就不能准确识别对象类型,就不能正确使用析构函数,子类析构函数没有使用的话,会造成资源泄露。

纯虚函数

无主体的函数,virtual type A()=0;
基类中无意义的实现可以声明为纯虚函数,拥有储蓄函数的类被称为抽象类,抽象类只能作为借口使用,不能被初始化。

3、多态

template(模板):静态多态(编译时完成,效率高,适配性高,松耦合性),隐形接口
overload(重载):静态多态
1、同名函数,不同参数/函数返回值
2、相同范围,同一个类中
override(覆盖重写):动态多态(运行时完成,接口重用,编译器无法优化)
1、不同类中
2、同名,同参
3、基类函数有virtual
overwrite(重写):静态多态,子类屏蔽父类的同名基函数
1、同名同参,无virtual
2、同名不同参

4、数据抽象

数据抽象是指只向外界提供关键信息,隐藏具体实现过程。是一种接口实现分离的编程(设计)技术。
好处是:保护了类的内部,不会因为用户级的错误损坏对象状态。同时,类的实现可能随着时间推移而变化,数据抽象可以应对需求的变化。

你可能感兴趣的:(C++(实习面试复习整理))