多态

xiaoxiao2021-02-28  125

多态包含静态与动态两种,静态指编译时多态,动态指运行时多态

编译时多态:在c++中主要体现在函数模板中

函数重载与编译时多态无关。多态举例:

template<typename T> T add(T x,T y){ T c=x+y; return c; }

运行时多态:主要体现在虚函数中

子类覆盖或者改写父类中的成员函数。如:

#include <iostream> using namespace std; class A{ public: void f1() { cout<<"A::f1()"<<endl; } virtual void f2() { cout<<"A::f2()"<<endl; } }; class B:public A { public: //覆盖 void f1() { cout<<"B::f1()"<<endl; } //重写 virtual void f2() { cout<<"B::f2()"<<endl; } }; int main() { A* p = new B(); B* q = new B(); p->f1(); //调用A::f1() p->f2(); //调用B::f2(),体现多态性 q->f1(); //调用B::f1() q->f2(); //调用B::f2() return 0; }

纯虚函数:

virtual void f3()=0;纯虚函数可以在类外定义函数体

为什么要有纯虚函数:

虚函数可以满足多态性有些类不适合生成对象,如动物。将函数定义为纯虚函数,要求想要生成对象的类必须重写该函数。含有纯虚函数的类叫抽象(基)类,无法生成对象也不会被调用,主要用来统一管理子类对象

转载请注明原文地址: https://www.6miu.com/read-50506.html

最新回复(0)