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;
    }
  • 相关阅读:
    spring-mvc dispatcherServlet
    常用注解
    spring基础
    消息转换
    高级装配
    Leetcode第242题:有效的字母异位词
    Leetcode第76题:最小覆盖子串
    Leetcode633题平方数之和
    Leetcode454题四数之和II
    java从虚拟机执行角度解析案例(转)
  • 原文地址:https://www.cnblogs.com/geekpaul/p/4216904.html
Copyright © 2011-2022 走看看