((sub*)p)->test();//输出结果是i am sub,为什么base类的test加上virtual,结果就是i am base?
- C/C++ code
#include <iostream>using namespace std;class base{public: void test() { cout<<"i am base"<<endl; }};class sub:public base{public: void test() { cout<<"i am sub"<<endl; }};int main(){ base* p = new base; ((sub*)p)->test();}[解决办法]
第一:子类指针不能执行父类 你想 苹果是水果,能说水果就是苹果吗?
第二:如果父类的test函数不声明为虚函数的话,程序内部不存在虚函数表,属于静态联编。就直接调用子类重载test函数
而加了virtual关键字后父类的test就被说明成了虚函数,程序运行时就会建立虚函数表,属于动态联编,所以调用了虚函数表内的函数,也就是父类的test函数
今天刚理解的,不是很清楚 请各位指导