0

クラスがあるとします

class Abstract {
    Abstract( void );
    virtual ~Abstract( void ) = 0;

    virtual void VirtualFunction( void ) = 0;

    static void CallsVirtual( void ) {
        VirtualFunction();
    }
};
class Concrete : public Abstract {
    Concrete( void ) {}
    ~Concrete( void ){}
    virtual void VirtualFunction( void ) {/* Do virtual function-y stuff */}
};

int main( void ) {
    Concrete _concrete;
    Abstract& _abstractReference = _concrete;

    _abstractReference.callsvirtual();
}

派生クラスへの基本クラス ポインターを介して基本クラスの静的メンバー関数が呼び出されるときに呼び出される仮想メンバー関数はどれですか?

4

2 に答える 2

4

ない。コンパイル エラーが発生します。非メソッドを呼び出したり、メソッドから非メンバーにstaticアクセスしたりすることはできません。staticstatic

//...
virtual void VirtualFunction( void ) = 0;

static void CallsVirtual( void ) {
    VirtualFunction();   // Nope!
}
//...
于 2012-08-28T15:59:35.393 に答える
0

非静的メンバー関数は、thisポインターを使用して呼び出されます。ポインターは、this各メンバー関数に暗黙的に渡されます。
ただし、staticメンバー関数の場合、thisポインターはまったく渡されないため、静的メンバー関数を介して非静的メンバー関数を呼び出すことはできません。

于 2012-08-28T16:02:52.863 に答える