搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 张建昆魏利娜 > C++:override和final

C++:override和final

张建昆魏利娜 2020-08-02

1. override 重载

  当你在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以:


class A
{
virtual void foo();
}
class B :public A
{
void foo(); //OK
virtual foo(); // OK
void foo() override; //OK
}


  如果不使用override,当你手一抖,将foo()写成了f00()会怎么样呢?结果是编译器并不会报错,因为它并不知道你的目的是重写虚函数,而是把它当成了新的函数。如果这个虚函数很重要的话,那就会对整个程序不利。

  所以,override的作用就出来了,它指定了子类的这个虚函数是重写的父类的,如果你名字不小心打错了的话,编译器是不会编译通过的:


class A
{
virtual void foo();
};
class B :A
{
virtual void f00(); //OK
virtual void f0o()override; //Error
};


  为了减少程序的运行时错误,还是养成重写虚函数加上override的习惯吧。

2.final

  当不希望某个类被继承,或不希望某个虚函数被重写,可以在类名和虚函数后添加final关键字,添加final关键字后被继承或重写,编译器会报错。例子如下:


class Base
{
virtual void foo();
};

class A : Base
{
void foo() final; // foo 被override并且是最后一个override,在其子类中不可以重写
void bar() final; // Error: 父类中没有 bar虚函数可以被重写或final
};

class B final : A // 指明B是不可以被继承的
{
void foo() override; // Error: 在A中已经被final了
};

class C : B // Error: B is final
{
};



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《C++:override和final》的版权归原作者「张建昆魏利娜」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注张建昆魏利娜微信公众号

张建昆魏利娜微信公众号:gh_0052ce9f8296

张建昆魏利娜

手机扫描上方二维码即可关注张建昆魏利娜微信公众号

张建昆魏利娜最新文章

精品公众号随机推荐