重複の可能性:
C++でインターフェースをシミュレートするための好ましい方法
C ++にインターフェースがあるかどうかを知りたいと思いました。なぜなら、Javaには、インターフェースを介してクラスを分離することを主な目的としたデザインパターンの実装があるからです。それでは、C ++でインターフェースを作成する同様の方法はありますか?
重複の可能性:
C++でインターフェースをシミュレートするための好ましい方法
C ++にインターフェースがあるかどうかを知りたいと思いました。なぜなら、Javaには、インターフェースを介してクラスを分離することを主な目的としたデザインパターンの実装があるからです。それでは、C ++でインターフェースを作成する同様の方法はありますか?
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;
}
「インターフェイス」は、C++の純粋な抽象クラスに相当します。理想的には、このインターフェースには 純粋なメソッドとデータメンバーclass
のみが含まれている必要があります。例えば:virtual
public
static const
struct MyInterface
{
static const int X = 10;
virtual void Foo() = 0;
virtual int Get() const = 0;
virtual inline ~MyInterface() = 0;
};
MyInterface::~MyInterface () {}
C ++にはインターフェースの概念はありません。抽象クラス
を使用して、動作をシミュレートできます。
抽象クラスは、少なくとも1つの純粋仮想関数を持つクラスです。抽象クラスのインスタンスを作成することはできませんが、そのポインターと参照を作成することはできます。また、抽象クラスから継承する各クラスは、インスタンスを作成できるようにするために、純粋仮想関数を実装する必要があります。