C言語でオブジェクト指向は可能?


ぱっと調べた感じ構造体という言葉が出てきましたがよくわかりませんでした。

例えば以下のRubyのコードをCで表現するとどうなりますか?

[code]

    class HogeModule
      def hoge 
      end
    end
    
    class HogeClass
      include HogeModule
    
      def initialize(name)
        @name = name
      end
    end
    
    class FugaClass < HogeClass
    
      def initalize(name)
        super
      end
    
      def fuga
        p @name
      end
    
      def self.fuga
        p '@name'
      end
    end
    
    FugaClass.fuga
    
    fuga = FugaClass.new
    fuga.fuga
    
[/code]




> 例えば以下のRubyのコードをCで表現するとどうなりますか?

C言語はそういう言語ではありませんが、敢えてこの質問に答えるとこうなります。

[code]

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
    } HogeModule;
    
    void
    HogeModule_hoge(HogeModule *hm) {
    }
    
    typedef struct {
      const char* name;
      HogeModule *base;
    } HogeClass;
    
    void
    HogeClass_initialize(HogeClass *hc, const char* name) {
      hc->base = malloc(sizeof(HogeModule));
      hc->name = name;
    }
    
    typedef struct {
      HogeClass *base;
    } FugaClass;
    
    void
    FugaClass_initialize(FugaClass *fc) {
      fc->base = malloc(sizeof(HogeClass));
      HogeClass_initialize(fc->base, "");
    }
    
    void
    FugaClass_static_fuga() {
    }
    
    void
    FugaClass_fuga(FugaClass *fc) {
      puts(fc->base->name);
    }
    
    
    int
    main(int argc, char* argv[]) {
      FugaClass fc;
    
      FugaClass_static_fuga();
    
      FugaClass_initialize(&fc);
      FugaClass_fuga(&fc);
      return 0;
    }
    
[/code]

メモリの解放、NULL 判定などは割愛の為あえて行っていません。

