首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

((sub*)p)->test();//输出结果是i am sub,为什么base类的test加上virtual,结果就是i am base?解决方案

2012-05-14 
((sub*)p)-test()//输出结果是i am sub,为什么base类的test加上virtual,结果就是i am base?C/C++ code#i

((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函数

今天刚理解的,不是很清楚 请各位指导

热点排行