web-dev-qa-db-ja.com

C ++でインターフェイスを実装する方法?

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

Javaには、主にインターフェースを介したクラスの分離を伴う設計パターンの実装があるため、C++にインターフェースがあるかどうかを知りたいと思いました。 C++でインターフェースを作成する同様の方法はありますか?

68
helpdesk

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;
}
105
MD Sayem Ahmed

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

13
Alok Save

インターフェイスは、C++の純粋な抽象クラスに他なりません。理想的には、このinterfaceclassにはpure virtualパブリックメソッドとstatic constデータのみを含める必要があります。例えば:

class InterfaceA
{
public:
  static const int X = 10;

  virtual void Foo() = 0;
  virtual int Get() const = 0;
  virtual inline ~InterfaceA() = 0;
};
InterfaceA::~InterfaceA () {}
12
iammilind