c++禁止覆盖虚函数
C++ forbid overwriting a virtual function
我使用库中的类a,并希望通过自己的类B向其添加一些功能。类B的使用者应该像从类a中派生出来一样从类B中派生出来。
class A {
public:
virtual void func1()=0;
virtual void func2()=0;
...
}
class B: public A {
public:
virtual void func1() {...}
}
所以如果有人创建了从B派生的类C,他必须实现func2:
class C: public B {
public:
virtual void func2() {...}
}
对于我的应用程序来说,C类不覆盖func1是非常重要的,从而消除了B::func1()。
是否有一种方法可以禁止为B的所有子类重写这个虚函数?如果不是在普通的c++中,是否有一些在boost MPL抛出编译器错误,当这个函数被覆盖?
不,这在当前版本的c++中是不可能的,也就是c++ 03。即将到来的c++ 11标准将包括上下文关键字final
,这将使这成为可能:
// C++11 only: indicates that the function cannot be overridden in a subclass
virtual void MemberFunction() final { ... }
Microsoft Visual c++编译器还包括关键字sealed
作为扩展,其功能类似于c++ 11关键字final
,但这只适用于Microsoft的编译器
在c++ 03中没有,但c++ 0x提供了特殊的"final"标识符来禁止这种情况:
http://en.wikipedia.org/wiki/C c++ 0 x # Explicit_overrides_and_final
No。在c++ 03中,不能阻止派生类重写基类的1虚函数。然而,基类可以强制派生类(非抽象类)提供虚函数的实现(在这种情况下,虚函数实际上是纯虚函数)。
<一口> 1。正确的术语是override,而不是overwrite一口>
相关文章:
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 函数覆盖有哪些用例?
- 在子类函数覆盖中省略具有默认值的参数
- C++ 成员变量被非成员函数覆盖
- 用现有函数覆盖虚拟函数
- 函数覆盖是否由编译器自动完成
- 结构被库函数覆盖
- 当在Python中定义__str__时,如何将C 的标准全局函数覆盖
- C++类是否解决函数覆盖问题
- 用私有基函数覆盖公共虚拟函数
- 优先级队列中复制构造函数覆盖的值
- 虚拟函数覆盖预期错误
- C++中的函数覆盖无需"虚拟"即可工作
- C++虚拟函数覆盖
- 如何用非虚拟函数覆盖虚拟函数
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- C++继承函数覆盖
- 纯虚函数覆盖虚函数
- 引用项目的Qt-main()函数覆盖实际项目的main()