父类指针转换为子类指针与父类对象转换为子类对象的疑惑
如题:如下代码:
class A{}; //父类;
class B :public A{}; //子类;
A a; //父类对象,已初始化;
B b; //子类对象,已初始化;
A *pa; //父类指针,已初始化;
B *pb; //子类指针,已初始化;
问题:
1. 为什么父类对象不能转换为子类对象而父类指针可以强制转换为子类指针?
如:pb=(pb*)pa; //合法;他们指向的内存模型和内存大小都不一样为何能转换,小->大
b=a;或者b=(b)a; //非法;
2. 为什么父类指针转换为子类指针需要显式转换而子类指针转换为父类指针不用显式转换?
如:pa=pb; //合法;
pb=pa; //非法;
pb=(pb*)pa; //合法;
希望各位大哥大姐帮帮忙,初学者的疑惑,不知你们初学时有没有遇到这样的疑惑,希望能深入的给我个详细的解释,非常谢谢!