UNCOPYABLE() = default;声明在protected的作用:
1、类外部不可以构造对象。
2、在类内部或者类派生类内部可以构造对象
虚函数表(虚基表)的指针占8个字节
类方法的第一个参数其实是this指针,只是被隐藏起来了,用原生的指针调用类方法时,第一个参数要记得是this而不是表面的第一个参数
dynamic_cast<类型>(对象);将对象的类型转化成中括号中的类型
在这里如果p的父类不是A则转化失败,结果为nullptr,如果是父类则不为空
用dynamic_cast之前,前提是p的基类是有虚函数的(多态)因为dynamic_cast是通过虚基表来判断A是否为p的父类