51

.h ファイル内に次のコードがありますが、代入ステートメントが何を行い、どのように適切に呼び出されるのかわかりません。

virtual void yield() = 0;

この関数はデフォルトで値 0 を返すと思っていましたが、この関数は void を返すため、少し混乱しています。誰かがこれについてコメントして、この割り当てをどのように参照できるかを言うことができますか?つまり、C++ 専門用語でどのように呼び出されるのでしょうか?

ありがとう。

4

4 に答える 4

43

これは純粋仮想関数です。これは、サブクラスがこの関数を実装する必要があることを意味します。そうしないと、サブクラスは抽象的になり、そのクラスのオブジェクトを作成できなくなります。

class ISomeInterface {
public:
    virtual std::string ToString( ) = 0;
}

class SomeInterfaceImpl : public ISomeInterface {
public:
    virtual std::string ToString( ) {
        return "SomeInterfaceImpl";
    }
}

クラスは特定のメソッドを公開できますが、サブクラスはそれを実装する必要があります。この例では、 はメソッドをISomeInterface公開しToStringますが、そのための実用的なデフォルトの実装がないため、メソッドを純粋仮想化します。のようなサブクラスSomeInterfaceImplは、適切な実装を提供できます。

于 2010-03-26T12:34:27.633 に答える
18

= 0構文は純粋な仮想関数を宣言します戻り値とは関係ありません。

クラスに少なくとも 1 つの純粋仮想関数が含まれている場合、そのクラスは「抽象的」になり、インスタンス化できないことを意味します。

実際には、そのようなクラスは、仮想関数をサブクラス化して実装することによって具体化する必要があります。

于 2010-03-26T12:35:01.843 に答える
3

純粋な仮想メソッド (別名抽象) の場合は、こちらを参照するか、Google http://www.artima.com/cppsource/pure_virtual.htmlを参照してください。

= 0 はデフォルトの戻り値を意味するのではなく、関数が純粋仮想であることの通知です

于 2010-03-26T12:35:00.033 に答える
0

構文はわかりにくいですが、「=0」はメソッドが純粋な仮想関数であることを示しています。クラスを抽象化し(インスタンス化することはできません)、その実装は派生クラスに任されています。

これは、定義したいのがインターフェースだけの場合に使用されます。インターフェイスを定義し、デフォルトの実装も提供する場合は、virtual キーワードを使用します。

于 2010-03-26T12:44:21.483 に答える