由于明显的原因,下面的程序无法编译:
#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 是在对象完全构造后创建。)?