如何覆盖非虚函数
How to override non-virtual functions?
override
的全新语法允许编译器报告错误,如果编译器没有真正覆盖虚函数 N3206。
class Base {
virtual void vfunc();
void afunc();
};
以下情况将是 class Derived : public Base
中的错误,如 Std 示例中所述:
-
void vfunk() override; // err: typo
-
void vfunc(int) override; // err: argument
-
void vfunc() const override; // err: cv
但是,如果基本方法不是虚拟的呢?
-
void afunk() override; // ?
-
void afunc(int) override; // ?
-
void afunc() const override // ?;
规范草案 (n3242) 说
如果虚拟函数用 virt 说明符重写进行标记,并且不覆盖基类的成员函数,则程序格式不正确。
由于您显示的函数声明不是虚拟的,因此您也会遇到冲突
一个 virt-specifier-seq 最多只能包含一个 virt-specim。virt-specifiers 覆盖和 final 只能出现在虚拟成员函数的声明中。
请注意,与基函数具有相同名称和参数列表(包括恒常性)但不是虚拟函数的函数不会覆盖该基函数。相反,据说它隐藏了基本函数。
指定函数通过在函数的声明之后放置new
而不是override
来隐藏基函数是 C++0x 草稿的一部分,但不会是 C++0x 的一部分,因为在为非函数成员查找语法点以及时放置new
时存在问题。因此,它被投票否决了C++0x。
相关文章:
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 函数覆盖有哪些用例?
- 在子类函数覆盖中省略具有默认值的参数
- C++ 成员变量被非成员函数覆盖
- 用现有函数覆盖虚拟函数
- 函数覆盖是否由编译器自动完成
- 结构被库函数覆盖
- 当在Python中定义__str__时,如何将C 的标准全局函数覆盖
- C++类是否解决函数覆盖问题
- 用私有基函数覆盖公共虚拟函数
- 优先级队列中复制构造函数覆盖的值
- 虚拟函数覆盖预期错误
- C++中的函数覆盖无需"虚拟"即可工作
- C++虚拟函数覆盖
- 如何用非虚拟函数覆盖虚拟函数
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- C++继承函数覆盖
- 纯虚函数覆盖虚函数
- 引用项目的Qt-main()函数覆盖实际项目的main()