struct st_manager_object; / *转发声明* / #define雇员_FIELS \ unsigned薪水; \ struct st_manager_object * boss;方法火灾,转移,能力; struct st_employee_object {employee_fields}; struct st_manager_object {employee_fields unsigned num_subordinates; struct st_employee_object **从属;方法delogge_task,send_to_conference; };
如果obj是一个经理对象,您仍然可以像员工一样处理,并调用员工方法。这似乎是奇怪的或创作的,但是该技术被广泛使用。C标准包含保证结构ST_Manager_Object和StructSt_employEe_Object的公共字段将在内存中相同地布置,特别是使此面向对象类技术可以工作。代码X窗口系统具有这种结构。 Theathena Widget Toolkit的代码具有此结构。 Linuxkernel文件系统的代码具有此结构。 Rob Pike是计划9的主要架构师之一操作系统(UNIX的贝尔实验室后继者)和UNIX编程环境的共同作者(带Brian Kernighan),推荐他的文章" Notes在C& #34;