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

虚函数实现多态的疑问解决方案

2012-02-11 
虚函数实现多态的疑问请看这个函数#include iostreamusing namespace stdclass BO{public:virtual void

虚函数实现多态的疑问
请看这个函数
#include <iostream>
using namespace std;
class BO
{
public:
virtual void display()
{
cout<<"BO::display()"<<endl;
}
};
class B1:public BO
{
public:
void display()
{
cout<<"B1::display()"<<endl;
}
};
class D1:public BO
{
public:
void display()
{
cout<<"D1::display()"<<endl;
}
};
void fun(BO *ptr)
{
ptr->display();
}
int main()
{
BO b,*p;
B1 b1;
D1 d1;
p=&b;
fun(p);
p=&b1;
fun(p);
p=&d1;
fun(p);
}
主函数中换为
BO b;B1 b1;D1 d1;b.display();b1.display();d1.display();
这样输出的效果是一样的,为什么要定义成那种虚函数?不是多此一举吗?请高手帮忙解释一下!!!还有最好再举个例子帮助我了解虚函数究竟怎样实现多态的,我举的这个例子实在是看不出来!!万分感激!!!!

[解决办法]
void fun(BO *ptr)
fun的参数是BO*类型,可以实现多态的,c++中指针和引用可以多态。
你可以把fun的参数改成BO类型就看到不同了。
[解决办法]
搞那么复杂干吗?在main函数里加下面代码,然后把virtual加上和拿掉,比较一下就知道不同了

C/C++ code
int main(int argc, char*argv[]){       B1 * p1 = new B1();       B0 * p0 = p1;       p0->display();       p1->display();       return 0;}
[解决办法]
C++编程中虚函数的作用 
http://www.cnblogs.com/goodcandle/archive/2005/09/21/241478.html

参考参考

热点排行