#include iostream閲嶈浇 闅愯棌 閲嶅啓瑕嗙洊using namespace std;class Animalpublic virtual void bark cout Animal barkn endl; virtual void show cout Animal shown endl; ;class Dog public Animalpublic v
该程序的输出是: 8 Dog bark
程序中定义了一个Animal类和一个Dog类,Dog类是Animal类的派生类。Animal类中有两个虚函数,分别是bark()和show()。Dog类重写了bark()函数。
在主函数中,先输出了Animal类的大小,结果为8字节。然后创建了一个Dog对象wc。接下来使用循环遍历wc对象的虚函数表,通过指针调用虚函数。
循环中的第一次迭代,i为0,通过指针操作获取到Dog类的虚函数表的第一个函数指针,并将其转换为正确的函数类型。然后调用该函数,输出"Dog bark"。
循环中的第二次迭代,i为1,通过指针操作获取到Dog类的虚函数表的第二个函数指针,并将其转换为正确的函数类型。然后调用该函数,由于Dog类没有重写show()函数,所以会调用父类Animal的show()函数,输出"Animal show"。
因此,程序的输出为: 8 Dog bark Animal show
原文地址: http://www.cveoy.top/t/topic/iMMs 著作权归作者所有。请勿转载和采集!