zoukankan      html  css  js  c++  java
  • C实现C++的多态性,呵呵......

    有以下两个C++类:

    class Base {
    public:
       Base(int a, int b) : m_a(a), m_b(b) {}
       virtual void Func1();
       virtual int Func2();
    private:
       int m_a, m_b;
    }
    
    class Derived : public Base {
    public:
       Derived(int a, int b, double d) : Base(a, b), m_d(d) {}
       virtual int Func2();
    private:
       double m_d;
    }

    模拟通常C++编译器的实现机制,用C语言给出Base、Derived的定义,并实现两个类的创建代码:

    typedef void** VtblPtr; 
    struct base_t
    {
       VtblPtr _vtbl;
       int m_a;
       int m_b;
    };
    
    struct derived_t
    {
       VtblPtr _vtbl;
       int m_a;
       int m_b;
       double m_d;
    };
    
    //new Base时
    base_t * pBase = malloc( sizeof(base_t) );
    pBase -> _vtbl[0] = & _base_t_Func1;
    pBase -> _vtbl[1] = & _base_t_Func2;
    _base_t_Base( pBase, a, b ); 
    
    //new Derived时
    derived_t * pDerived = malloc(sizeof(derived_t) );
    pDerived -> _vtbl[0] = &_base_t_Func1;
    pDerived -> _vtbl[1] = &_derived_t_Func2;
    
    //derived_t的构造函数
    void _derived_t_Derived( derived_t*pDerived, int a, int d)
    {
       _base_t_Base( (base_t*)pDerived, a, b);
       pDerived -> m_d = d;
    }
  • 相关阅读:
    【TouchGFX Designer】文本视图
    【TouchGFX Designer】配置视图
    【C++】类大小
    【TouchGFX】Widgets and Containers
    【TouchGFX】屏幕概念
    【TouchGFX】代码结构
    【C++】虚函数
    【TouchGFX】UI Components
    【C++】模板
    【C++】static 静态成员
  • 原文地址:https://www.cnblogs.com/geekpaul/p/4216904.html
Copyright © 2011-2022 走看看