C++11新增关键字override

1. C++中常见的成员方法的关系

  1. 重载 overload : 在同一作用域下,函数名相同,参数列表不同,构成重载
  2. 隐藏 overhide :在继承体系中,子类中方法与父类方法的名称一样,在子类中,会将父类的同名方法隐藏
  3. 重写 override : 在继承体系中,子类重新实现父类的虚函数为己所用,(函数名和参数列表形同)

2. C++11中新增override关键字:增强代码可读性,显式的告诉编译器我这个方法覆盖的是子类的某个虚函数,也防止程序员疏忽

class Base {
public:
    Base(int data) :ma(data) { cout << "Base(int data)" << endl; mc = data; }
    ~Base() { cout << "~Base()" << endl; }

    virtual void show() { cout << "Base::show()" << endl; }
protected:
    int ma; 
    int mc;
};

class Deriver :public Base {
public:
    Deriver(int data) :mb(data), Base(data) { cout << "Deriver(int data)" << endl; }
    ~Deriver() { cout << "~Deriver()" << endl; }

    //c+11前 
    //void show() { cout << "Deriver::show()" << endl; }

    //c++11中 子类重写父类的show方法,可以加override
    void show()override { cout << "Deriver::show()" << endl; }
private:
    int mb;
};

这个关键字并不是强制使用的,只不过我们在开发时,使用了更好,因为能让代码的其他读者和使用者一眼就能看出来,当前这个子类的方法是重写了父类的方法,提高代码可读性,使得代码更优雅。

class Base {
public:
    Base(int data) :ma(data) { cout << "Base(int data)" << endl; mc = data; }
    ~Base() { cout << "~Base()" << endl; }

    //virtual void show() { cout << "Base::show()" << endl; }
protected:
    int ma; 
    int mc;
};

class Deriver :public Base {
public:
    Deriver(int data) :mb(data), Base(data) { cout << "Deriver(int data)" << endl; }
    ~Deriver() { cout << "~Deriver()" << endl; }

    //c++11中 子类重写父类的show方法,可以加override
    void show()override { cout << "Deriver::show()" << endl; }
private:
    int mb;
};

当父类中没有可以被覆盖的show()方法时,编译器报错:“Deriver::show”: 包含重写说明符“override”的方法没有重写任何基类方法
某种意义是使得我们程序员能减少错误,能够准确的覆盖我们想覆盖的方法。

3. 总结

  1. 增强代码可读性,使得读者很容易知道当前方法是在重写父类方法;
  2. 某种意义减少程序员失误,准确的去重写我们想要重写的方法,因为重写需要保证函数名和参数列表相同,编译器可以尽早帮我们检查出来是否能够对应的上;
  3. 使用时添加到子类的重写的函数名后即可。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值