gpt4 book ai didi

c++ - 如何覆盖非虚函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:22 27 4
gpt4 key购买 nike

override 的全新语法允许编译器在没有真正override 虚函数时报告错误 N3206 .

class Base {
virtual void vfunc();
void afunc();
};

以下情况将在 class Derived : public Base 中出错,如 Std 示例中所述:

  • void vfunk() 覆盖;//错误:打字错误
  • void vfunc(int) 覆盖;//错误:参数
  • void vfunc() 常量覆盖;//错误:简历

但是如果基方法不是虚拟的呢?

  • void afunk() 覆盖;//?
  • void afunc(int) 覆盖;//?
  • void afunc() const override//?;

最佳答案

规范草案 (n3242) 说

If a virtual function is marked with the virt-specifier override and does not override a member function of a base class, the program is ill-formed.

由于您显示的函数声明不是虚拟的,因此您也与

A virt-specifier-seq shall contain at most one of each virt-specifier. The virt-specifiers override and final shall only appear in the declaration of a virtual member function.

请注意,与基函数具有相同名称和参数列表(包括常量)但不是虚函数的函数不会覆盖该基函数。相反,它被称为隐藏 基本功能。

通过在函数声明之后放置 new 而不是 override 来指定函数隐藏基函数是 C++0x 草案的一部分,但不会成为一部分C++0x 的问题,因为在为非函数成员找到用于及时放置 new 的语法点时存在问题。因此,它被 C++0x 否决了。

关于c++ - 如何覆盖非虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com