动态联编和虚函数的简单应用

//动态联编和虚函数的简单应用
#include <iostream>
using namespace std;

class Base
{
public:
#if 1 //if 1则fun()为虚函数
virtual
#endif
void fun()//成员函数
{
cout
<<"in base class"<<endl;
}

};

//继承于基类的子类
class subClass:public Base{
public:
void fun()//和基类中的fun函数形参,返回类型都一样
{
cout
<<"in Subclass"<<endl;
}
};

class subClass2:public Base{
public:
void fun()
{
cout
<<"in Subclass2!"<<endl;
}
};

//普通函数
//形参为基类的引用
//其实参也可以是基类的派生类
void test(Base &b)
{
b.fun();
}

int main()
{
//定义3个类对象
Base bc;
subClass sc;
subClass2 sc2;

cout
<<"Call test(bc)"<<endl;
test(bc);
cout
<<"Call test(sc)"<<endl;
test(sc);
//形参为base的派生类,fun函数基类和派生类中都有.
//调用哪个fun成员函数取决于基类中的fun是不是虚函数
//定义为virtual的函数是基类期待派生类重新定义的
cout<<"Call test(sc2)"<<endl;
test(sc2);

return 0;
}



Base中的fun没有定义为虚函数,运行结果如下:


Base中的fun定义为虚函数,运行结果如下:

posted @ 2011-05-20 08:52  hnrainll  阅读(326)  评论(0编辑  收藏  举报