1. 多态定义的构成条件
多态是在不同继承关系的类对象,去调同一函数,产生了不同的行为。
就是说,有一对继承关系的两个类,这两个类里面都有一个函数且名字、参数、返回值均相同,然后我们通过调用函数来实现不同类对象完成不同的事件。
//多态的思想 //面向对象3大概念 //封装: 突破c函数的概念....用类做函数参数的时候,可以使用对象的属性 和对象的方法 //继承: A B 代码复用 //多态 : 可以使用未来... //多态很重要 //实现多态的三个条件 //C语言 间接赋值 是指针存在的最大意义 //是c语言的特有的现象 (1 定义两个变量 2 建立关联 3 *p在被调用函数中去间接的修改实参的值) //实现多态的三个条件 //1 要有继承 //2 要有虚函数重写 //3 用父类指针(父类引用)指向子类对象....
#include <iostream> using namespace std; //HeroFighter AdvHeroFighter EnemyFighter class HeroFighter { public: virtual int power() //C++会对这个函数特殊处理 { return 10; } }; class EnemyFighter { public: int attack() { return 15; } }; class AdvHeroFighter : public HeroFighter { public: virtual int power() { return 20; } }; class AdvAdvHeroFighter : public HeroFighter { public: virtual int power() { return 30; } }; //多态威力 //1 PlayObj给对象搭建舞台 看成一个框架 //15:20 void PlayObj(HeroFighter *hf, EnemyFighter *ef) { //不写virtual关键字 是静态联编 C++编译器根据HeroFighter类型,去执行 这个类型的power函数 在编译器编译阶段就已经决定了函数的调用 //动态联编: 迟绑定: //在运行的时候,根据具体对象(具体的类型),执行不同对象的函数 ,表现成多态. if (hf->power() > ef->attack()) //hf->power()函数调用会有多态发生 { printf("主角win "); } else { printf("主角挂掉 "); } } void main() { HeroFighter hf; AdvHeroFighter Advhf; EnemyFighter ef; AdvAdvHeroFighter advadvhf; PlayObj(&hf, &ef); PlayObj(&Advhf, &ef); PlayObj(&advadvhf, &ef) ; //这个框架 能把我们后来人写的代码,给调用起来 cout<<"hello..."<<endl; system("pause"); } void main1401() { HeroFighter hf; AdvHeroFighter Advhf; EnemyFighter ef; if (hf.power() > ef.attack()) { printf("主角win "); } else { printf("主角挂掉 "); } if (Advhf.power() > ef.attack()) { printf("Adv 主角win "); } else { printf("Adv 主角挂掉 "); } cout<<"hello..."<<endl; system("pause"); return ; }