只有通过指针或者引用调用才会是动态绑定, 此处当然在 a=b; 后, 即使通过指向 a 的指针调用也不会是动态绑定的, 这是因为, 在进行对象的赋值操作时, 虚函数表指针 vptr 并不会随着赋给 a,...是否可以做一些邪恶的事情呢 ?手动将 b 的 vptr 赋值给 a 会怎样?
千万不要在实际写代码中这样做!...//我在 g++ 下编译需要将 *(p+1) 改为 *(p+2), 原来的 *(p+2) 改为 *(p+3) 我暂时先不去研究了
//若无法得到预期的结果, 将 Animal 和 Dog 的 protected...同时可以看到, 最后打印了一个奇怪的值, 因为 Dog 类中新增了一个成员变量 tail (可以看到尽管 tail 是private 也并非没有办法去访问甚至修改), 而在基类 Animal 中是不存在的...可以看一下相应的汇编代码
image.png
在 Visual Studio x86 编译下出现的这种情况是可以复现的, g++ 编译却没有出现过.