Is the C programming language object-oriented?

后端 未结 16 1162
我寻月下人不归
我寻月下人不归 2021-01-30 16:22

I was talking with a co-worker about C and C++ and he claimed that C is object-oriented, but I claimed that it was not. I know that you can do object-oriented-like things in C,

16条回答
  •  隐瞒了意图╮
    2021-01-30 16:58

    1. C is not object oriented in strict sense since it doesn't have a built-in syntax supported object oriented capability like class, inheritance and so on.

    But if you know the trick you can easily add object oriented capability to it simply using struct, function pointer, & self-pointer. DirectFB is such a C library written in an object oriented way. The bad thing it is more error prone since it is not governed by syntax and compile type checking. It is based on coding convention instead.

    e.g.

      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++ is object oriented since it has built-in support for object oriented capability like class and inheritance. But there is argument that it is not a full or pure object oriented language since it does allow C syntax (structural programming syntax) in it. I also remember that C++ lack a few object oriented capabilities but not remember each one exactly.

提交回复
热议问题