我经常听说C++不是面向对象的,而是“带类的C语言”。所以,当我告诉面试官C++实际上并不是真正的面向对象语言时,他问我为什么不认为它是面向对象的。自从大学以来,我已经没有接触过C++,并且没有很好的答案。那么,C++是面向对象的还是不是?为什么?
我经常听说C++不是面向对象的,而是“带类的C语言”。所以,当我告诉面试官C++实际上并不是真正的面向对象语言时,他问我为什么不认为它是面向对象的。自从大学以来,我已经没有接触过C++,并且没有很好的答案。那么,C++是面向对象的还是不是?为什么?
C++通常被认为是一种“多范式”语言。也就是说,它可以用于面向对象编程、过程式编程,甚至是函数式编程。
那些否认C++是面向对象编程的人通常会对原始类型不是对象本身提出批评。按照这个标准,Java也不会被视为面向对象编程。
当然,C++在面向对象编程方面不像Smalltalk、Ruby、Self等语言那样强大,但是从大多数标准来看,它绝对是一种有效的面向对象语言。
typedef int INT; 5 .INT::~INT();
这样令人惊讶的代码也可以正常工作。(必须在句点前面加一个空格以便将其视为非十进制数字,并且出于语法考虑,您必须间接地命名类型 int
。)该语言被定义为表现得好像 operator
函数已经为原生类型定义好了,以便查找应该如何处理表达式。这种语法有点不统一,但不像“他们”所说的那么糟糕,并且基本对象的成员函数被高估了。 - PotatoswatterC++是一种面向对象的语言。但有些语言狂热者对面向对象的定义存在争议。例如,一些Java人士认为C++不是一种面向对象的语言,因为你可以在类外定义函数。
不必理会他们。
啊!那些说C++不是面向对象的人,和那些说Spam不是食品的人是一样的 :-)
面向对象的“宗教狂热者”会说只有在所有东西都是对象的情况下才能拥有真正的面向对象语言。那没关系,他们可以坐在他们的象牙塔里相信他们想要相信的东西。我们中的一些人有实际工作要做。
只要你使用面向对象的思维方式,C++(甚至是C,如果你在结构体内使用各种技巧与函数指针)就足以被认为是面向对象的。
嗯。每个人对OOP都有自己的定义。发明OOP术语的Alan Kay说:http://www.noulakaz.net/weblog/2007/02/12/true-meaning-of-oop/
对我来说,OOP仅意味着消息传递、局部保留和保护以及隐藏状态过程,以及所有事物的极端后期绑定。这可以在Smalltalk和LISP中完成。可能还有其他系统也能实现,但我不知道。
按照这个定义,即使是Java、C#、Python等语言也不是面向对象的语言。
我个人认为,这些讨论没有意义。
对象导向的特征包括抽象、封装、多态和继承。
我认为C++具有这四个特点,因此它可以被归类为面向对象语言。
当然,也可以将C++看作“更好的C语言”,使用纯过程式编程风格来编写。并不一定要使用对象。或许这就是你的想法。
C++是一种面向对象的语言。
但这并不是C++唯一适用的编码风格。因此,C++技术上是具有多重范式的语言,而面向对象仅是其中一种范式。
术语“带类的C”有几种含义。
这个想法是,C++ 不仅仅是一门面向对象的语言。
C++是面向对象的,因为类提供了抽象和继承等功能。虽然代码不一定需要面向对象,但C++通常被认为是面向对象的语言。这就好比说Scheme不是函数式编程语言,因为它有set!操作。
正如其他人所说,C++不是一种纯面向对象的语言。再说了,我知道的唯一的纯面向对象语言是Smalltalk。我知道的唯一的纯函数式语言是Lambda演算。我不知道任何纯结构化语言(它们都有goto和/或多个返回语句)
大多数人不喜欢使用纯编程语言写作。这会限制他们的风格。