C++ override 关键字用法

[复制链接]
 楼主| keer_zu 发表于 2023-2-28 09:58 | 显示全部楼层 |阅读模式
  • override关键字作用:
    如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。
  • 举例子说明



  1. struct Base
  2. {
  3.     virtual void Turing() = 0;
  4.     virtual void Dijkstra() = 0;
  5.     virtual void VNeumann(int g) = 0;
  6.     virtual void DKnuth() const;
  7.     void Print();
  8. };
  9. struct DerivedMid: public Base
  10. {
  11.     // void VNeumann(double g);
  12.     //接口被隔离了,曾想多一个版本的VNeumann函数
  13. };
  14. struct DerivedTop : public DerivedMid
  15. {
  16.     void Turing() override;
  17.     void Dikjstra() override; //无法通过编译,拼写错误,并非重载
  18.     void VNeumann(double g) override; //无法通过编译,参数不一致,并非重载   
  19. void DKnuth() override; //无法通过编译,常量性不一致,并非重载
  20. void Print() override; //无法通过编译,非虚函数重载
  21. };




 楼主| keer_zu 发表于 2023-2-28 09:59 | 显示全部楼层
  • 如果没有使用override关键字,上面的写法编译可以通过但是运行的效果与真实意愿(希望重载)不符
  • 举例子说明
  1. class testoverride
  2. {
  3. public:
  4.     testoverride(void);
  5.     ~testoverride(void);
  6.     virtual void show() const = 0;
  7.     virtual int infor() = 0;
  8.     virtual void test() = 0;
  9.     virtual int spell() = 0;
  10. };

  11. class B: public testoverride
  12. {
  13. public:
  14.     virtual void show();     //1
  15.     virtual void infor();    //2
  16.     virtual void vmendd();   //3
  17. virtual void test(int x);//4
  18. virtual void splle();    //5
  19. };


上面的1-5个重载函数编译过程中,除了返回值不同的infor会报错以外,其他函数都不会有问题,但是在类实例化的时候会提示是抽象类,因为他们都没有真正实现重载

 楼主| keer_zu 发表于 2023-2-28 09:59 | 显示全部楼层
  1. class C: public testoverride
  2. {
  3. public:
  4.     virtual void show() override;
  5.     virtual void infor() override;   
  6.     virtual void vmendd() override;
  7.     virtual void test(int x) override;
  8.     virtual void splle() override;
  9. };
添加了override以后,会在编译器override修饰符则可以保证编译器辅助地做一些检查,上面的情况无法通过编译

结论
如果派生类里面是像重载虚函数 就加上关键字override 这样编译器可以辅助检查是不是正确重载,如果没加这个关键字 也没什么严重的error 只是少了编译器检查的安全性


您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12917

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12917

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部