0

私が理解しているように、純粋仮想メソッドが子クラスに実装されない可能性がある条件がありますが、ビルドエラーが発生することなく子クラスを呼び出すことができます。

これをシミュレートすることはできませんでした。誰かがこれを実現する方法について洞察を持っていますか? いろいろ検索しましたが、ヒットしませんでした。

4

1 に答える 1

6

これは、基本クラスのコンストラクターで仮想関数が呼び出されたときに発生します。

#include <iostream>

class Base
{
public:
    Base() { g();} 
    virtual ~Base() {}

    void g() { f(); }
    virtual void f() = 0;
};

class Derived : public Base
{
public:
    Derived() : Base() {}
    ~Derived() {}

    void f() { std::cout << "Derived f()" << std::endl; }
};

int main()
{
    Derived d; // here we have the call to the pure virtual function

    return 0;
}

編集:

主な問題は、Derivedオブジェクトが構築されると、オブジェクトが として開始されBase、次にBase::Baseコンストラクターが実行されることです。オブジェクトはまだ であるためBasef()(経由でg()) への呼び出しは を呼び出しBase::f、 を呼び出しませんDerived::f。コンストラクターが完了するBase::Baseと、オブジェクトは になりDerivedDerived::Derivedコンストラクターが実行されます。

于 2013-10-15T11:54:07.553 に答える