更新时间:2017-08-21 08:37:49浏览次数:1+次
接上篇。。。。
3.子类对象赋值给父类对象,然后父类对象再赋值给子类对象的理解
我们再来看下面的代码:AA aa;
A a = aa;
AA aa1 = a;
请看这部分代码,我们已经知道,对象赋值并不会改变对象本身的结构。所以aa1还是AA类对象。因为在赋值的过程中,只是信息的传递,也就是变量的赋值而已。所以,将带有更多信息的aa对象赋值给a对象之后,多余的信息就丢失了。然后再将a对象赋值给aa1,也没法恢复被丢失的数据了。所以,这样的类型转换也是不可行的。父类对象赋值给子类对象在前面已经说明了不可行了。
4.强行将父类对象赋值给子类对象的实现的理解
直接的类型转换或者隐式的类型转换都是不可行的。即像下面的写法会报错:
AA a;
AA aa2 = (AA)a;
或AA a;
AA aa2 = a;
我们来看下面一段代码:AA a;
AA aa2 = *(AA*)&a;
aa2.show();
aa2.say();
这段代码是可以编译通过的。和上面的代码有什么区别呢?区别就在于是如何进行类型转换的!我们这里使用指针。指针是一把锋利的宝剑,一出鞘就可以所向披靡。但是使用宝剑的时候,要小心,以免着魔误伤自己。
相关资讯