c++多态

编译时多态(静态多态):函数重载,运算符重载,重定义。

运行时多态(动态多态):虚函数。

在c++中,当通过基类指针(或引用)请求调用虚函数时,c++程序会在运行过程中正确地选择与对象关联的派生类中重定义的虚函数。

虚函数的定义和使用:

            virtual  double  area();

1 , 在派生类中重定义的虚函数函数签名必须与基类完全一致,而关键字virtual可以省略。

2 , 虚函数不能是友元函数或静态成员函数。

3 ,  构造函数不能是虚函数,而析构函数可以是虚函数。

4  ,  基类的虚函数在派生类中可以不重新定义。若在派生类中没有重新改写基类的虚函数,则调用的仍然是基类的虚函数。

当父类中的一个函数被virtual修饰的时候,会产生虚函数指针,虚函数指针指向虚函数表。

当运用到虚继承的时候,派生类会重写基类的虚函数表,所以父类指针指向子类对象时,指向的是子类的虚函数表,所以调用的函数也是子类的函数,根据此原理实现运行时多态。

虚析构函数:通过父类指针,释放整个子类空间。

通常情况下,我们用父类指针指向子类空间来实现多态,但是当我们释放空间时,父类指针无法调用子类空间的析构函数,导致子类空间没有释放,从而导致子类空间内存泄漏。

所以,就需要用虚析构函数,用虚析构之后,父类指针就可调用子类空间的析构函数。

      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值