【发布时间】:2023-10-25 16:01:01
【问题描述】:
- 大家好:我的问题是使用了哪些技术 C++中的继承、封装和多态性 OOP 的发明。请解释一下,如果有任何链接分享它。
【问题讨论】:
-
“在 OOP 发明之前的 C++ 中”——这不是矛盾吗?
标签: oop inheritance polymorphism encapsulation
【问题讨论】:
标签: oop inheritance polymorphism encapsulation
忽略“在 OOP 之前在 C++ 中”是什么意思的问题,然后使用 C 语言来研究
void 指针 - C 语言允许您直接寻址内存,将地址存储在具有指针类型的变量中。大多数指针指向已知类型(例如,char * 是指向字符的指针),但特殊类型 void * 是指向原始内存的指针。许多库将内部结构隐藏在 void 指针中,有时称为“句柄”。
函数指针 - 与数据指针一样,指针可以在内存中保存函数的地址。这允许通过在变量中交换函数来分配不同的行为。
结构 - 分组数据的主要机制。将结构体与函数指针相结合得到了“类”的基本形式,尽管没有继承或多态的魔力。通过将数据隐藏在结构中的 void * 后面,您可以获得基本形式的封装。
预处理器 - 通过将一种类型转换为另一种类型或即时解包,可以在预处理器中产生许多魔法。空指针通常会使用预处理器宏来访问,这些宏可以安全地解压它们。
继承通常不是 C 编程习惯的一个方面,因此您很少在 C 程序中遇到它。在我见过类似的东西的地方,它通常是通过使用某种 void 指针hackery 来完成的,其中结构的第一个字段是指向父级的 void 指针,初始化函数用于将函数指针复制到临时 v 表中。但是,它既麻烦又脆弱,而且 C 语言并不是真正设计为原生支持面向对象的 - 你可以做到,但管道工作非常明显。
回到“在 oop 之前使用 C++”部分 - 值得记住的是,在 oop 之前没有 C++。 OO 概念和 OO 语言的存在时间比 C++ 长很多。 C++ 甚至不是纯粹的 OO 语言——它是一种支持 OO 的多范式语言。
【讨论】: