同时可以看到, 最后打印了一个奇怪的值, 因为 Dog 类中新增了一个成员变量 tail (可以看到尽管 tail 是private 也并非没有办法去访问甚至修改), 而在基类 Animal 中是不存在的...虚拟析构函数 (Virtual destructors)
关于析构函数, 若类中存在虚函数, 则必须将该类的析构函数也设为 virtual, 否则会有麻烦, 因为如果不是 virtual, 在析构时发生的是静态绑定...重写 (Overridding)
C++ 中, Overidding 重定义了 virtual function 的函数体, 发生 overriding 之后, 若要调用基类中的同名的 virtual...然后问题出现了:
typedef void(*Fun)(Animal*);
Animal* a = new Dog();
int* p = (int*)a;//*p 是一个指针, 指向虚函数表
int...换到 g++ 编译器上, 再试试看:
image.png
尽管编译器给出了不少 waring ,但这确实是预期的结果.