在Java中,我们可以使用 最终的 以确保函数不能被重写。我们还可以在Java中使用final来确保类不能被继承。同样,最新的C++标准 C++ 11 添加了最终版本。 在C++ 11中使用最终说明符: 有时,您不希望允许派生类重写基类的虚函数。 C++ 11 允许内置工具使用最终说明符防止重写虚拟函数。
考虑下面的示例,它显示了最终说明符的用法。这个程序编译失败。
CPP
#include <iostream> using namespace std; class Base { public : virtual void myfun() final { cout << "myfun() in Base" ; } }; class Derived : public Base { void myfun() { cout << "myfun() in Derived" ; } }; int main() { Derived d; Base &b = d; b.myfun(); return 0; } |
输出:
prog.cpp:14:10: error: virtual function ‘virtual void Derived::myfun()’ void myfun() ^prog.cpp:7:18: error: overriding final function ‘virtual void Base::myfun()’ virtual void myfun() final
第二次使用最终说明符: C++中的最终说明符也可以用来防止继承类/结构。如果一个类或结构被标记为final,那么它将不可继承,并且不能用作基类/结构。
以下程序显示如何使用最终说明符使类不可继承:
CPP
#include <iostream> class Base final { }; class Derived : public Base { }; int main() { Derived d; return 0; } |
输出:
error: cannot derive from ‘final’ base ‘Base’ in derived type ‘Derived’ class Derived : public Base
C++中的11与java的最终版本 注意,C++中的最终说明符的使用与java中的说明符相同,但是java在类名之前使用最终的,而C++中的类名之后使用最终说明符。同样的方式,java在方法定义的开始(在返回类型方法之前)使用最终关键字,但是C++ 11使用函数名后面的最终说明符。
CPP
class Test { final void fun() // use of final in Java { } } class Test { public : virtual void fun() final //use of final in C++ 11 {} }; |
与java不同,C++中的最终不是关键字。final只有在上面的上下文中才有意义,否则它只是一个标识符。 不将final作为关键字的一个可能原因是为了确保向后兼容性。可能存在将final用于其他目的的生产代码。例如,下面的程序编译并运行时没有错误。
CPP
#include <iostream> using namespace std; int main() { int final = 20; cout << final; return 0; } |
输出:
20
在java中,final还可以与变量一起使用,以确保一个值只能被赋值一次。这种使用的最终结果不存在于C++ 11中。 这篇文章是有贡献的 见见普拉瓦西 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论