C ++是面向对象的语言吗?

时间:2010-08-17 01:45:43

标签: c++ oop

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

18 个答案:

答案 0 :(得分:74)

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

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

当然,C ++与Smalltalk,Ruby,Self等等的OO不同,但它绝对是大多数标准的有效OO语言。

答案 1 :(得分:26)

C ++是一种支持

的多paradigm编程语言

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

答案 2 :(得分:19)

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

请忽略它们。

答案 3 :(得分:16)

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

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

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

答案 4 :(得分:12)

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

  

OOP对我来说只意味着本地消息   保留,保护和隐藏   国家进程和极端   所有事情的后期约束力。有可能   在Smalltalk和LISP中完成。那里   可能是其他系统   这是可能的,但我不知道   它们。

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

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

答案 5 :(得分:8)

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

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

将C ++编写为“更好的C”并使用纯粹的程序风格。对象不是强制要求的。也许这就是你的想法。

答案 6 :(得分:6)

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

术语“C with classes”有几个含义。

  • 它可以指C ++是OO的事实(因为类赋予它OO功能)。
  • 它可以参考“cfront”的原始版本
    • 哪个基本上是带有类扩展的C而且其他很少。
  • 它可以引用(贬义)一种不利用C ++的全部功能但只使用该语言的一小部分的编程风格。

答案 7 :(得分:6)

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

答案 8 :(得分:5)

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

答案 9 :(得分:4)

正如其他人所说,C ++不是纯粹的OO语言。然后,我所知道的唯一纯OO语言是smalltalk。我所知道的唯一纯函数语言是Lambda微积分。我不知道任何纯结构化语言(它们都有goto和/或多个return语句)

大多数人不喜欢用纯编程语言写作。它惹恼了他们的风格。

答案 10 :(得分:3)

术语“面向对象”太模糊,无法给出明确的是或否答案。我认为你会发现大多数观点是C ++ 一种OO语言,或者至少你可以用C ++中的OO方式编写。如果你想要一个更确定的答案,你将不得不提出一个更好的定义问题,例如:

问:C ++是否具有“对象”(即数据字段+关联的成员函数)数据类型? 答:是的。

问:C ++是否有非对象数据类型? 答:是的。

问:C ++是否有非成员函数?
答:是的。

答案 11 :(得分:2)

如果我是面试官,问你这个问题,我可能不关心是/否答案 - 我真的想知道你对编程,C ++或其他语言的理解。你只是抛弃你没有想到或理解的术语,或者你是否真的仔细考虑你在做什么和说什么。所以在这种情况下,一个好的答案是

“我将面向对象的编码定义为a,b,c和d。我将面向对象的语言定义为支持该定义的语言,即允许我(轻松/统一/严格/其他形容词)开发代码满足这些要求.C ++提供a,b,c,部分基于d。所以我(不)因为这些原因认为C ++是OO。“

就我个人的定义而言,C ++足够面向对象,而且它支持其他方法。

答案 12 :(得分:2)

C ++是面向对象的。 c ++是带有类的c是另一种说c ++加上oop的方法(当然,除了c之外还有更多)。

答案 13 :(得分:2)

Stroustrup,用类设计C,即。 ISO C ++标准的最初实现,在ACM的OOPSLA '95中回答了同样的问题。该论文的软拷贝可在http://www.stroustrup.com/oopsla.pdf获得。

答案 14 :(得分:1)

它确实是面向对象的,但并不严格。

比如说,我们可以只有

int main()
{
 return 1;
}

在面向对象的名称中没有,另一方面,我们可以拥有与面向对象相对应的类,继承,多态等等。

我们有责任释放语言的力量。

对于那个问你问题的面试官来说,从C ++中展示了一个类,并问他是结构化的还是程序化的.. 他会告诉你同样的main()函数我想:)< / p>

所以我想这是基于你所实现的谎言。但它具有可以将其视为OOP的功能。

答案 15 :(得分:1)

C ++不是面向对象的语言。语言不是任何范例。这与Java有所不同,Java是宗教性的面向对象(例如,没有朋友声明)。 C ++提供面向对象,但本质上不是面向对象的。

答案 16 :(得分:1)

C ++部分是OO,因为代码可以在没有类的情况下编写,并且它还有多个继承概念,即一个子代可以有多个父代。

答案 17 :(得分:-3)

面向对象编程(OOP)已成为软件行业的首选编程方法,因为它提供了一种强大的方法来应对现实世界问题的cpmlexity。在当今可用的OOP语言中,c ++是使用最广泛的语言。

这些语言应该支持几个OOP概念,声称它们是面向对象的。根据他们支持的胎儿,他们可以分为两类。

  1. 基于对象的编程语言。

  2. 面向对象的编程语言。

    1. 基于对象的编程语言。 如果它支持

         A. DATA ENCAPSULATION
         B. DATA HIDING AND ACCESS MECHANISAMS
         C. AUTOMATIC INITIALIZATION& CLEAR-UP OF OBJECTS
         D. OPERATOR OVER LOADING
      

      2. 面向对象的编程语言。

      它支持所有基于对象的编程功能以及两个附加功能

        E. INHERITANCE
        F. DYNAMIC BINDING
      
  3. 因此面向对象的编程语言意味着

    **Object-based features+ inheritance+ dynamic binding.**
    

    示例: C ++,SMALLTALK,OBJECT PASCAL,JAVA

    所以, C ++是一种面向对象的编程语言&gt;

    如果您对面向对象编程概念仍有疑问,请参阅E.Balaguruswamy一书。