#ifndef
#define
#include <iostream>
using namespace std;
class fruit {
public:
void xian();
virtual void tian();
};
#endif
#include "fruit.h"
void fruit::xian() {
cout << "fruit::XIAN" << endl;
}

void fruit::tian(){//实现就不能在前面添加virtual
cout << "fruit::virtual tian" << endl;
};
#ifndef
#define
#include "fruit.h"
#include "orage.h"

class zi :public orage {
public:
void xian();
virtual void tian();
};

#endif
#include "zi.h"

void zi::tian() {

cout << "virtual zi::tian" << endl;
}

void zi::xian() {
cout << "zi::xian" << endl;

}
#ifndef
#define
#include "fruit.h"
class orage :public fruit {
public:
void xian();
virtual void tian();
};

#endif
#include "orage.h"

void orage::xian() {
cout << "orage::xian()" << endl;
}
void orage::tian() {
cout << "virtual orage::tian()" << endl;
}
#include "fruit.h"
#include "orage.h"
#include "zi.h"

void f1(fruit *p) {//虚函数实现的多态
p->tian();
}

void f2(fruit *p) {//根据类型选择
p->xian();
}

int main() {
fruit fr;
f1(&fr);
f2(&fr);

orage or;
f1(&or);
f2(&or);

zi z;
f1(&z);
f2(&z);

return 0;
}