当前位置:首页 > 科技  > 软件

Final & Override :掌握现代C++的继承和多态

来源: 责编: 时间:2024-04-29 09:08:36 104观看
导读C++编程语言中,final和override是两个重要的关键字,它们用于增强类的继承和多态机制。我们就可以使用这两个关键字来帮助我们实现这些功能,这两个关键字在C++11标准中被引入。一、Final 关键字1. 作用final关键字用于标

C++编程语言中,final和override是两个重要的关键字,它们用于增强类的继承和多态机制。我们就可以使用这两个关键字来帮助我们实现这些功能,这两个关键字在C++11标准中被引入。lgG28资讯网——每日最新资讯28at.com

lgG28资讯网——每日最新资讯28at.com

一、Final 关键字

1. 作用

final关键字用于标识一个类或成员函数,表示它不能被继承或覆盖。当应用于类时,它指示该类不能被其他类继承。当应用于成员函数时,它指示该函数不能在派生类中被覆盖。lgG28资讯网——每日最新资讯28at.com

2.使用方法

(1) 类的用法lgG28资讯网——每日最新资讯28at.com

当final关键字用于类时,表示该类不能被继承。lgG28资讯网——每日最新资讯28at.com

class Base final {    // 类Base不能被继承};

(2) 成员函数的用法lgG28资讯网——每日最新资讯28at.com

当final关键字用于成员函数时,表示该函数不能在派生类中被覆盖。lgG28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() final {        // func函数不能在派生类中被覆盖    }};

(3) final的使用示例lgG28资讯网——每日最新资讯28at.com

class Base final {public:    virtual void func() final {        std::cout << "Base::func()" << std::endl;    }};// 错误:无法从final类Base继承class Derived : public Base {    // 错误:无法覆盖final函数func()    // virtual void func() override {    //     std::cout << "Derived::func()" << std::endl;    // }};int main() {    Base base;    base.func();    return 0;}

lgG28资讯网——每日最新资讯28at.com

在这个示例中,类Base被标记为final,因此不能被其他类继承。同样,成员函数func()也被标记为final,因此不能在派生类中被覆盖。lgG28资讯网——每日最新资讯28at.com

二、C++ Override 关键字

1.作用

override关键字用于明确指出派生类中的成员函数旨在覆盖基类中的同名虚拟函数。这有助于编译器检查派生类中的函数是否确实覆盖了基类中的函数,从而提高了代码的可靠性和可维护性。lgG28资讯网——每日最新资讯28at.com

2.使用方法

override关键字只能用于派生类中的成员函数,并且该函数必须覆盖基类中的同名虚拟函数。lgG28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() {        std::cout << "Base::func()" << std::endl;    }};class Derived : public Base {public:    void func() override {        std::cout << "Derived::func()" << std::endl;    }};

override的使用示例:lgG28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() {        std::cout << "Base::func()" << std::endl;    }};class Derived : public Base {public:    void func() override {        std::cout << "Derived::func()" << std::endl;    }};int main() {    Base* basePtr = new Derived();    basePtr->func(); // 输出:Derived::func()    delete basePtr;    return 0;}

在这个示例中,派生类Derived中的func()函数使用了override关键字,明确表示它旨在覆盖基类Base中的同名虚拟函数。这有助于编译器检查func()函数是否确实覆盖了基类中的函数。lgG28资讯网——每日最新资讯28at.com

三、final和override的联合使用

在实际编程中,我们可以同时使用final和override关键字来实现更严格的类继承和虚函数重写控制。例如:lgG28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() {}};class Derived : public Base {public:    void func() final override { // 正确重写了Base::func(),并且禁止进一步重写        // ...    }};class WrongDerived : public Derived {public:    void func() override { // 编译错误,Derived::func()已经禁止重写        // ...    }};

总结

final和override是C++11标准引入的两个关键字,它们为类的继承和多态机制提供了更多的控制权和明确性。final关键字用于指示一个类或成员函数不能被继承或覆盖,而override关键字用于明确指出派生类中的成员函数旨在覆盖基类中的同名虚拟函数。lgG28资讯网——每日最新资讯28at.com

lgG28资讯网——每日最新资讯28at.com

通过对final和override关键字的理解和运用,我们可以更加安全、清晰地设计和实现C++程序。lgG28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-86349-0.htmlFinal &amp; Override :掌握现代C++的继承和多态

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#中使用AES加密和解密JSON数据

下一篇: Python开发利器:Docopt模块帮你轻松解析命令行参数!

标签:
  • 热门焦点
Top