多态

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


编译时多态:在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;
纯虚函数可以在类外定义函数体


为什么要有纯虚函数:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值