#include<iostream>
using namespace std;
class Drink
{
public:
virtual void Show()
{
cout << "Drink" << endl;
cout << "-----" << endl;
}
};
class Water:public Drink
{
public:
virtual void Show()
{
cout << "Water" << endl;
cout << "-----" << endl;
}
};
class Coffee :public Drink
{
public:
void Show()
{
cout << "Coffee" << endl;
cout << "-----" << endl;
}
};
class Milk :public Drink
{
public:
void Show()
{
cout << "Milk" << endl;
cout << "-----" << endl;
}
};
void Show(Drink*pD)
{
pD->Show();
}
void Show(Drink& pD)
{
pD.Show();
}
//父类函数中前加virtual 子类函数与父类函数同类型且同名的函数前不管加不加virtual 都自动变为virtual型
//1.继承关系
//2.同名且同类型函数
//3.父类指向子类(父类指针创建子类对象)
int main()
{
Water w;
Milk m;
Coffee c;
Drink* d1 = new Coffee;
Show(&w);
Show(&m);
Show(&c);
Show(w);
Show(m);
Show(c);
d1->Show();
return 0;
}
在Drink 中定义了一个虚函数 Show();
在我们定义的全局函数Show中 可根据传参的不同的类来进行不同的Show 这也是一种多态
这里也对全局函数Show进行了一个重载 可根据参数列表的不同来进行不同的Show
在主函数中也可定义一个Drink*类型的指针 用new Coffee进行定义 这样这个指针 的虚函数列表中的Drink::Show就被Coffee的Coffee::Show给重写了 Coffee::Show覆盖了虚函数列表中的Drink::Show