zoukankan      html  css  js  c++  java
  • C++ 11 :override 关键字的使用

    override 关键字

    作用:在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数。

    位置:函数调用运算符之后,函数体或纯虚函数标识 “= 0” 之前。

    使用以后有以下好处:

    1.可以当注释用,方便阅读

    2.告诉阅读你代码的人,这是方法的复写

    3.编译器可以给你验证 override 对应的方法名是否是你父类中所有的,如果没有则报错.

    override 使用举例

    如果你想重写父类的方法,比如toString()方法:

    #if 1
    public :
    virtual String toString() override {
    	//...
    }
    #else
    public :
    virtual String toString() override=0;
    #endif
    

    正确的是:

    public :
    String toString() override {
    	//...
    }
    

    假如不小心把方法名写错了而没写 override ,这时编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。如:

    // 注意这里的小写方法,实际上是错误的。
    public :
    String tostring() {
        //...
    }
    
    

    相反,如果你很机智,在知道自己要重写父类的方法,加上了 override 标签后,编译器会检查出重写方法错误,会保证你重写父类方法的正确性。

    例子

    #include<iostream>
    using namespace std;
    
    class base
    {
    public:
        virtual void fun1(void)=0;
    };
    
    class derived : public base
    {
    public:
    #if 1 //OK
        void fun1(void) override {
            cout << "a fun1" << std::endl;
        }
    #else // err
        void fun2(void) override {
            cout << "a fun1" << std::endl;
        }
    #endif
    
    private:
        /* data */
    };
    
    int main(int argc, char *argv[])
    {
        derived test;
        test.fun1();
        return 0;
    }
    

    总结:在重写方法时,最好加上这个 override 这个关键字 以 加强代码规范。

    如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
    若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
    博客地址:https://www.cnblogs.com/schips/
  • 相关阅读:
    LAMP环境搭建
    Httpd
    MySQL常用配置和性能压力测试:MySQL系列之十五
    MySQL的高可用实现:MySQL系列之十四
    MySQL的复制:MySQL系列之十三
    备份与恢复:MySQL系列之十二
    日志记录:MySQL系列之十一
    事务隔离实现并发控制:MySQL系列之十
    SpringMVC上传文件(图片)并保存到本地
    W10如何开启LinuxBash及安装Ubuntu
  • 原文地址:https://www.cnblogs.com/schips/p/cpp11_override.html
Copyright © 2011-2022 走看看