可能性の重複:
How do you declare an interface in C++?
Interface as in java in c++?C++のJavaインターフェイスに相当しますか?
私はC++を学ぶJavaプログラマだと、C++でのJavaインターフェースのようなものがある場合、私は思っていた、他のクラスすなわちクラス2つ以上の実装/拡張が可能です。おかげさまで p.s.ここに新しい私が何か悪いことをすれば教えてください。
可能性の重複:
How do you declare an interface in C++?
Interface as in java in c++?C++のJavaインターフェイスに相当しますか?
私はC++を学ぶJavaプログラマだと、C++でのJavaインターフェースのようなものがある場合、私は思っていた、他のクラスすなわちクラス2つ以上の実装/拡張が可能です。おかげさまで p.s.ここに新しい私が何か悪いことをすれば教えてください。
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.
}
};
Javaインターフェイスの実装をエミュレートするには、**仮想継承**が必要です。 FTFY。 –
@ Cheersandhth.-Alfそうです。修正していただきありがとうございます。 – StackedCrooked
-1、* interface *ではなく、* abstract class *です。 * interface *を介してオブジェクトを所有することはできません。つまり、* interface *はパブリックデストラクタを持つことができません。 (それが 'IDestructible' *インターフェース*でない限り)。 – Abyx
のJava interface
をエミュレートするために、あなただけの純粋仮想関数で通常のベースを使用することができます。
仮想継承を使用する必要がある場合は、継承継承を得ることができます。同じクラスは、C++で複数回基本クラスにすることができます。これは、この場合、この基本クラスのアクセスがあいまいであることを意味します。ジャワ、方法overriderにおいて、一方のみ仮想関数宣言を持つクラスの派生クラスで行うことができる仮想関数をオーバーライドする、C++で:
C++はないは、Java interface
の正確な等価物を提供しinterface
では、基本クラスで宣言できます。
[例:
struct B1 {
void foo();
};
struct B2 {
virtual void foo() = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
継承すぎ関数宣言:B1::foo()
とB2::foo()
。
B2::foo()
は純粋な仮想なので、D::B2::foo()
もそうです。 B1::foo()
はB2
がB1
の派生クラスではないため、B2::foo()
をオーバーライドしません。
したがって、D
は抽象クラスです。
--end例]
とにかく、は、なぜあなたはC++でのJavaの任意の限界をエミュレートするのでしょうか?
EDIT:説明のために追加しました。
C++は完全な[多重継承](http://en.wikipedia.org/wiki/Multiple_inheritance)をサポートしているので、Javaのようなクラスとインタフェースの区別はありません。すべての純粋仮想メソッドを持つクラスを作成すると、それはJavaインターフェイスと同等です。 – DaoWen
純粋な仮想メンバ関数のみを持つ抽象クラス。 – oldrinb
VC++の '__interface'キーワードについても検討してください。 MSDNを確認してください。 – MasterMastic