6

このサイトの他の場所で同様の質問を見つけることができませんが、2 つの異なるファイルでクラスを宣言することは可能ですか。

たとえば、ファイル内のすべてのパブリック クラス コンポーネントと、別のファイル内のプライベートおよびその他のコンポーネントです。

publics.h

    class test {
     public:
        int geta();
        void seta(int); 
    };

privates.h

    class test {
     private:
        int a;
    };

上記の方法は間違いなく間違っていますが、そのような方法はありますか。

4

3 に答える 3

8

かなり似たものを取得する方法があります:プライベート継承です。

// private.hpp
class test_details {
  protected:
    int a;
};

// public.hpp

#include "private.hpp"

class test : private test_details {
  public:
    int geta() const { return a; }
    void seta(int i) { a = i; }
};

public クラスを使用するすべてのモジュールにプライベート ヘッダーを (間接的に) 含める必要があることに注意してください。

于 2012-07-03T09:49:37.117 に答える
6

そうではありませんが、pimplイディオム(または不透明なポインター、またはChesshire cat)は、同様の機能を実現するのに役立ちます。すべての実装の詳細が実装メンバーに隠されているパブリックインターフェイスを提供できます。

C++は部分クラスをサポートしていません。

また、宣言ではなく、クラス定義があることに注意してください。C ++では、クラスの複数の定義が使用可能な場合、それらは同一である必要があります。そうでない場合、未定義の動作になります。

于 2012-07-03T09:43:35.243 に答える
1

これは、抽象基本クラスの良いユースケースです

 //File test.h
 class test {
     public:
        virtual ~test() {}
        virtual int geta()=0;
        virtual void seta(int)=0; 
    };

 //File test_impl.h
 class test_impl : public test {
     public:
        int geta() { return a; }
        void seta(int a ) { a = v; }
     private:
        int a;
    };
于 2012-07-03T09:45:59.363 に答える