C++/C#/Java 中“类”的概念是不是来自 C 中的结构? [复制]

Posted

技术标签:

【中文标题】C++/C#/Java 中“类”的概念是不是来自 C 中的结构? [复制]【英文标题】:Does the idea of 'Class' in C++/C#/Java come from struct in C? [duplicate]C++/C#/Java 中“类”的概念是否来自 C 中的结构? [复制] 【发布时间】:2013-12-22 07:41:59 【问题描述】:

我很久以前就有这个疑问了。点操作符最早用在C中的struct中,到底是Class的思想还是C中基于struct的Class的设计?实际上我非常怀疑它是,只是还没有看到任何关于此的官方文档。

编辑:我要问的是创建类语法(在 C++ 中)的想法是否来自 C 中的结构,而不是为什么 C 不是 OOP 语言!

【问题讨论】:

C 中的 Struct 的功能要少得多。 C 不是 OOP 语言 结构和类共存于 oop 世界 你读过《使用 ANSI-C 进行面向对象编程》一书吗?我要问的是创建 Class 语法的想法是否来自 C 中的 struct,而不是为什么 C 不是 OOP 语言! 【参考方案1】:

没有1

虽然 语法 有点相似,但这只是语法。 “类”和“对象”的概念早于 C 几年2

Simula 是在 60 年代开发的:

Simula 是 1960 年代在奥斯陆的挪威计算中心开发的两种模拟编程语言 Simula I 和 Simula 67 的名称。..

Simula 67 引入了对象、类、继承和子类、虚拟方法、协程、离散事件模拟以及垃圾收集功能。在 Simula 派生中引入了子类型化。

Simula 被认为是第一个面向对象的编程语言。顾名思义,Simula 是为进行模拟而设计的,该领域的需求为当今面向对象语言的许多特性提供了框架..

Simula 的影响通常被低估,Simula 类型的对象在 C++、Java 和 C# 中重新实现。C++ 的创建者 Bjarne Stroustrup 承认 Simula 67 对他开发 C++ ..


1 尽管某些概念可以在 C 中模拟,但这并不意味着 Object-Oriented Programming 源自 C 结构或实现,或者是 C 结构或实现的结果。

2 Simula 67 在 1968 年正式标准化,而 "the most creative period" in C development 直到 1972 年才添加了对结构的支持。 C(“C 编程语言”)事实上的早期标准直到 1978 年才发布。

【讨论】:

当然。完整答案:C 出生于 1972 年。甚至祖先 B 也不早于 1969 年。 @philippelhardy 谢谢。我在答案中添加了更精致的日期。 "C++ got the key notions of classes, derived classes, virtual functions (in other words, the notions of encapsulation, inheritance and polymorphism) from Simula just like Smalltalk did."【参考方案2】:

在 C++(或带有类的 C)的早期版本中,对象直接使用 struct 实现。当您使用cfront 时,您可以看到它。现在可能是,但这取决于实现。至于语法,我相信它来自algol(但我不确定)。

【讨论】:

以上是关于C++/C#/Java 中“类”的概念是不是来自 C 中的结构? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中的反射怎么用c实现

Java8闭包

Java和C + +有什么区别?

java的静态内部类中定义的变量是全局的么?

C 代码中的 Java 数组

试图通过管道将 C 中生成的数据传递给 Java 类。传递变量在java中出现空白而不是有数据