可能性のある複製:
C++静的仮想メンバー?
仮想静的メソッド(C++)を使用できますか?私は次のコードをコンパイルしようとしました:
#include <iostream>
using namespace std;
class A
{
public:
virtual static void f() {cout << "A's static method" << endl;}
};
class B :public A
{
public:
static void f() {cout << "B's static method" << endl;}
};
int main()
{
/* some code */
return 0;
}
しかし、コンパイラはそれを言う:
member 'f' cannot be declared both virtual and static
だから答えはノーだと思いますが、なぜですか?
おかげで、ロン
いいえ。クラス内の関数のstatic
は、関数が操作対象のオブジェクトを必要としないことを意味します。 virtual
は、実装が呼び出し元オブジェクトのタイプに依存することを意味します。静的には呼び出しオブジェクトがないため、同じ関数でstatic
とvirtual
の両方を使用することは意味がありません。
オブジェクトAがなくてもA::F();
を呼び出すことができるため、これが可能だとは思わないでください。仮想オブジェクトと静的オブジェクトを作成すると矛盾が発生します。
クラスにはthis
ポインターがないためです。仮想関数ルックアップテーブルがあります。簡単なグーグルで、仮想関数ルックアップテーブルの詳細を確認できます。
いいえ、static
関数はグローバル関数に似ていますが、クラスの名前空間内にもあります。 virtual
は、派生クラスでの継承と再実装を意味します-「グローバル」関数を再実装することはできません。