C++最终说明符

在Java中,我们可以使用 最终的 以确保函数不能被重写。我们还可以在Java中使用final来确保类不能被继承。同样,最新的C++标准 C++ 11 添加了最终版本。 在C++ 11中使用最终说明符: 有时,您不希望允许派生类重写基类的虚函数。 C++ 11 允许内置工具使用最终说明符防止重写虚拟函数。

null

考虑下面的示例,它显示了最终说明符的用法。这个程序编译失败。

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中。 这篇文章是有贡献的 见见普拉瓦西 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享