您的位置:首页 > 编程语言 > C语言/C++

第一章 关于对象

2015-10-17 16:54 295 查看
Bear = b;

ZooAnimal za = b;//引起切割

//调用ZooAnimal::rotate()

za.rotate();

原文中“ 为什么rotate所调用的是ZooAnimal实体而不是Bear实体?此外,如果初始化函数(应用于上述assignment操作发生时)将一个object内容完整拷贝到另一个object中去,为什么za的vptr不指向Bear的virtual table?

第二个问题的答案是,编译器在(1)初始化及(2)指定(assignment)操作之间做出了仲裁。编译器必须确保如果某个object含有一个或一个以上的vptrs,那些vptrs的内容不会被base class object初始化或改变。至于第一个问题,za并不是一个Bear,它是一个ZooAnimal。多态所造成的“一个以上的类型”的潜在力量,并不能够发挥在“直接存取对象””

对于问题一,我的理解是:因为za肯定是一个ZooAnimal对象,而多态是在指针或引用在不明确对象类型的情况下才会发生的,此时的情况明确为ZooAnimal类型,所以仍然调用ZooAnimal::rotate()。

对于问题二,书上的解释是在对象初始化时,虚函数指针vptr并不会被初始化或改变,这确实解释了“为什么za的vptr不指向Bear的virtual table?”,但是为什么在对象初始化时,虚函数指针vptr并不会被初始化或改变?这也是一个问题,后续有解释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象 c++