用C实现C++的多态---剖析GTK的"对象" (一)

原创 2006年06月14日 16:28:00

用C实现C++的多态---剖析GTK的"对象" (一)

一. 前言

            前一段时间用到GTK图形库,对它的C语言实现的面像对象概念很感兴趣,在这里写下自己的一点见解,

同时也是理理自己的思路。

二. C++中的多态

              class A {

                     virtual void output(void) { prinf("this is A/n"); }

                     virtual void func(void);

             };

             class B : public A {

                     void output(void) { printf("this is B/n"); }

             };

             A *a = new B();

             大家知道,这时候调用a->output()会输出"this is B",这就是C++的多态。

             这里首先要明确两个名词,对象实例对象就是A、B,用A或B创建出来的a称之为实例

             那么,实例a为什么会调用对象B的output呢?这是因为一个对象有且只有一个虚函数指针,

             指向这个对象的全部虚函数的入口点。大家可以这样验证一下, 把class A再加一个虚函数test(void):

             class AA{

                     virtual void output(void) { prinf("this is A/n"); }

                     virtual void func(void);

                     virtual void test(void);

             };

             测一下sizeof(A) 和 sizeof(AA)的大小应该是相等的。说明所有的虚函数用同一个指针来指向的。

三. 用C定义基类(基对象)

        typedef struct _CObject  CObject;

        typedef struct _CObjectClass CObjectClass;

        struct _CObject{   /*基类CObject*/

                   CObjectClass *class;  /*同C++中的虚函数指针*/

                   int ref_counter;

         };

         struct _CObjectClass{

                  void (*contruct)(CObject *object);/*虚函数--构造函数*/

                  void (*destory)(CObject *object); /*虚函数--析构函数*/

          };

          现在,CObject对象有两个虚函数,构造函数和析构函数。

(to be continued)

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++对象布局及多态实现

  • 2008-05-12 20:35
  • 34KB
  • 下载

C++ —面向对象之多态的实现与应用

多态 今天我们的主角就是多态了,那么什么多态呢?多态有什么用? 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程...

面向对象多态c++

  • 2013-04-16 07:56
  • 436KB
  • 下载

C++对象布局及多态实现的探索(六)

C++对象布局及多态实现的探索(六) 后记   结合前面的讨论,我们可以看到,只要牵涉到了虚继承,在访问父类的成员变量时生成的代码相当的低效,需要通过很多间接的计算来定位成员变量的...

C++对象布局及多态实现的探索

虚函数的类的对象布局(1)     如果类中存在虚函数时,情况会怎样呢?我们知道当一个类中有虚函数时,编译器会为该类产生一个虚函数表,并在它的每一个对象中插入一个指向该虚函数表的指针,通常这个指...

C++中的多态在C中如何实现

多态的含义约等同于“同一个方法对于不同类型的输入参数均能做出正确的处理过程,并给出人们所期望获得的结果” C++的多态性是C++实现面向对象技术的基础。具体的说,通过一个指向基类的指针调用虚成员...

<C/C++基础> 多态实现机制

1 什么是多态? 多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制 程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。 2 实现机制 举一个例子:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)