自学内容网 自学内容网

C++多态常见问题

  1. 什么是多态

多态指的是不同类的对象调用同一个方法时做出不同响应的能力

主要是分为两类

一类是编译时多态 也称静态多态 通过函数重载和运算符重载实现

一类是运行时多态 也称动态多态 通过函数重写(覆盖)实现 具体调用时才决定是哪个函数 使用虚函数实现

  1. 什么是重载 重写 重定义

重载指的是在同一个作用域中 函数名相同 但参数列表不同 包括类型\个数\顺序 的函数 返回值不同不算重载 属于静态多态 底层原理是在编译时形成不同的函数名 链接时区分链接

重写指的是在继承关系中子类重新定义继承来的虚函数 重写的函数名\参数列表\返回值类型必须和父类一致 被继承的函数必须是虚函数 可以指定父类显示调用基类的被重写函数 属于动态多态 通过重写子类中的虚函数表实现

重定义指的是在继承关系中 子类重新定义继承来的非虚函数 父类的函数被隐藏 可以使用域作用限定符来访问父类中的同名函数

  1. inline函数可以是虚函数吗

可以 但是inline本身是一个建议的关键字 编译器会忽略inline属性 将其作为虚函数放到虚表中

  1. 静态成员函数可以是虚函数吗

不可以 静态成员函数没有this指针 无法确定属于哪一个对象 也无法访问虚表

  1. 构造函数可以是虚函数吗

不可以 对象中的虚函数表指针在构造函数初始化列表阶段才初始化 如果构造函数是虚函数 那就找不到构造函数了

  1. 析构函数可以是虚函数吗

可以而且在继承关系中最好把析构函数设置成虚函数 因为当使用父类指针或引用管理子类对象时 如果没有设置为虚函数 就只会调用父类的析构函数而不调用子类的析构函数

构造时是先构造父类再构造子类 析构时是先析构子类再析构父类

  1. 虚基表和虚函数表是什么

虚基表是为了解决菱形继承中数据冗余和二义性的问题的

虚函数表是用于覆盖父类的虚函数的

  1. 抽象类是什么 有什么作用

抽象类是包含纯虚函数的类 不能被实例化 只有子类重写了纯虚函数才能实例化 这里体现了接口继承的关系


原文地址:https://blog.csdn.net/ye_yumo/article/details/142763928

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!