#include<iostream.h>
class base
{
public:
virtual void fun1(){cout<<"base fun1"<<endl;}
virtual void fun2(){cout<<"base fun2"<<endl;}
void fun3(){cout<<"base fun3"<<endl;}
void fun4(){cout<<"base fun4"<<endl;}
};
class derived: public base
{
public:
virtual void fun1(){cout<<"derived fun1"<<endl;}
virtual void fun2(int x){cout<<"derived fun2"<<endl;}
virtual void fun3(){cout<<"derived fun3"<<endl;}
void fun4(){cout<<"dervied fun4"<<endl;}
};
void main()
{
base * pb;
derived d;
pb=&d;
pb->fun1();
pb->fun2();
pb->fun3();
pb->fun4();
}
/*
fun1在基类base和派生类的dervied中均使用virutal关键字定义虚函数,并且这两个虚函数具有相同的参数,参数类型,
返回值,因此,当通过指针pb 访问fun1函数时,采用动态联编。
fun2 基类与派生类derived 中具有不同的参数。失去虚函数的特性,在调用时进行静态联编。
fun3,在base 中声明为一般成员函数,而在派生类derived中使用virtual关键字定义为虚函数。在这种情况下,
应该以基类中说明的成员函数的特性为标准,即成员函数fun3为一般函数,在调用时,进行静态联编
fun4为一般成员函数
*/