• 虚函数


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

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

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

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

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

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

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

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

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

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

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

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

    5.虚继承的作用

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

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

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

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

    ②接口重用。

  • 相关阅读:
    如何实现数据库实体生成工具
    linux samba 与 Windows 共享文件
    CUnit 的使用
    Xml Document与 xml反序列化
    c语言多文件链接
    c 递归获取文件与目录
    gdb输入输出重定向
    C 链表实现
    Log4net多程序集使用独立的配置文件
    Sqlite 学习 编译sqlite静态库,供其他项目调用
  • 原文地址:https://www.cnblogs.com/SnailProgramer/p/4496411.html
Copyright © 2020-2023  润新知