1.静态多态:函数重载和运算符重载属于静态多态,复用函数名
2.动态多态:派生类和虚函数实现运行多态
1.静态多态的函数地址早绑定——编译阶段确定函数地址
2.动态多态函数地址晚绑定——运行阶段确定函数地址
1.有继承关系
2.子类重写父类中的虚函数
父类指针或引用指向子类对象
重写:函数返回值类型,函数名,参数列表完全一致称为重写
1.代码组织结构清晰
2.可读性强
3.利于前期和后期的扩展和维护
#include案例二.制作饮品using namespace std; class Calculator { public: //纯虚函数,抽象类 virtual int get_Result() = 0; int n_A=0; int n_B=0; }; class Addition :public Calculator { public: int get_Result() { return n_A + n_B; } }; class Subtraction :public Calculator { int get_Result() { return n_A - n_B; } }; class Multiplication :public Calculator { int get_Result() { return n_A * n_B; } }; class Division :public Calculator { int get_Result() { return n_A / n_B; } }; //测试加法 void test() { Calculator* p = new Addition; p->n_A = 100; p->n_B = 150; cout << "n_A+n_B=" << p->get_Result() << endl; delete p; } //测试减法 void test2() { Calculator* p = new Subtraction; p->n_A = 100; p->n_B = 150; cout << "n_A-n_B=" << p->get_Result() << endl; delete p; } int main() { test(); test2(); return 0; }
#includeusing namespace std; class AbstractDringking { public: virtual void Boil() = 0; virtual void Brew() = 0; virtual void PourInCup() = 0; virtual void Addmore() = 0; virtual void Done() = 0; //proceduer void Procedure() { Boil(); Brew(); PourInCup(); Addmore(); Done(); } }; class Coffee :public AbstractDringking { public: virtual void Boil() { cout << "Heat the water" << endl; } virtual void Brew() { cout << "Brew coffee" << endl; } virtual void PourInCup() { cout << "Pour the coffee into the cup" << endl; } virtual void Addmore() { cout << "Add milk" << endl; } virtual void Done() { cout << "Your coffee is finished" << endl; } }; class Tea :public AbstractDringking { public: void Boil() { cout << "Heat the water" << endl; } void Brew() { cout << "Brewing tea" << endl; } void PourInCup() { cout << "Pour the tea into the cup" << endl; } void Addmore() { cout << "Add medlar" << endl; } void Done() { cout << "Your tea is finished" << endl; } }; //Business function void DoWork(AbstractDringking* drink) { drink->Procedure(); delete drink; } void test() { AbstractDringking* p1 = new Coffee; DoWork(p1); cout << "--------------" << endl; AbstractDringking* p2 = new Tea; DoWork(p2); } int main() { test(); return 0; }



