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

一段程序解决思路

2012-02-14 
一段程序#includeiostreamusingnamespacestdclassBase{public:virtualvoidshow(){cout Base }}

一段程序
#include   <iostream>
using   namespace   std;
class   Base
{public:
virtual   void   show(){cout < < "Base ";}
};
class   Derived:public   Base
{public:
void   show(){cout < < "Derived ";}
};
int   main()
{Base   b;
Derived   *pd;
pd=(Derived   *)&b;
pd-> show();
return   0;
}


为什么输出base?派生类的指针不是应该指向派生类的虚函数?

[解决办法]
把virtual去掉结果如何?结果输出 "Derived "!
如果不加virtual,那么因为pd-> show()是通过Derived指针调用的,所以输出 "Derived ".
加了virtual之后,系统通过实际对象判断应该调用哪个函数(一般是通过在类对象中隐含的虚函数表),而不是通过指针判断。所以,b本来就是Base类型的,因此输出 "Base ".

Base * pb=new Derived;
pb-> show();
这时就输出Derived了,这是典型的多态应用。通过Base指针调用Derived函数。

热点排行