我和一位同事谈到了C和C++,他声称C是面向对象的语言,但我认为不是。我知道在C中可以做类似于面向对象的事情,但C++才是真正的面向对象语言。
您对此有什么想法?
此外,这引发了关于谁决定什么是面向对象以及很难说面向对象真正的官方含义的讨论。您对此有何看法?
在几乎任何语言中都可以以面向对象的方式进行编程。(我认为运行时多态性,即虚拟方法,需要支持函数指针的语言。)
以下是一些例子:
C不具备面向对象的特性,这也是++诞生的主要原因。
至于什么是面向对象的定义:请查看维基百科。
就我个人而言,如果支持继承、封装和多态性,那就可以了。另外,关键在于具有类(class)和对象(object)等好的关键字会有助于实现面向对象编程。
实际上,真正的面向对象语言(并非全部)包括:Smalltalk、Java、C#、Python、Ruby、C++等。
此外,也可以通过扩展来提供面向对象功能,如PHP、Perl、VB(非.NET)等。
真正的程序员可以用任何语言编写面向对象的代码。
但是,C并非一种“面向对象”的语言。它没有类、对象、多态性、继承等概念。
如果您问“C语言是否面向对象?”,答案是“否”,因为C没有面向对象的构造函数、关键字、语义等。
如果您想知道“我能在C语言中实现面向对象编程吗?”答案是肯定的,因为面向对象编程不仅是语言要求,还是一种“思考”方式,一种编程方法。然而,在C语言(或任何其他非本来设计用于面向对象编程的语言)中实现面向对象编程肯定会受到限制,将会比其他面向对象编程语言更难以管理和实现。
在任何“面向对象”和“语言”的定义下,C都不是一种面向对象的语言。
使用C作为实现语言来为其客户端提供面向对象的API组件非常容易。从API的角度来看,X Windows系统本质上是一个单继承的面向对象系统,但从其实现的角度来看,却是一整个混乱的C代码。
但是,如果您知道诀窍,您可以通过使用结构体、函数指针和自指针轻松地为其添加面向对象的能力。DirectFB 是一个以面向对象方式编写的 C 库。不好的一点是它更容易出错,因为它不受语法和编译类型检查的约束,而是基于编码约定。
例如:
IDirectFB/*a typedef of a struct*/ *dfb = NULL;
IDirectFBSurface/*another typedef of a struct*/ *primary = NULL;
DirectFBCreate (&dfb); /*factory method to create a struct (e.g. dfb) with
pointers to function and data. This struct is
like an object/instance of a class in a language with build-in
syntax support for object oriented capability */
dfb->SetCooperativeLevel/*function pointer*/
(dfb/*self pointer to the object dfb*/,
DFSCL_FULLSCREEN);
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
dfb->CreateSurface/*function pointer, also a factory method
to create another object/instance */
( dfb/*self pointer to the object dfb*/,
&dsc,
&primary/*another struct work as object of another class created*/ );
primary->GetSize/*function pointer*/
(primary/*self pointer to the object primary*/,
&screen_width,
&screen_height);
2. C++是面向对象的语言,因为它内置了类和继承等面向对象的能力。但是有人认为它不是完全或纯粹的面向对象语言,因为它允许在其中使用C语法(结构化编程语法)。我还记得C++缺少一些面向对象的能力,但不记得每个具体是什么。
C不是面向对象的语言。 C是一种通用的、命令式的语言,支持结构化编程。 因为C不是面向对象的,所以C++应运而生,以便具备面向对象编程特性。面向对象编程是围绕对象组织的一种编程语言模型。 要具备面向对象编程特性,语言需要实现面向对象编程的一些原则。其中一些原则是继承、多态、抽象、封装。
char
数组。你认为C语言缺乏字符串吗? - Tim Robinson