以下のプログラムは、明らかな理由でコンパイルされません。
#include <iostream>
using namespace std;
class A {
public:
A() { pVirt(); }
virtual void pVirt() const = 0 { count<<"A::pVirt()"; }
};
int main() {
A aObj;
aObj.pVirt();
reutrn 0;
}
質問: 1. シグネチャの「virtual void pVirt() const = 0」の 0 は何を意味しますか?、これは vtable の NULL メモリ オフセットを示していますか、それとも単に構文上の制約を示していますか?
- 0 が NULL メモリ オフセットである場合 (そうである場合)、なぜ VC++ が別のメモリ アドレスを指定することを許可しないのか、これが外部コンストラクターから純粋仮想関数を呼び出すことができない理由です (vtable がオブジェクトが完全に構築された後に作成されます。)?