私はC++を学習しているJavaプログラマーですが、C ++にJavaインターフェイスのようなもの、つまり、別のクラスが複数のクラスを実装/拡張できるクラスがあるかどうか疑問に思っていました。ありがとう。psここで新しいので、何か間違ったことをしたかどうか教えてください。
24669 次
2 に答える
32
C++ では、純粋仮想メソッドのみを含むクラスはインターフェイスを示します。
例:
// Define the Serializable interface.
class Serializable {
// virtual destructor is required if the object may
// be deleted through a pointer to Serializable
virtual ~Serializable() {}
virtual std::string serialize() const = 0;
};
// Implements the Serializable interface
class MyClass : public MyBaseClass, public virtual Serializable {
virtual std::string serialize() const {
// Implementation goes here.
}
};
于 2012-08-14T04:58:16.323 に答える
-5
Java をエミュレートするinterface
には、純粋な仮想関数のみを持つ通常のベースを使用できます。
仮想継承を使用する必要があります。そうしないと、継承が繰り返される可能性があります。C++ では、同じクラスが複数回基底クラスになる可能性があります。これは、この場合、この基本クラスへのアクセスがあいまいになることを意味します。
C++ はJava とまったく同等のものを提供しませんinterface
。C++ では、仮想関数のオーバーライドは、仮想関数宣言を持つクラスの派生クラスでのみ実行できますが、Java では、メソッドのオーバーライドはinterface
で宣言できます。基本クラス。
[例:
struct B1 {
void foo ();
};
struct B2 {
virtual void foo () = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
も関数宣言を継承します: B1::foo()
and B2::foo()
.
B2::foo()
純粋な仮想D::B2::foo()
です。の派生クラスではないため、B1::foo()
オーバーライドしません。B2::foo()
B2
B1
したがって、D
抽象クラスです。
--終わりの例]
とにかく、なぜ Java の任意の制限を C++ でエミュレートするのでしょうか?
編集:明確にするために例を追加しました。
于 2012-08-14T06:06:30.187 に答える