问题都写在图片上了我想了一晚上看了很多文章还是没想明白,我眼睛都睁不开可是我还是没想明白,求大佬们了救救我吧
- ****求评价一下我的个人理解,谢谢了╭(°A°`)╮
问题都写在图片上了我想了一晚上看了很多文章还是没想明白,我眼睛都睁不开可是我还是没想明白,求大佬们了救救我吧
你的理解是不对的。首先,你的void o()
函数是不是漏掉了virtual关键字?如果没有virtual,那就是普通函数,只有virtual才会是虚函数(derived class中的同名函数会自动继承virtual,无需声明该关键字)。
其次,你用到的都是对象,而非指针,对象施行的是静态绑定,而非动态绑定。也就是说,当将子类对象赋值给父类对象的时候,会发生截断,从而只保留父类那一部分。例如,
a po;
abc pi = po;
pi.o();
相当于,
a po; // 构造class a对象
abc temp = (abc)po; // 截断po,只保留base class abc那一部分
abc pi = temp; // 拷贝构造abc对象pi
你用base class对象调用函数,当然调用的是base class的函数了。
记住:动态行为只有在利用指针或引用的时候,才会体系出来,利用对象本身体系的是静态行为。