

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

例えば以下の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]


CC BY-SA 3.0
2017-05-31T07:32:36.840
35155
2017-07-05T11:20:20.760
2017-05-31T09:12:16.407
14540
9149
question
ruby c
C言語でオブジェクト指向は可能?


> 例えば以下の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 判定などは割愛の為あえて行っていません。


CC BY-SA 3.0
2017-05-31T09:01:06.097
35158
2017-05-31T09:01:06.097
440
35155
answer


目的の回答にそぐわないものとなりますし、コードを書く事もできません、が  
オブジェクト指向とC言語について説明させてもらいます。  
簡潔にいうと、Cの構造体に似ており、  
Cでは構造体というものを用いてプログラムを書く事が出来ますが、  
オブジェクト指向は言語すべてが構造体でできているようなものです。  
なので、Cで書くとどのようになるか、は他の方と同じようなコードができますし、オブジェクト指向はC言語では関数と構造体を多用すれば実装することが見かけ上可能です。


CC BY-SA 3.0
2017-07-05T11:20:20.760
36114
2017-07-05T11:20:20.760
24238
35155
answer