答案 0 :(得分:1)
忽略“在OOP之前使用C ++”的含义问题,然后使用您正在查看的C语言
void指针 - C语言允许您直接寻址内存,使用指针类型将地址存储在变量中。大多数指针指向已知类型(例如char *
是指向字符的指针)但特殊类型void *
是指向原始内存的指针。许多库隐藏了void指针中的内部结构,有时称为“Handles”。
函数指针 - 与数据指针一样,指针可以保存内存中函数的地址。这允许通过交换变量中的函数来分配不同的行为。
structs - 分组数据的主要机制。结构与函数指针的组合得到了一个基本的“类”形式,尽管没有继承或多态的魔力。通过将数据隐藏在结构中的void *
后面,您将获得一种基本形式的封装。
预处理器 - 通过将一种类型转换为另一种类型或即时解包,可以在预处理器中实现许多魔法。通常使用预处理器宏来访问空指针,这些宏可以安全地解压缩它们。
继承通常不是C编程习惯的一个方面,所以你很少在C程序中遇到它。在我看到类似于它的东西时,它通常通过使用某种void指针hackery来完成,其中struct的第一个字段是指向父节点的void指针,初始化函数用于将函数指针复制到临时v表中。然而,它既麻烦又脆弱,C语言本身并不是为支持面向对象而设计的 - 你可以做到但是管道工作非常明显。
回到'在C ++之前的oop'部分 - 值得记住,在oop之前没有C ++。 OO概念和OO语言已经存在了比C ++更长的 。 C ++甚至不是纯粹的OO语言 - 它是一种支持OO的多范式语言。