0

私は、いくつかのクラスで明確に定義されたインターフェースを持つのが好きです。そのために、各クラスを実装する必要がある抽象クラスで純粋仮想関数を作成しました。
しかし、クラスをインスタンス化できるという問題に直面しているため、インターフェイス クラスを継承する別のクラスを作成する必要があり、他のすべてのクラスはこの基本クラスから継承する必要があります。たとえば、次のコードがあります。

インターフェイス

class Interface
{
     virtual std::string getName() = 0;
}

class Base : public Interface
{
   virtual std::string getName(return std::string("Base") ;)
}

class A : public Base
{
  std::string getName(return std::string("A") ;)

}

class B : public Base
{
  std::string getName(return std::string("B") ;)

}

これはすべて、コードで A と B に同じ型を
使用できるようにするためです。クラスを使用Interfaceせずにクラスを使用できますBaseか?
このようなもの:

class A : public Interface
{
  std::string getName(return std::string("A") ;)

}
4

3 に答える 3

4

インターフェイスをインスタンス化することはできませんが、できることは、実装のインスタンスを指すインターフェイスへのポインターを持つことです。

class Interface { /* pure virtual methods */ };
class A : virtual public Interface { /* implement all pure virtual methods */ };
class B : virtual public Interface { /* implement all pure virtual methods */ };

Interface * i0 = new A();
Interface * i1 = new B();

これは、ポリモーフィック クラスを使用する標準的な方法です (ただし、生のポインターの代わりにスマート ポインターを使用することもできます)。

編集:仮想継承の使用に関しては、詳細についてはこちらこちらを参照してください。

于 2012-07-05T08:21:50.097 に答える