面向对象 - 继承控制final和重写控制override

说明

  • 从C++11开始支持override和final关键词。

final

  • final的英文意思是:
adj.最终的;最后的;(指结果)最终的;决定性的;不可改变的
  • 在C++作用类似,可以修饰类,结构体和函数,修饰类和结构体表示禁止继承该类,对于函数表示禁止重写该函数。

final 类

  • 将类标记为final,继承该类会导致编译错误。
class A final {
  //......
};

class B : public A {  //错误!不能继承final类!
    
}; 

final 函数

  • 将方法标记为final,无法在子类中重写该方法
class A {
public:
    virtual void SomeMethod() final;
};

class B : public A {
  public:
    virtual void SomeMethod(); //错误!不能重写该方法!
};

好处

  • 使用final关键词可以明确告诉编译器可以作一些优化,例如:使用了final的virtual函数,编译时可以识别出来,这个函数不能被覆盖,因此会将该类的虚表中删除; 标记为final的类,编译器则根本不会生成虚表,以减少程序资源占用。

override

  • override的英文意思是:
覆盖
  • 在C++中作用类似,用来修饰函数,用途是:在子类中重写父类中的函数时,显式使用该关键词编译器会帮助检查函数重写是否正确,错误时会编译失败,不使用也不会编译失败,但是建议显示使用。
  • 使用示例:
class A {
    virtual void test(int) {}
};
 
class B : A {
    virtual void test(int) override {} // OK
    virtual void test(double) override {} //编译报错
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值