怎样用C语言实现C++中的class和virtual方法?

解决方案 »

  1.   

    使用struct关键字。定义一个结构体,结构体成员中定义一个指针。使这个指针指向一个函数。这样就模拟了一个class
      

  2.   

    原理很简单,实现比较麻烦:
    虚函数就是在数据区前面放上虚函数指针(微软实现方式,GCC是地址)
    例如:
    class base
    {
    ...
    virtual Fun();
    };
    class a:base
    {
      int a,b,c;
      virtual Fun();
    }
    class b:base
    {
      int d,e,f;
      virtual Fun();
    }在内存中是这样的(仅为示意)
    a:
    pFunA;a;b;c;b:
    pFunB;d;e;f;所以,你用结构体也很容易摹仿这个。调用过程:
    编译器在调用虚函数时,先到相应对象的数据区取回虚函数的实际地址,然后再调用。
    麻烦就在这步,这是编译器实现的调用,这样语调用普通函数源码形式上是一样的,而你自己实现,形式就不一样了。