C++ 是C++;完全面向对象语言?

C++ 是C++;完全面向对象语言?,c++,oop,C++,Oop,我读到了《闲聊》完全面向对象的故事。。C++也是完全面向对象的吗?如果没有。。那么为什么呢???定义OOL。如果您使用类等,那么C++支持OO编程风格。没有什么能阻止你不使用类。JavaOtoh,不允许但是类。(是的,我知道Java支持FP。)C++包含一个“C”方言作为子集,允许纯过程式的代码 不,不是。您可以编写一个有效的、编码良好的、优秀的C++程序,而不必使用一次对象。 C++支持面向对象编程,但OO不是语言的固有特性。事实上,主函数不是对象的成员 在smalltalk或Java中,如果

我读到了《闲聊》完全面向对象的故事。。C++也是完全面向对象的吗?如果没有。。那么为什么呢???

定义OOL。如果您使用类等,那么C++支持OO编程风格。没有什么能阻止你不使用类。JavaOtoh,不允许但是类。(是的,我知道Java支持FP。)

C++包含一个“C”方言作为子集,允许纯过程式的代码

不,不是。您可以编写一个有效的、编码良好的、优秀的C++程序,而不必使用一次对象。 C++支持面向对象编程,但OO不是语言的固有特性。事实上,主函数不是对象的成员

在smalltalk或Java中,如果没有至少一个类,就不能系鞋带(或写“Hello,world”)


(当然,也可以说java是完全面向对象的语言),因为它的原语(例如,int)不是对象。

C++不是纯面向对象的语言,正如前面提到的,没有什么可以强迫你在C++中使用OOP概念。C++是一种混合对象语言,它是基于C语言,它纯粹是一种程序语言。
纯面向对象语言的例子有C#和JAVA。

不,它不是纯面向对象语言。特别是C++中的原始数据类型具有不同于原始数据类型的规则。此外,还可以具有完全不与任何数据类型关联的函数。有很多其他的方式,C++不是纯面向对象的语言,但这是两个最大的原因。
C语言和C语言都不是纯面向对象语言,因为它们有原始数据类型,它们不遵循与“对象”数据类型相同的语义。

< P>简短的答案是:没有-C++不是完全面向对象的语言。 您可以使用C++编写“不完全”OOP,甚至不必使用C子集。一个这样的例子是main方法,它不包含在任何类中


主要原因是C++起源于C—当Stroustrup创建语言时,他打算创建C(带有类)的新版本。事实上,他试图把他的创作作为C(C84)的新味道。

< P>人们反对把C++声明为“纯”OO的大争论是,它仍然需要至少一个非OO位,()(代码)>,并不是所有的事物都是对象(<代码> INT/COD>,<代码>长等)。 它还公开对象的状态以进行操作,而不使用消息传递范式(公共成员)。这打破了对象的封装

另一方面,Java将
main()
作为一个类的静态方法,因此它更接近类,但它仍然包含非对象的内容

Smalltalk是一种通用语,通常被认为是最纯正的,但我对它的了解还不够,无法发表评论

对我来说,当我开始开发代码并向客户交付时,我倾向于将这些论点留给知识界:-)

当然不是!! 它支持内部数据类型。

C++只不过是“带类的C”。我仍然可以编写一个C程序并将其保存为.cpp文件。
因此,隐含的证明表明“C++不是纯面向对象语言”。

< P> C++之所以不是OOP语言,主要是因为它缺少封装概念。您无法定义对象的接口/契约,因为指针可以让您完全控制所有内容

完全面向对象的闲聊
,你从哪里读到的?只是好奇。“完全”是什么意思?它们都不是原始数据类型,它们的语义与用户定义的数据类型不同。它们的操作不是根据传递消息来定义的,也不能在派生类中重载或重新定义。不,Omni说C#和Java都不是纯OO,因为它们都有int和long等非对象的东西。实际上不需要main。它只是一个众所周知的入口点,所以命令行和(某些)GUI在加载后没有将控制传递到哪里。这对我来说是新鲜事。你有Java中FP的例子吗?一个简单的搜索就可以得到很多文章。其中之一是德克。我想你可能是说Java支持过程编程?Ne?如果不支持高阶函数,Java中的任何“函数式”代码都将非常复杂。很有可能模仿它,但这样的努力只能被视为一种智力活动,在现实世界中几乎没有应用,甚至没有应用。它甚至有一些实用工具使它成为一种通用编程语言,例如模板。但是我已经看过很多把C++作为面向对象语言的校本教材。问题是当作者这样做时,读者(主要是学生)很容易忘记C++也适合于许多类型的编程语言。C++已经不仅仅是“C类”很长时间了: