龙空技术网

Python源代码学习:C语言编写的面向对象代码

小庄读书 212

前言:

眼前大家对“面向对象的c语言”都比较重视,姐妹们都想要分析一些“面向对象的c语言”的相关资讯。那么小编同时在网上汇集了一些对于“面向对象的c语言””的相关内容,希望同学们能喜欢,兄弟们快快来学习一下吧!

记得很久很久以前,看过一本书叫做《深入探索C++对象模型》,至今还记得书中对于C++对象内存布局的描述,简单清晰,让人受益匪浅。下图,是书中对于有虚函数的单一继承的内存布局的图形描述。

不过,当时看这本书的时候,只能看着书中用文字或是图例描述的内存布局情况,而无法看到真正的代码,总有些“隔靴搔痒”的感觉……

最近在学习Python解释器的源代码,发现Python对于内置的数据类型,基本是用C语言实现了一套面向对象的类继承结构。

Python所有内置类型的“基类”是PyObject,其中只定义了两个成员,一个用于引用计数,一个是指向PyTypeObject类型的指针——类似于C++中基类的虚函数表指针。

PyTypeObject结构体则相当于“虚函数表”,在PyTypeObject的定义中,除了很少几个记录基本信息的基本类型变量,其它都是各种不同类型的函数指针。

Python在内部预先为每一种数据类型都定义了一个PyTypeObject类型的变量(PyTuple_Type, PyList_Type, PyFloat_Type,...),并为不同数据类型实现了各自类型对应的接口功能——类似于C++的派生类重定义了基类的虚函数。

Python在新生成一个对象(如PyTupleObject)的时候,会使用预先定义好的相应类型的PyTypeObject变量(PyTuple_Type)的地址,给该对象的“虚函数表”指针赋值。

因为,每个类型的对象都“继承”自PyObject,所以每个对象的指针都可以转换为PyObject类型的指针,也就可以通过PyObject类型的指针指向派生类型的对象,通过PyObject类型的指针调用“派生类”类型实现的虚函数,也就是实现了C++的多态机制……

标签: #面向对象的c语言 #面向对象程序设计c语言描述 #算法与数据结构c语言描述源代码