Is C++ an Object Oriented language?

Dav*_*lin 30 c++ oop

我一直听说C++不是面向对象而是"C with Classes".所以,当我向面试官提到C++并不是真正的面向对象时,他问我为什么不认为它是一种OO语言.自从大学以来我没有做过任何C++,而且我没有太多答案.C++是否面向对象?为什么?

Dre*_*all 74

C++通常被认为是一种"多范式"语言.也就是说,您可以将它用于面向对象,程序甚至函数式编程.

那些否认C++是OO的人通常会对原始类型本身不是对象的事实感到满意.按照这个标准,Java也不会被认为是OO.

毫无疑问,C++不像Smalltalk,Ruby,Self等那样具有OO,但它绝对是大多数标准的有效OO语言.

  • 原始类型通常被标准称为对象,而令人惊讶的东西如`typedef int INT; 5 .INT :: ~INT();`工作得很好.(在句点之前必须有一个空格,因此它不是小数,并且为了语法起见,你必须间接地命名类型`int`.)语言被定义为表现为为本机类型定义`operator`函数,为了查找如何处理表达式.语法有点不均匀,但不如"他们"会让你相信,原始对象的成员函数无论如何都被高估了. (19认同)

tux*_*21b 26

C++是一种支持的多范式编程语言

编程风格.您可以自由选择(并混合使用)以满足项目需求.


Jac*_*cob 19

C++是一种面向对象的语言.问题是某些语言狂热者有自己的,有时相互矛盾的OOP定义.例如,一些Java人员说C++不是OOP语言,因为您可以在类之外定义函数.

只是忽略它们.

  • @hansenj - 你能否通过提供可靠的参考来增加评论的权重a)从发明术语OOP的那些人那里定义OOP b)展示C++如何不符合这个定义. (4认同)

pax*_*blo 16

呸! 那些说C++不是面向对象的人就是那些说Spam不是食物的人:-)

OO"宗教疯狂"人群会说,如果绝对一切都是对象,你只能拥有真正的OO语言.没关系,他们可以坐在象牙塔里,相信他们想要的东西.我们中的一些人有实际的工作要做.

如果你使用对象思维模式,C++(如果你在结构中使用各种函数指针的技巧,甚至是C语言)就足以被认为是面向对象的.

  • @hasen,Python和Ruby都不是天生的象牙塔.使用Python或Ruby同时坚持认为C++不能成为OO的人正在将它们视为象牙塔. (4认同)
  • @hasen j:http://www.webtoolkit.eu/无论如何,你似乎错过了这一点.从什么时候开始"生成web2.0应用程序的能力"是否是某种OOP语言的相关要求?提到象牙塔是关于那些坚持语言不能是OOP的人,除非一切都是对象.它与Python是否是一门不错的语言无关,而与制作web2.0应用程序的简易性无关. (4认同)
  • Python和Ruby确实很棒,但其他语言的优点与C++是否为OO无关. (3认同)
  • 好吧,垃圾邮件显然不是食物。它是一种食品型产品。虽然这对 C++ 没有任何说明...... (2认同)

Nem*_*vic 12

咩.每个人都有自己的OOP定义.发明OOP一词的Alan Kay说:http://www.noulakaz.net/weblog/2007/02/12/true-meaning-of-oop/

OOP对我来说意味着只有消息传递,本地保留和保护以及隐藏状态进程,以及所有事物的极端后期绑定.它可以在Smalltalk和LISP中完成.可能还有其他可能的系统,但我不知道它们.

根据该定义,即使Java,C#,Python等也不是OO语言.

恕我直言,这些讨论毫无意义.


duf*_*ymo 8

面向对象的标志是抽象,封装,多态和继承.

我会说C++展示了所有这四个,所以它有资格作为面向对象的语言.

将C++写成"更好的C"并使用纯粹的程序风格是可能的.对象不是强制要求的.也许这就是你的想法.

  • 这只是OO的一个定义(实际上将OO与更一般的模块化/ ADT抽象和封装原则相混淆).与OO编程的另一种观点(Smalltalk,任何人?)交谈,你会发现面向对象的核心标志是在对象之间传递消息.很难确定OO的一个定义. (3认同)

Mar*_*ork 6

C++是一种OO语言.
但这并不是C++可以使用的唯一编码方式.n因此,C++在技术上是一种多范式语言,其中OO只是一种范式.

术语"C with classes"有几个含义.

  • 它可以指C++是OO的事实(因为类赋予它OO功能).
  • 它可以参考"cfront"的原始版本
    • 这基本上是C与类的扩展和其他很少.
  • 它可以引用(代价)一种不利用C++的全部功能但仅使用该语言的一小部分的编程风格.


Max*_*ert 6

这个想法是C++ 不仅仅是一种面向对象的语言.


小智 5

C++是面向对象的,因为类提供了抽象和继承以及所有爵士乐.它并不总是考虑面向对象,因为代码并不需要是面向对象的.这就像说Scheme没有功能,因为它已经设置!