zoukankan      html  css  js  c++  java
  • 虚函数

    1.析构函数为什么是虚拟的?

    创建一个子类对象时,会先调用基类构造函数,再调用子类构造函数。

    而撤销一个基类时,如果基类的析构函数为虚拟函数,则会先调用子类的析构函数,再调用基类的析构函数。

    而如果基类的析构函数不是虚函数,撤销基类时,则只会调用基类的析构函数,而不会释放子类占据的内存,造成内存泄露。

    2.是否可以把每个函数都声明为虚函数?

    虚函数是由代价的,每个虚函数对象都要维护一个虚表,会产生系统开销。

    3.构造函数可以是虚函数吗,为什么?

    不能。虚函数允许调用一个只知道接口而不知道具体类型的函数,但创建对象时必须知道对象的准确类型。

    4.虚函数是怎么实现的?纯虚函数是怎样实现的?

    当一个包含虚函数的对象被创建时,会在头部附加一个指针,指向虚函数表,这个虚函数表保存了对象所有虚函数的入口地址。

    调用虚函数时,会根据虚函数表找到入口地址。

    纯虚函数相当于一个占位符,现在虚函数表中占据一个位置,当派生类实现后再把真正的函数指针填进去。

    5.虚继承的作用

    虚继承用于解决多重继承所造成的菱形结构。

    6.什么是多态,多态的作用

    多态是对于不同对象接收相同消息时产生的不同动作。可以概括为一个接口,多种方法,允许子类类型的指针赋给父类类型的指针。

    ①隐藏实现细节,是代码能模块化,扩展代码模块,实现代码重用。

    ②接口重用。

  • 相关阅读:
    Egg.js 介绍以及环境搭建
    Redis在Nodejs中的使用
    Android8以上 显示通知栏简单实现
    Android 跳转到系统通知管理页面
    Android APP打开另一个APP的几种实现总结
    Python 库大全 --收集
    python读取Excel数据保存到mongoDB中
    python读取mongoDb数据库保存到Excel中
    Python中的Matplotlib绘图
    数据分析案例:统计电影分类的情况
  • 原文地址:https://www.cnblogs.com/SnailProgramer/p/4496411.html
Copyright © 2011-2022 走看看