- C не является объектно-ориентированным в строгом смысле, поскольку он не имеет встроенной синтаксической поддержки объектно-ориентированных возможностей, таких как класс, наследование и т. Д.
Но если вы знаете,хитрость, которую вы можете легко добавить к объектно-ориентированной возможности, просто используя struct, указатель на функцию и указатель на себя.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 ++ отсутствуют некоторые объектно-ориентированные возможности, но я точно не помню каждого из них.