虚函数实现多态的疑问
请看这个函数
#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加上和拿掉,比较一下就知道不同了
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
参考参考