当前位置:   article > 正文

C++(11):指名道姓是虚函数重写的override_c++ override 调用基类

c++ override 调用基类

C++中,当子类重写了基类的虚函数时,编译器不会对函数签名的一致性做判断,而这有可能造成一些似是而非的错误:

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. class Phone{
  5. public:
  6. virtual void makeCall(string phoneNumber)
  7. {
  8. cout<<"make phone call to "<<phoneNumber<<endl;
  9. }
  10. };
  11. class SmartPhone : public Phone{
  12. public:
  13. void makecall(string phoneNumber)//函数签名与基类不一致(拼写错误)
  14. {
  15. cout<<"make phone call to "<<phoneNumber<<" by smart phone"<<endl;
  16. }
  17. };
  18. int main()
  19. {
  20. SmartPhone phone;
  21. phone.makeCall("123456"); //调用基类的函数,输出:make phone call to 123456
  22. phone.makecall("123456"); //调用子类的函数,输出:make phone call to 123456 by smart phone
  23. return 0;
  24. }
  25. 子类SmartPhone原本是要重写基类的makeCall,但却拼写错误,后果是实际上重新声明了一个函数makecall,并没有重写基类的makeCall

C++11增加了关键字override,明确的指出这是一个对虚函数重写,编译器会严格的对函数签名进行检

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/950621
推荐阅读
相关标签
  

闽ICP备14008679号