栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

详解C++成员函数的override和final说明符的用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解C++成员函数的override和final说明符的用法

override 说明符

可使用 override 关键字来指定在基类中重写虚函数的成员函数。
语法

function-declaration override;

备注
override 仅在成员函数声明之后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。
使用 override 有助于防止您的代码中出现意外的继承行为。以下示例演示在未使用 override 的情况下,可能不打算使用派生类的成员函数行为。编译器不会发出此代码的任何错误。

class baseClass
{
  virtual void funcA();
  virtual void funcB() const;
  virtual void funcC(int = 0);
  void funcD();
};

class DerivedClass: public baseClass
{
  virtual void funcA(); // ok, works as intended

  virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not
      // override baseClass::funcB() const and it is a new member function

  virtual void funcC(double = 0.0); // DerivedClass::funcC(double) has a different
     // parameter type than baseClass::funcC(int), so
     // DerivedClass::funcC(double) is a new member function

};

当使用 override 时,编译器会生成错误,而不会在不提示的情况下创建新的成员函数。

class baseClass
{
  virtual void funcA();
  virtual void funcB() const;
  virtual void funcC(int = 0);
  void funcD();
};

class DerivedClass: public baseClass
{
  virtual void funcA() override; // ok

  virtual void funcB() override; // compiler error: DerivedClass::funcB() does not 
    // override baseClass::funcB() const

  virtual void funcC( double = 0.0 ) override; // compiler error: 
    // DerivedClass::funcC(double) does not 
    // override baseClass::funcC(int)

  void funcD() override; // compiler error: DerivedClass::funcD() does not 
// override the non-virtual baseClass::funcD()
};


若要指定不能重写函数且不能继承类,请使用 final 关键字。


final 说明符
可以使用 final 关键字指定无法在派生类中重写的虚函数。您还可以使用它指定无法继承的类。
语法

function-declaration final;

class class-name final base-classes

备注
final 只有在函数声明或类名称后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。
在类声明中使用 final 时,base-classes 是声明的可选部分。
下面的示例使用 final 关键字指定无法重写虚函数。

class baseClass
{
  virtual void func() final;
};

class DerivedClass: public baseClass
{
  virtual void func(); // compiler error: attempting to 
      // override a final function
};

有关如何指定可以重写成员函数的信息,请参阅 override 说明符"。
下一个示例使用 final 关键字指定无法继承类。

class baseClass final 
{
};

class DerivedClass: public baseClass // compiler error: baseClass is 
     // marked as non-inheritable
{
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/64621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号