#include "stdafx.h"
#include <iostream>
using namespace std;
class B0 //基类B0声明
{public: //外部接口
virtual void display() //虚成员函数
{cout<<"B0::display()"<<endl;}
};
class B1: public B0 //公有派生
{ public:
void display() { cout<<"B1::display()"<<endl; }
};
class D1: public B1 //公有派生
{ public:
void display() { cout<<"D1::display()"<<endl; }
};
void fun(B0 *ptr) //普通函数
{ ptr->display(); }
int _tmain(int argc, _TCHAR* argv[])
{
B0 b0, *p; //声明基类对象和指针
B1 b1; //声明派生类对象
D1 d1; //声明派生类对象
p=&b0;
fun(p); //调用基类B0函数成员
p=&b1;
fun(p); //调用派生类B1函数成员
p=&d1;
fun(p); //调用派生类D1函数成员
return 0;
}
虚函数好处,写好代码后,基本不用改动代码,有一个共同的类里面根据不同的条件实例化不同的子类对象,在这里只有写成父类指针指向该虚方法,将来子类重新实现了。只有然共同的类中的条件满足新实现的子类虚函数的条件,就行了。最好条件写到别的地方,这样共同代码就不用动了。主要是虚函数,用父类的指针指向虚方法,实现的是子类的虚方法
只要父类定义为虚方法,子类不管声明不声明都是虚方法。new一个对象把该对象传给一个共同方法,这个方法里面就实现了一系列的操作。子类里面的虚方法越多。操作也多,好处也明显。
class() a1
{public:
virsual void fun1(){}
virsual void fun2(){}
virsual void fun3(){}
};
class() b1 public:a1
{public:
void fun1(){-----}
void fun2(){----}
void fun3(){----}
};
class() c1 public:a1
{public:
void fun1(){-----}
void fun2(){----}
void fun3(){----}
};
class() common
{public:
void com(a1* aa){
aa->fun1();
aa->fun2();
aa->fun3();
}
} ;
class() other
{public:
void work()
{
b1 bb = new b1;
common co ;
co.com(bb );
}
};