C++ :Polymorphism 多态

什么是多态?
基类**方法用virtual关键词修饰(虚函数)**,基类对象和子类对象对该方法使用相同的调用方式会分别调用各自类里面实现的函数

多态的底层机制:动态联编和静态联编。
静态联编:非虚函数,在编译时就确定好了调用关系。
动态联编:在运行时才去确定调用关系。包含虚函数的类,其对象中存在一个指针,该指针指向一个虚函数表,调用虚函数时会通过指针找到虚函数表去调用对应的虚函数。

多态的限制

  • 函数调用通过指针传递引用传递时多态才会生效,值传递时不会有多态(此时才用的是静态联编,使用的是基类的方法)。
  • 只有类的成员函数才能声明为虚函数;
  • 静态成员函数不能是虚函数;
  • 内联函数不能是虚函数;
  • 构造函数不能是虚函数;
  • 析构函数一般都声明为虚函数,否则(delete)销毁对象时不会调用子类析构函数而是直接调用基类析构函数;
  • 重载(函数参数不同)函数不可设为虚函数
    也没必要,注意多态的使用场景是使用相同的调用方法即参数都一样。
    返回值例外:函数参数相同,但是返回值是当前对象的指针或引用时(函数体 return this),也可以设为虚函数(返回值为其他时编译都会报错)。
  • 覆盖:函数参数、返回值相同,可设为虚函数;

源码:https://github.com/calmXia/cpp/tree/Polymorphism
参考:韦东山 C++ 课程

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值