zoukankan      html  css  js  c++  java
  • 虚函数的工作原理

    c++规定了虚函数的行为,但将实现方法留给了编译器作者。通常,编译器处理虚函数的方法是:

    给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表。

    虚函数表中存储了为类对象进行声明的虚函数的地址。例如,基类对象包含一个指针,该指针指向基类中的所有虚函数的地址表。

    派生类对象将包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果

    派生类没有重新定义虚函数,该vtbl将保存虚函原始版本的地址。如果派生类定义了新的虚函数,则该函数的地址也将被添加到vtpl中。

    注意:无论类中包含的虚函数是1个还是10个,都只需要在对象中添加一个地址成员,只是表的大小不同而已。

    class Scientist{
    
      ...
      char name[40];
    public:
      virtual void show_name();
      virtual void show_all();
      ...        
        
    };
    class Physicist:public Scientist{
    
      ...
     char field[40];
     public:
     void show_all();  //重定义
     virtual void show_field(); //声明新的虚函数
     ...  
    
    };
    

      

  • 相关阅读:
    url路由配置及渲染方式
    django类视图介绍与类视图装饰器
    什么是数据类型
    python代码的编写和运行
    python环境搭建
    python教程(目录)
    编程语言概念
    面向对象入门
    编程语言
    Tornado框架实现图形验证码功能
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/4169766.html
Copyright © 2011-2022 走看看