我一直听说C ++不是面向对象而是“C with Classes”。所以,当我向面试官提到C ++并不是真正的面向对象时,他问我为什么不认为它是一种OO语言。自从大学以来我没有做过任何C ++,而且我没有太多答案。 C ++是否面向对象?为什么?
答案 0 :(得分:74)
C ++通常被认为是一种“多范式”语言。也就是说,您可以将它用于面向对象,程序甚至函数式编程。
那些否认C ++是OO的人通常会对原始类型本身不是对象这一事实感到满意。按照这个标准,Java也不会被认为是OO。
当然,C ++与Smalltalk,Ruby,Self等等的OO不同,但它绝对是大多数标准的有效OO语言。
答案 1 :(得分:26)
答案 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”有几个含义。
答案 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概念,声称它们是面向对象的。根据他们支持的胎儿,他们可以分为两类。
基于对象的编程语言。
面向对象的编程语言。
基于对象的编程语言。 如果它支持
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
因此面向对象的编程语言意味着
**Object-based features+ inheritance+ dynamic binding.**
示例: C ++,SMALLTALK,OBJECT PASCAL,JAVA
所以, C ++是一种面向对象的编程语言&gt;
如果您对面向对象编程概念仍有疑问,请参阅E.Balaguruswamy一书。