(1)多态的分类
多态分为两种:
1)静态多态:函数重载和运算符重载属于静态多态,复用函数名
2)动态多态:派生类和虚函数实现运行时多态
(2)静态多态和动态多态的区别:
1)静态多态的函数地中早绑定,编译阶段确定函数地址
2)动态多态的函数地址晚绑定,运行阶段确定函数地址
(2)父类对象的指针(或者引用)=子类对象的指针(或子类对象)//允许这样使用
(3)动态多态的满足条件:
1)继承关系
2)子类重写父类的虚函数
(3)动态多态的使用
1)用父类的指针(或引用)=子类的指针(或子类对象)
#includeusing namespace std; class animal { public: void print1(); virtual void print2(); }; class cat:public animal { public: void print1(); void print2();//重写虚函数的时候virtual子类中可以写可以不写,这里没写 }; class dog:public animal { public: void print1(); virtual void print2();//重写虚函数的时候virtual子类中可以写可以不写,这里写了 }; void animal::print1() { cout<<"this is animal_1"< cout<<"this is animal_2"< cout<<"this is cat_1"< cout<<"this is cat_2"< cout<<"this is dog_1"< cout<<"this is dog_2"< obj->print1(); } void later_bind(animal &obj)//等价于animal &obj=cat_obj;//地址晚绑定,在程序运行的时候再确定函数的地址 { obj.print2(); } void test() { cat cat_obj; early_bind(&cat_obj); later_bind(cat_obj); } int main() { test(); }



