108

重複の可能性:
C++でインターフェースをシミュレートするための好ましい方法

C ++にインターフェースがあるかどうかを知りたいと思いました。なぜなら、Javaには、インターフェースを介してクラスを分離することを主な目的としたデザインパターンの実装があるからです。それでは、C ++でインターフェースを作成する同様の方法はありますか?

4

3 に答える 3

150

C ++には、インターフェースの概念が組み込まれていません。純粋仮想関数のみを含む抽象クラスを使用して実装できます。多重継承が可能であるため、このクラスを継承して別のクラスを作成し、そのクラスにこのインターフェイス(つまり、オブジェクトインターフェイス:))を含めることができます。

例は次のようになります-

class Interface
{
public:
    Interface(){}
    virtual ~Interface(){}
    virtual void method1() = 0;    // "= 0" part makes this method pure virtual, and
                                   // also makes this class abstract.
    virtual void method2() = 0;
};

class Concrete : public Interface
{
private:
    int myMember;

public:
    Concrete(){}
    ~Concrete(){}
    void method1();
    void method2();
};

// Provide implementation for the first method
void Concrete::method1()
{
    // Your implementation
}

// Provide implementation for the second method
void Concrete::method2()
{
    // Your implementation
}

int main(void)
{
    Interface *f = new Concrete();

    f->method1();
    f->method2();

    delete f;

    return 0;
}
于 2012-03-18T08:03:14.253 に答える
17

「インターフェイス」は、C++の純粋な抽象クラスに相当します。理想的には、このインターフェースには 純粋なメソッドとデータメンバーclassのみが含まれている必要があります。例えば:virtual publicstatic const

struct MyInterface
{
  static const int X = 10;

  virtual void Foo() = 0;
  virtual int Get() const = 0;
  virtual inline ~MyInterface() = 0;
};
MyInterface::~MyInterface () {}
于 2012-03-18T08:04:48.383 に答える
16

C ++にはインターフェースの概念はありません。抽象クラス
を使用して、動作をシミュレートできます。 抽象クラスは、少なくとも1つの純粋仮想関数を持つクラスです。抽象クラスのインスタンスを作成することはできませんが、そのポインターと参照を作成することはできます。また、抽象クラスから継承する各クラスは、インスタンスを作成できるようにするために、純粋仮想関数を実装する必要があります。

于 2012-03-18T08:04:09.993 に答える