15075


c++で既存のクラスを継承せず、メソッドを追加する方法はありますか？

cocos2d-xでゲームを作っているのですが、Nodeなどの既存クラスにメソッドを追加したいと思っています。  
また、１つの実装ファイルが長くなるのを防ぐために、実装ファイルを複数に分割したいです。

objective-cではカテゴリの機能を使って、それらのことができたのですが、cocos2d-x(c++)で上記のようなことは可能でしょうか。


CC BY-SA 3.0
2015-08-31T04:24:15.730
15068
2015-08-31T10:44:41.883
8825
question
c++ cocos2d-x
c++でのクラス拡張（カテゴリ）


> c++で既存のクラスを継承せず、メソッドを追加する方法はありますか？

残念ながら、ありません。新しいメンバ関数（メソッド）を追加するには、クラスの継承が必要です。

> また、１つの実装ファイルが長くなるのを防ぐために、実装ファイルを複数に分割したいです。

通常の分割コンパイル＆リンクと同様です。あるヘッダファイルで宣言したクラスに対して、関数単位での実装ファイル(cpp)分割が可能です。

[code]

    // foo.h
    class FooClass {
      void memberFunc1();
      void memberFunc2();
    };
    
[/code]

[code]

    // foo_1.cpp
    void FooClass::memberFunc1() {
      /* 実装 */
    }
    
[/code]

[code]

    // foo_2.cpp
    void FooClass::memberFunc2() {
      /* 実装 */
    }
    
[/code]


CC BY-SA 3.0
2015-08-31T09:49:08.743
15075
2015-08-31T09:49:08.743
49
15068
answer


既に回答がついていますが、やや補足してみます。  
ライブラリ内の既存のクラスを継承せず、メソッドを追加することができない理由は、

1.C/C++言語で実装された機能は、コンパイル時に決定されます。  
また、これら(コンパイル結果のバイナリ)を集積してひとかたまりにしたものがライブラリです。

というわけで、できないのですね。

C++言語においては、矛盾さえなければ、実装自体はどこに書いても大丈夫で、制限はありません。  
事実上どのソースファイル(*.cpp)に書いてもOKです。  
あとで行方不明にならないようにそれなりに命名したファイルが良いとはおもいますけど。


CC BY-SA 3.0
2015-08-31T10:44:41.883
15079
2015-08-31T10:44:41.883
3793
15068
answer